[Nota:. la automatización sin necesidad de utilizar cualquier API de virtualización Desde mi blog post.]
paso 1:
Por defecto, qemu utiliza SDL para mostrar la salida VGA Así, el primer paso es hacer que esta interacción con. qemu a través de s tdio. Qemu ofrece una opción para esto.
a partir de documentos qemu:
-nographic Normalmente, QEMU utiliza SDL para mostrar la salida VGA. Con esta opción, puede deshabilitar totalmente la salida gráfica para que QEMU sea una aplicación de línea de comando simple. El puerto serie emulado es redirigido en la consola. Por lo tanto, aún puede usar QEMU para depurar un kernel de Linux con una consola serie.
Entonces, todo lo que tiene que hacer es invocar qemu con -nographic.
qemu -nographic -hda guest.disk
Paso 2:
Ahora que se puede interactuar con su huésped (o proceso qemu) a través de línea de comandos, hay que automatizar esta interacción La forma obvia de hacerlo en python es iniciar el proceso qemu (con -nographic) con subprocess module y luego comunicarse con ese proceso. Pero para mi sorpresa, esto no funcionó para mí. Entonces, busqué de otra manera.
Más tarde, descubrí que la herramienta más increíble para este tipo de trabajos es Expect. Es una herramienta de automatización para aplicaciones interactivas escritas en tcl.
This guide debería ayudarlo a comenzar con Esperar. Aquí está la secuencia de comandos para ejecutar un invitado con qemu usando Esperar.
#!/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”
lo que significa que tengo que escribir una herramienta que se ejecuta en cada uno de mis invitados sondeando para obtener comandos ... – Raindog
eso no es cierto, puede usar el monitor para enviar las teclas presionadas. también hay un puerto paralelo y un puerto serie. –