Qemu/KVM y la opcion -nographic para una emulacion mas ligera a traves del puerto serie


Estaba yo preparando unas movidas y me vi en necesidad de emular un par de sistemas para hacer trapis de red y tal. El caso es que como conocia de antes qemu/kvm (son lo mismo as que a partir de ahora kvm) pense en emularlo con eso.

Bueno, a la chichilla, kvm tiene una opcion -nographic que he estado mirando, su ayuda dice lo siguiente:

-nographic disable graphical output and redirect serial I/Os to console
Ahora bien, esto hace exactamente lo que dice, ni te da una consola en el sistema ni nada por el estilo, te redirije la entrada/salida del puerto de serie a la terminal donde has ejecutado kvm.

Kvm por defecto te arranca una ventana con SDL y ahi ves el SO que estas emulando, en plan vmware pero con menos mariconeo de pantalla. De esta manera te saltas toda la parte grafica y obtienes una consola en el sistema guest gastando el minimo posible de recursos en la emulacion.

Ahora bien, como he comentado antes, no obtienes una consola magicamente, solo tienes puerto de serie redirigido a tu consola, para poder aprovecharlo debes poder acceder al sistema a traves de ese puerto de serie, y tienes que hacerlo a tres niveles.

  1. Grub: Para poder hablar con grub durante el arranque debe escuchar en el puerto serie
  2. Kernel: En teoria no deberia ser necesario, pero si lo configuras veras el arranque del kernel y posibles problemas
  3. SO: Alguien debe arrancar una consola escuchando el puerto serie no?

Grub

Teniendo un /boot/grub/menu.lst no hay mas que aniadir la siguiente linea y desactivar todos los temas de splash, splashimage y demas rollos graficos de arranque. Esto permite ver una version texto de la mitica pantalla de bienvenida de grub donde puedes seleccionar el kernel con el que arrancar.

serial unit=0 –speed=9600 –word=8 –parity=no –stop=1
terminal serial

Se pone esto antes de la definicion de los kernels a arrancar y ya esta.

Kernel

Para poder ver el arranque del kernel a traves del puerto de serie hay que tener el soporte de puerto de serie activado en el kernel (suele venir por defecto, al menos en debian) y pasarle como parametro al kernel el puerto por el que queremos sacar la consola, algo como esto:

title Debian GNU/Linux, kernel 2.6.18-4-686
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/hda1 ro console=tty0 console=ttyS0,9600n8
initrd /boot/initrd.img-2.6.18-4-686
savedefault
Las 2 ultimas opciones de la linea kernel son la clave, ahi va el puerto y la velocidad de comunicacion, a mi a 9600 me va de lujo. Con esto ya se veria todo el arranque del kernel y el sistema operativo casi hasta el final, en el momento en el que en una consola fisica tendriamos el prompt para user/password esto se para y no hay prompt.

SO

Por ultimo, la mas importante, de hecho yo creo que si no ponemos las otras, tarde o temprano, despues del timeout del grub y del arranque del kernel si tenemos esta acabariamos teniendo consola tambien.

Ahora hay que decirle al sistema operativo que tambien queremos usarlo desde el puerto de serie, que nos de una terminal ahi para que cuando nos conectemos podamos manejarlo. Esto se hace desde el fichero /etc/inittab este es el encargado de arrancar las ttys en linux, y por tanto debe arrancar tambien a la vez una tty en el puerto serie.

Esto se hace aniadiendo esta linea al final de /etc/inittab:

co:2345:respawn:/sbin/getty -L ttyS0 9600 vt100

NombreConsola:RunlevelsdeArranque:EjecutarDeNuevoSiMuere:Ejecutable+Opciones

Una vez aniadido esto y si lo hemos hecho todo bien podremos lanzar kvm con la opcion -nographic y tener un SO emulado sin necesidad de ventanas y pudiendo copiar/pegar y esas cosillas que tienen las consolas.

Para el que no se quiera rallar con todo esto he preparado una imagen de debian en formato qcow de kvm, esta virgen y se puede arrancar con -nographic, todo lo que no se sepa es “debian” (username,userpasswd,rootpaswd,hostname….), solo hay que gunzipearla y arrancarla tal que asi:

$kvm -nographic debian4.0-nographic.qcow
Esta disponible aqui: debian4.0-nographic.qcow.gz

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s

%d bloggers like this: