Configuración y optimización de Raspbian en QEMU

Las limitaciones en el rendimiento de la máquina virtual de ARM basada en la herramienta QEMU sobresalen rápido al empezar a utilizarla. Con algunas modificaciones en la configuración, se puede obtener una mejor experiencia en su uso.

Este es el segundo artículo, en una corta serie de dos, para configurar Raspbian OS en el emulador QEMU para Windows. La primera parte la puede consultar en este enlace. Después del primer paso, se obtiene una máquina virtual capaz de ejecutar el sistema operativo Raspbian basado en Debian Buster, sobre una arquitectura ARM, con lo que tenemos el beneficio de poder experimentar con el lenguaje ensamblador para esta familia de procesadores con herramientas completamente gratuitas.

Primeramente haremos algunos cambios en la máquina para optimizar su rendimiento, posteriormente el ambiente se puede configurar para trabajar en él de varias formas distintas, por lo que haremos algunos cambios para que la experiencia sea más eficiente que lo que se obtiene "out of the box".

Opciones de arranque automático

Todos los elementos gráficos de una computadora hacen su uso más simple para la mayoría de las personas, pero se requiere gran cantidad de recursos para hacer el cálculo, carga y despliegue de todos estos elementos en pantalla. Por ello, es vital que el modo gráfico se apague para tener más recursos disponibles para procesamiento propiamente.

Tras ejecutar el archivo raspbian-buster.bat creado anteriormente (por llamada en la consola o simplemente dando doble-click sobre el archivo), se tiene una ventana de la consola de comandos de Windows que se debe dejar abierta y una ventana del emulador con un Raspbian ejecutándose y que eventualmente debería cargar un sistema operativo gráfico con una aplicación de bienvenida y configuración inicial.

Siguiendo los pasos que nos presenta esta ventana, haremos varios cambios, antes de reiniciar la máquina virtual, según el orden de las opciones:

  1. Únicamente dar a la opción Next.
  2. Se nos presentan opciones de idioma que se deben elegir según preferencia del usuario, para esta guía se dejarán las opciones recomendadas, excepto por la marca en la opción Use US keyboard, con esta opción marcada avanzamos a la siguiente ventana.
  3. Es recomendable no usar la contraseña predeterminada, pero se puede configurar nuevamente. Escoja la contraseña que desee y siga a la siguiente opción.
  4. En el emulador no tendremos problemas por overscan o underscan, propios de las conexiones y dispositivos HDMI, por lo que esta ventana se puede omitir y avanzar.
  5. La actualización de paquetes del sistema operativo es opcional, pero recomendada. Aplique lo que prefiera y avance a la siguiente opción.
  6. Todavía no reinicie la máquina virtual, seleccione la opción de Later.

Usando el menú de la frambuesa, arriba a la izquierda, navegue a la categoría Preferences y abra la aplicación Raspberry Pi Configuration, donde haremos algunos cambios adicionales.

  1. En la pestaña System seleccione To CLI como la opción del parámetro Boot.
  2. Muévase a la tercera pestaña, Interfaces, y habilite el servicio SSH seleccionando Enable en la fila que corresponde.
  3. En la penúltima pestaña, Performance, seleccione el modo Turbo (1000MHz) como la opción de Overclock.
  4. Alternativamente, en la última pestaña puede hacer cambios relacionados con idiomas y regionalización.

Una vez que termine con las opciones presione el botón OK y cuando se le pregunte, reinicie la máquina virtual.

Acceso por SSH y VNC

Tras ejecutar el archivo raspbian-buster.bat nuevamente, ahora la ventana del emulador abrirá con la terminal Raspbian que eventualmente debería detenerse con una solicitud de un nombre de usuario. El primer paso es autenticarse en esta terminal. El usuario predefinido en el sistema es pi con la contraseña raspberry, utilice la que usted configuró en el paso anterior, pero no es necesario que la utilice, sino a partir de este momento no se utilizará esta ventana. No la cierre, pero la puede minimizar.

Terminal virtual de Raspbian en QEMU

