Script init systemd

Script init systemd jpp

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
#
#
RFER=/etc/kvm_n-portail
FCMD='/tmp/CDE_'$1

ret=0
case "$1" in 
    web)
        echo "cd ${RFER} "        >${FCMD}
        echo ./web-php7-noscreen    >>${FCMD}
        echo /root/bin/KVMNICE        >>${FCMD}        
        echo 'sleep 5'            >>${FCMD}
        # cat ${FCMD} # at now +1 minute
        chmod u+x ${FCMD}
        ${FCMD}
        ;;
    new-shinken)
        echo "cd ${RFER} "        >${FCMD}
        echo ./new-shinken-noscreen    >>${FCMD}
        echo /root/bin/KVMNICE        >>${FCMD}        
        echo 'sleep 5'            >>${FCMD}
        #  cat ${FCMD} # at now +2 minute
        chmod u+x ${FCMD}
        echo '---------------'${FCMD}
        ${FCMD}
        echo '---------------'
        ;;
    *)    
        echo 'VM ('${1}') not implemented yet'
        ret=1
        ;;
esac
sleep 2
rm -f ${FCMD}
exit $ret
 

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 !