ARTICLE EN COURS DE REALISATION.
Les scripts d'init "old fashion" c'est fini, il faut passer par "systemd" pour que tout se passe bien au démarrage de la machine "support".
Afin de pouvoir automatiser totalement le start/stop des machines j'ai choisi d'utiliser les possibilités de gestion liées à qemu (installer "qemu-agent" sur les machines virtuelles) en utilisant un "socket" qui permet de transmettre des ordres tels "powerdown" depuis un script externe, ici lancé par "systemctl stop xxxxxxx".
Il nous faut d'abord créer un fichier "service" à placer dans /lib/systemd/system selon le modèle suivant :
# Manually generated by myself [Unit] Description=Lancement VM Web # After network After=networking.target nss-lookup.target [Service] Type=forking Restart=no TimeoutSec=20s # GuessMainPID=no RemainAfterExit=yes # ExecStart=/etc/kvm_n-portail/LANCE web ExecStop=/etc/kvm_n-portail/STOPVM web [Install] WantedBy=multi-user.target |
Il faut ajouter dans le script de démarrage de la machine virtuelle mettre en place le socket de communication avec le "guest-agent':
# Creation port "Monitor" pour arrêt machine GUEST=' -monitor unix:/tmp/monitor_web,server,nowait ' |
Ce paramètre "GUEST" est à ajouter dans la commande de lancement :
qemu-system-x86_64 -enable-kvm ...... ${GUEST}
Le script "systemd" fait appel à des scripts bash "simples" pour lancer et stopper les machines.
Script LANCE :
#!/bin/bash ret=0 |
Le script pour stopper une machine est bati sur le même principe, STOP :
#!/bin/bash SOCK=/tmp/monitor ret=0 case "$1" in web) SOCK=${SOCK}'_web' if [ -S ${SOCK} ] then echo system_powerdown | socat - UNIX-CONNECT:${SOCK} sleep 10 else echo ${SOCK}' absent' ret=2 fi ;; ### n paragraphes identiques *) echo 'Aucune machine ('$1')' ret=1 ;; esac exit $ret |
That's all folks !