Uso di -monitor e socket per inviare segnali
Premessa:
Quando si una usa qemu il guest viene mostrato su una finestra aperta nell'ambiente grafico su cui stiamo lavorando. Questa finstra non ha pulsanti che permettono di inviare segnali alla macchina (spegni, riavvia, etc).
Quando poi facciamo lavorare qemu come demon (opzione --daemonize), non viene aperta nessuna finstra e per collegarsi al guest bisogna usare un client vnc.
Esempio: qemu -hda immagine.qcow2 -daemonize -vnc :7 -k it
Problema 1: come faccio ad inviare segnali alla macchina?
Semplice, una volta connessi con vnc oppure tramite la finestra di default, premere
ctrl+alt+2 (non F2, ma il numero '2')
Si presenterà il MONITOR di qemu. Assomiglia ad una shell e col comando "help" si ottiene una lista dei parametri che è possibile sigitare, come ad esempio "system_poerdown" che equivale a premere il pulsante di accensione/spegnimento di una macchina fisica. Sarà poi il guest a gestire tale segnale.
Tramite la combinazione di tasti ctrl+alt+1 è possibile tornare alla nostra sessione vnc.
Problema : come faccio ad inviare dei segnali in modo non interattivo, ad esempio tramite uno script bash?
La soluzione è meno banale e soprattutto NON documentata :(.
Avrete forse intuito dal titolo che si farà uso dei socket.
Ecco i passi da seguire:
1-Installare socat (dovrebbe essere già pacchettizato dalla vostra distribuzione)
2-Creare un socket su un file
socat UNIX-LISTEN:/tmp/socket,unlink-early -
(ctrl + c per terminarlo)
(consiglio di metterlo in background aggingendo "&" a fine comando)
3-Avviare la macchina virtuale legando il monitor al socket
qemu -monitor unix:/tmp/socket,server,nowait
esempio più completo:
qemu -hda immagine.qcow2 -daemonize -vnc :7 -k it -monitor unix:/tmp/socket,server,nowait
4-Ora è possibile inviare comandi redirigendoli sul socket
echo "system_powerdown" | socat - UNIX-CONNECT:/tmp/socket
Tutti i comandi che avete visto prima digitando "help" nel monitor, li potete passare alla macchina virtuale tramite uno script bash e la sintassi sopra menzionata.
