KVM : script d'init
KVM : script d'init jppPour utiliser KVM comme j'en avais envie il fallait que ces machines puissent démarrer lors de la séquence de boot de la machine hôte. Or, a priori, le lancement demande un écran ! Heureusement l'option
--nographic est là.
Cette machine virtuelle est destinée à contenir la MV qui héberge ce site, vu qu'il y a peu de machines et services à surveiller une puissance importante n'est pas nécessaire.
Le script de lancement devient alors :
#!/bin/bash HDA=/dev/mapper/VG00-WEB_PHP7 HDB=/dev/mapper/VG01-WEB_PHP7_SAUVE EXEC='qemu-system-x86_64 -enable-kvm -machine type=pc,accel=kvm:tcg -mem-path /dev/hugepages ' NOM=web-php7 # Creation port "Monitor" pour arrêt machine RESEAU=' -net nic,macaddr=00:16:3e:31:31:01 -net tap,ifname=tap10,script=no,downscript=no ' # Normal launch |
xxxxxxxxx
KVM : script d'init ancien
KVM : script d'init ancien jppPour utiliser KVM comme j'en avais envie il fallait que ces machines puissent démarrer lors de la séquence de boot de la machine hôte. Or, a priori, le lancement demande un écran ! Heureusement l'option --nographic est là.
La machine virtuelle est destinée à contenir une instance de Shinken (analogue au célèbre Nagios mais avec une architecture bien plus souple et évoluée), vu qu'il y a peu de machines et services à surveiller une puissance importante n'est pas nécessaire.
Le script de lancement devient alors :
#!/bin/bash
HDA=/dev/mapper/VG00-SHINKEN_SYS NOM=kvm-shinken
RAM=420M
# clavier FR
OPTION=' -k fr '
OPTION=$OPTION' -nographic '
DEMON=' -daemonize '
# appel script de creation de l'interface "tap"
./qemu-ifup br0 tap1
RESEAU=' -net nic,macaddr=00:16:3e:90:03:01 -net tap, \ ifname=tap1,script=no,downscript=no '
kvm $DEMON -hda $HDA -boot c -name $NOM -m $RAM $OPTION $RESEAU
|
#!/bin/bash
HDA=/dev/mapper/VG00-COM--WEB NOM=toto # Appel du script de création de l'interface réseau # Paramétrage réseau # On lance en background avec l'oprion -nographic |
Cette dernière version de script tourne parfaitement sur "Jessie" et "unstable".
#!/bin/bash
### BEGIN INIT INFO # Provides: shinken
# Required-Start: $network $remote_fs $syslog $time cron
# Default-Stop: 0 1 2 3 6
# Default-Start: 5
# Required-Stop:
# Description: shinken through KVM
### END INIT INFO
FCMD=/tmp/FCMD
case "$1" in
start)
echo 'cd /etc/kvm' >$FCMD
echo './script-noscreen ' >>$FCMD
# Lancement différé pour ne pas surcharger le démarrage de l'hote
cat $FCMD | at now +2 minutes
RETVAL=$?
rm $FCMD
;;
stop)
ssh -i /root/.ssh/la_belle_clef root@machine 'init 0 '
RETVAL=$?
# on laisse à la MV le temps de stopper
echo $0' sleeping 20 sec'
sleep 20
;;
reload|status)
echo 'Not implemented'
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
RETVAL=1
esac
exit $RETVAL
|
Script init systemd
Script init systemd jppARTICLE 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 !