128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | |
| 
 | |
| function display_help() {
 | |
|     uecho "$scriptname: s'assurer que les services sont lancés pour un type de virtualisation
 | |
| 
 | |
| USAGE
 | |
|     $scriptname type
 | |
| 
 | |
| Les types supportés sont virtualbox et kvm (par défaut)"
 | |
| }
 | |
| 
 | |
| source "$(dirname "$0")/ulib/ulib" &&
 | |
| urequire DEFAULTS service ||
 | |
| exit 1
 | |
| 
 | |
| function ensure_kvm() {
 | |
|     # S'assurer que les modules VirtualBox sont déchargés et que les modules kvm
 | |
|     # sont chargés, et que le service libvirt-bin est démarré
 | |
|     local module modified
 | |
| 
 | |
|     if [ -z "$check_only" ]; then
 | |
|         # Vérifier que les modules vbox* sont déchargés
 | |
|         for module in vboxpci vboxnetadp vboxnetflt vboxdrv; do
 | |
|             if lsmod | quietgrep "$module"; then
 | |
|                 eecho "-$module"
 | |
|                 rmmod "$module" || return 1
 | |
|                 modified=1
 | |
|             fi
 | |
|         done
 | |
|     fi
 | |
| 
 | |
|     # Vérifier que kvm{,_intel,_amd} sont chargés
 | |
|     if grep -q '^flags.*\<vmx\>' /proc/cpuinfo; then
 | |
|         module=kvm_intel
 | |
|     elif grep -q '^flags.*\<svm\>' /proc/cpuinfo; then
 | |
|         module=kvm_amd
 | |
|     else
 | |
|         module=
 | |
|     fi
 | |
|     if [ -n "$module" ]; then
 | |
|         for module in kvm $module; do
 | |
|             if ! lsmod | quietgrep "$module"; then
 | |
|                 if [ -n "$check_only" ]; then
 | |
|                     return 1 # le module n'est pas chargé
 | |
|                 else
 | |
|                     eecho "+$module"
 | |
|                     modprobe "$module" || return 1
 | |
|                     modified=1
 | |
|                 fi
 | |
|             fi
 | |
|         done
 | |
|     fi
 | |
| 
 | |
|     [ -n "$check_only" ] && return 0
 | |
|     [ -n "$modified" ] && sleep 1
 | |
| 
 | |
|     service=
 | |
|     if check_sysinfos -d redhatlike; then
 | |
|         for i in libvirtd libvirtd-bin; do
 | |
|             [ -f "/etc/init.d/$i" ] && {
 | |
|                 service="$i"
 | |
|                 break
 | |
|             }
 | |
|         done
 | |
|     elif check_sysinfos -d debianlike; then
 | |
|         service=libvirt-bin
 | |
|     fi
 | |
|     if [ -n "$service" ]; then
 | |
|         # s'assurer que le service tourne
 | |
|         service libvirt-bin startm
 | |
|     else
 | |
|         return 0
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function ensure_virtualbox() {
 | |
|     # S'assurer que les modules kvm sont déchargés, que les modules VirtualBox
 | |
|     # sont chargés, et que le service vboxdrv est démarré
 | |
|     local module modified
 | |
| 
 | |
|     if [ -z "$check_only" ]; then
 | |
|         # Vérifier que kvm{,_intel,_amd} ne sont pas chargés
 | |
|         for module in kvm_intel kvm_amd kvm; do
 | |
|             if lsmod | quietgrep "$module"; then
 | |
|                 eecho "-$module"
 | |
|                 rmmod "$module" || return 1
 | |
|                 modified=1
 | |
|             fi
 | |
|         done
 | |
|     fi
 | |
| 
 | |
|     # Vérifier que les modules vbox* sont chargés
 | |
|     [ -f /lib/modules/`uname -r`/updates/dkms/vboxpci.ko ] &&
 | |
|     vboxmodules=(vboxnetflt vboxnetadp vboxpci vboxdrv) ||
 | |
|     vboxmodules=(vboxnetflt vboxnetadp vboxdrv)
 | |
|     for module in "${vboxmodules[@]}"; do
 | |
|         if ! lsmod | quietgrep "$module"; then
 | |
|             if [ -n "$check_only" ]; then
 | |
|                 return 1 # le module n'est pas chargé
 | |
|             else
 | |
|                 eecho "+$module"
 | |
|                 modprobe "$module" || return 1
 | |
|                 modified=1
 | |
|             fi
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     [ -n "$check_only" ] && return 0
 | |
|     [ -n "$modified" ] && sleep 1
 | |
| 
 | |
|     # s'assurer que le service tourne
 | |
|     service vboxdrv startm
 | |
| }
 | |
| 
 | |
| check_only=
 | |
| parse_opts + "${PRETTYOPTS[@]}" \
 | |
|     --help '$exit_with display_help' \
 | |
|     -c,--check-only,--check check_only=1 \
 | |
|     @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | |
| 
 | |
| run_as_root "$@"
 | |
| 
 | |
| case "${1:-kvm}" in
 | |
| k|kvm) ensure_kvm;;
 | |
| v|vbox|virtualbox) ensure_virtualbox;;
 | |
| esac
 |