En el archivo de ejecución por lotes con el comando de arranque de la máquina insertamos parámetros específicos de red para utilizar los protocolos de red SSH (en el puerto 22) y VNC (en el puerto 5901). Más específicamente, lo que sucederá es que QEMU escuchará en los puertos 22022 y 59010 de la computadora local, por todas sus interfaces físicas y la interfaz local, y enviará a la máquina virtual el tráfico que reciba en estos canales.

El resultado esperado tras habilitar el servicio SSH en el paso anterior, es tener acceso al sistema operativo mediante comandos de consola. Hay diversos clientes que se pueden utilizar, para conectarnos a este servicio usaremos como cliente PuTTY, disponible en esta página. Para establecer la conexión, el servidor sería la máquina local (localhost o 127.0.0.1) y el puerto 22022 (según el comando de arranque de ejemplo, si cambió el puerto, cámbielo también para esta conexión). El usuario y contraseña serían el mismo configurado anteriormente.

Con el siguiente comando instalará un servidor de VNC que tiene la capacidad de crear escritorios virtuales contra el escritorio principal que crea la herramienta predeterminada en la imagen:

sudo apt-get install tightvncserver -y

Este servidor crea un escritorio virtual que puede configurarse a cualquier dimensión que se desee, esto utilizando un parámetro con el formato [Número]x[Número], donde el primer número indica la cantidad de pixeles para el ancho y el segundo para el alto. Cada vez que se quiera utilizar este servicio, debe iniciarse manualmente (a menos que se automatice por medio de un script o similar, que no trataremos en esta guía). El siguiente comando inicia un escritorio virtual que estará disponible en el puerto 5901 la primera vez que se utilice tras iniciar el sistema (si no se cierra este escritorio, por un error o a solicitud del usuario, y se vuelve a utilizar, se creará un segundo escritorio disponible en el puerto 5902 y así sucesivamente, pero estos puertos no están expuestos fuera de la máquina virtual):

tightvncserver -geometry [Ancho x alto en pixeles para el escritorio virtual]

Con este servicio ejecutándose, se puede utilizar un cliente como TightVNCViewer o el VNC Viewer, entre otros. No vamos a utilizar mayormente la interfaz gráfica en esta guía, sino que se recomienda el uso de la interfaz SSH como principal medio de uso de la máquina.

Optimización de la máquina

Para iniciar, requerimos expandir el dispositivo de almacenamiento para que ocupe todo el espacio que le agregamos a la imagen original. Esto lo haremos con la siguiente secuencia de comandos:

  1. Inicie la herramienta de trabajo con las particiones del disco duro:
    sudo fdisk /dev/sda
  2. Digite la siguiente secuencia de opciones, únicamente para este paso cada guión significa que debe presionar la tecla Enter:
    P - D - 2 - N - P - - 
    [Sume 1 + el valor del sector de fin de /dev/sda1 según la información en la pantalla e ingréselo]
    - - N - W -
  3. Reinicie la máquina virtual:
    sudo reboot
  4. Aplique el cambio de configuración:
    sudo resize2fs /dev/sda2
  5. Se puede verificar el espacio libre disponible con el comando:
    df -h

 Finalmente, le daremos espacio adicional al archivo de intercambios de memoria, de forma que haya mayor flexibilidad en la ejecución de aplicaciones simultáneamente:

  1. Abrir el archivo de configuración correspondiente:
    sudo nano /etc/dphys-swapfile
  2. Modificar el valor del tamaño de la memoria de intercambio:
    CONF_SWAPSIZE=1024
  3. Salvar el archivo:
    Ctrl+X - Y - Enter
  4. Reiniciar el servicio de intercambio:
    sudo /etc/init.d/dphys-swapfile restart
  5. Se puede verificar el cambio realizado con el comando:
    free -h

El simulador sigue teniendo limitaciones técnicas importantes que lo hacen funcionar de forma distinta al dispositivo físico, pero al menos con esta configuración tenemos un ambiente de trabajo completamente gratuito que nos permite experimentar el trabajo con la arquitectura y sus posibilidades.

No comments

Comentarios en artículos

No comments

Nobody has submitted a comment yet.