#!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 urequire DEFAULTS service 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)" } 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" -a -n "$exclusive" ]; 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.*\' /proc/cpuinfo; then module=kvm_intel elif grep -q '^flags.*\' /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= function __guess_service() { for i in libvirtd libvirtd-bin; do [ -f "/etc/init.d/$i" ] && { service="$i" break } done } if check_sysinfos -d redhatlike; then __guess_service elif check_sysinfos -d debian -v jessie+; then __guess_service elif check_sysinfos -d debianlike; then service=libvirt-bin fi if [ -n "$service" ]; then # s'assurer que le service tourne service "$service" 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" -a -n "$exclusive" ]; 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= exclusive=1 parse_opts + "${PRETTYOPTS[@]}" \ --help '$exit_with display_help' \ -c,--check-only,--check check_only=1 \ -x,--exclusive exclusive=1 \ -s,--shared exclusive= \ @ args -- "$@" && set -- "${args[@]}" || die "$args" run_as_root "$@" case "${1:-kvm}" in k|kvm) ensure_kvm;; v|vbox|virtualbox) ensure_virtualbox;; esac