[Nota:. automazione senza l'utilizzo di qualsiasi API di virtualizzazione Dal mio blog post.]
fase 1:
per impostazione predefinita, qemu usa SDL per visualizzare l'output VGA Quindi, il primo passo è rendere questa interazione con. qemu attraverso s tdio. Qemu offre un'opzione per questo.
Da documenti qemu:
-nographic Normalmente, QEMU utilizza SDL per visualizzare l'output VGA. Con questa opzione, è possibile disabilitare completamente l'output grafico in modo che QEMU sia una semplice applicazione a riga di comando. La porta seriale emulata è reindirizzata sulla console. Pertanto, è ancora possibile utilizzare QEMU per eseguire il debug di un kernel Linux con una console seriale.
Quindi, tutto ciò che dovete fare è invocare qemu con -nografico.
QEMU -nographic -hda guest.disk
Fase 2:
Ora che è possibile interagire con il vostro ospite (o il processo qemu) attraverso la linea di comando, è necessario automatizzare questa interazione Il modo ovvio per farlo in python è avviare il processo qemu (con -nographic) con subprocess module e quindi comunicare con quel processo. Ma con mia sorpresa, questo non ha funzionato per me. Quindi, ho cercato un altro modo.
Successivamente, ho scoperto che lo strumento più eccezionale per questo tipo di lavoro è Expect. È uno strumento di automazione per applicazioni interattive scritto in tcl.
This guide dovrebbe aiutarti a iniziare con Expect. Ecco lo script per eseguire un guest con qemu usando Expect.
#!/usr/bin/expect -f
#starts guest vm, run benchmarks, poweroff
set timeout -1
#Assign a variable to the log file
set log [lindex $argv 0]
#Start the guest VM
spawn qemu -nographic -hda guest.disk
#Login process
expect “login: “
#Enter username
send “user\r”
#Enter Password
expect “Password: “
send “user\r”
#Do whatever you want to do with in the guest VM. (Run a process and write result to log)
#poweroff the Guest VM
expect “# “
send “shutdown -h now\r”
il che significa che devo scrivere uno strumento che viene eseguito su ciascun ospite che esegue il polling dei comandi ... – Raindog
non è vero, è possibile utilizzare il monitor per inviare sequenze di tasti. c'è anche una porta parallela e una porta seriale. –