..

Instalando 9front en QEMU

Gracias al bootcamp de Plan 9 de la SDF me motivé a instalar 9front en un emulador. En este artículo no voy a explicar el trasfondo de Plan 9 o de 9front pero con ~peron hablamos del tema recién en un podcast de lo interesante y nerd que es este sistema operativo.

Uno de los problemas de interactuar en un bootcamp con máquinas virtuales del otro lado del mundo es que la latencia es horrible así que, a pesar de ser una experiencia tan interesante, no ves cómo funciona el sistema en la vida real. Los que saben inglés y conocen 9front desde antes saben que hay información sobre cómo instalar el sistema e incluso de cómo instalarlo en una máquina virtual pero en español no hay mucho y tampoco respecto a qué hacer después o qué problemas te puedes encontrar.

Por qué emular y por qué QEMU

Simplemente porque es un sistema experimental y probablemente no quieras tener un portátil ocupado con Plan 9 para trastear un día y luego tener que volver a instalar otra cosa. Y QEMU porque Virtualbox no funciona bien con Plan 9.

Preparación

Antes que todo necesitas un mouse, ojalá de tres botones, aunque la acción de los tres botones puede emularse presionando el botón 1 y 2 a la vez.

También necesitas instalar QEMU. No necesitas instalar interfaces gráficas especiales, con la línea de comandos basta.

Luego de tener QEMU, necesitamos preparar una imagen de disco. Los formatos de disco de Plan 9 son bien especiales así que necesitarás algo de espacio. La guía original recomienda 30 GB (no te preocupes, al igual que en Virtualbox podemos crear una imagen de disco de tamaño dinámico):

qemu-img create -f qcow2 9front.qcow2.img 30G

Y por supuesto, la imagen de la ISO de 9front que puedes conseguir en https://9front.org/iso. No pesa mucho.

Instalando

Iniciemos desde el disco:

qemu-system-x86_64 -cpu host -enable-kvm -m 1024 -net nic,model=virtio,macaddr=00:20:91:37:33:77 -net user -device virtio-scsi-pci,id=scsi -drive if=none,id=vd0,file=9front.qcow2.img -device scsi-hd,drive=vd0 -drive if=none,id=vd1,file=9front-amd64.iso,media=cdrom -device scsi-cd,drive=vd1,bootindex=0

Al principio nos va a aparecer la pantalla negra y nos va a preguntar si arrancar desde la red o desde la unidad de disco con los datos, algo como local!/dev/sdD0/data o local!(algo) y esa es la instalación, así que le damos entrar y luego nos va a preguntar por el usuario, no se debería cambiar glenda, yo no lo cambié. Después pregunta por la resolución de pantalla y el controlador. Hay que dejarlo en vesa con la resolución por defecto. Cuando le demos entrar en esta parte, nos va a abrir un entorno gráfico. Acá nos va a preguntar por el mouse, así que es importante que tengamos cuidado, tenemos dos opciones:

  • ps2 (un ratón simple de dos botones)
  • ps2intellimouse

La diferencia es que el segundo soporta la rueda de desplazamiento (la ruedita del medio). el otro no. Dicho esto, si no has usado 9front antes es MUY recomendable que tengas un ratón a disposición ya que la interacción lo requiere. 9front y Plan 9 en general hacen uso intenso del ratón, especialmente el botón del medio que en ps2 se puede emular presionando simulánteamente el botón izquierdo y derecho.

Es luego de este punto que empieza la instalación real. Acá se abre una especie de versión “live” de 9front pero que es más que nada rio con una terminal y las estadísticas del sistema. No hay muchas aplicaciones.

Antes de continuar, debemos revisar si tenemos conectividad. Escribe:

% ip/ipconfig
% ip/ping texto-plano.xyz

Si da ping, está todo bien y podemos seguir, porque tendremos que descargar algo. Para terminar el ping (o cualquier aplicación) presiona Suprimir.

Esto en la guía de instalación en inglés lo explican al revés pero es importante que lo hagas en este punto:

% webfs
% ramfs
% hget http://plan9.stanleylieber.com/rc/mountcwfs >/tmp/mountcwfs
% chmod +x /tmp/mountcwfs
% bind /tmp/mountcwfs /bin/inst/mountcwfs

(No lo explico mucho a propósito, la instalación sin el script de arriba no me resultó y, en resumen, nos permite usar simplemente una gran partición en vez de varias)

Instalación

Ahora recién podemos empezar la instalación. En la terminal escribimos:

% inst/start

Y comenzamos a recorrer un asistente de instalación que nos va a preguntar qué paso queremos dar primero, pero en rigor, deberíamos seguir lo que nos dé el instalador por defecto, no es complicado si seguimos las instrucciones:

[configfs] Elige cwfs (la opción por defecto)

En partdisk tenemos que elegir la partición que vamos a utilizar. Aquí simplemente debemos tener cuidado de elegir la partición que corresponde al disco duro virtual. Después nos va a preguntar si queremos instalar el mbr:

Install mbr or gpt (mbr, gpt)[no default]: mbr
> w
> q

En preppart: Acá nos va a pedir preparar esa gran partición y ver cómo subdividirla. En vez de usar las tres particiones en que se suele dividir plan9, vamos a dejar una sola:

> d other
> d fscache
> d fsworm
> a fsmain [primer cilindro libre] .+100%
> w
> q

O sea, eliminamos other, fscache y fsworm, agregando fsmain.

En mountfs 9front nos va a preguntar o pedir confirmar cuál es mi partición para realizar la instalación y acá tenemos que indicarle que instale en fsmain: Cuando te pregunte Ream the file system? pon “yes”.

En configdist nos pregunta dónde se encuentra la distribución, esto es, los archivos de instalación. Los tenemos en la imagen así que debemos poner [local] y continuar.

En confignet le decimos a 9front que configure la conexión a la red de forma automática, es decir que usemos dhcp.

En mountdist tenemos que indicarle al asistente dónde está el instalador y le indicamos que se encuentra en la partición / (root), ya que es ahí donde se encuentra montada la imagen del instalador que estamos usando ahora mismo.

En copydist ya estamos instalando el sistema y debemos esperar hasta que nos aparezca:

file system made

Ojo, es una buena idea desplazarnos hacia arriba y ver si el paso de la instalación tuvo algún error.

Después nos va a preguntar por el nombre de la máquina, la zona horaria y la partición de arranque (la única que no borramos cuando preparamos las particiones). Finalmente nos pregunta si queremos instalarle el mbr (le decimos que sí) y si queremos marcarla como activa (también).

Ya está instalado 9front.

Post-instalación

Ahora que está instalado el sistema sugiero apagar la máquina (matar el proceso de qemu) y volver a ejecutarlo sin la ISO):

qemu-system-x86_64 -cpu host -enable-kvm -m 2048 -net nic,model=virtio,macaddr=00:20:91:37:33:77 -net user -device virtio-scsi-pci,id=scsi -drive if=none,id=vd0,file=9front.qcow2.img -device scsi-hd,drive=vd0

Creo que 2 GB de RAM es lo mínimo indispensable para la post-instalación o cualquier momento en que compilemos código ya que 1 GB se me quedó corto compilando alguna.

En este punto les sugiero revisar una página en castellano de un tal starman, donde la persona dueña de esa web coloca varios ejemplos de cosas que hacer. Una de las cosas más importantes que deberíamos hacer es configurar la hora. 9front me permitió configurar el huso horario pero no así tener la hora correcta, para obtenerla de un servidor ntp podemos hacer lo siguiente:

% aux/timesync -n ntp.shoa.cl

Esto luego lo pueden colocar en su profile, que se encuentra en $home/lib/profile.

Otra cosa re importante es pasar el teclado al español:

% cat /sys/lib/kbmap/es > /dev/kbmap

También debemos actualizar el sistema, así:

% sysupdate
% cd /sys/src
% mk install

Esto nos asegura que el sistema no solo esté actualizado, sino que aplicaciones que instalemos, funcionen. Por ejemplo, netsurf requiere varios paquetes para compilarse desde git y puede fallar si el sistema está desactualizado.

Otra cosa importante es importar con 9fs para obtener software. El software finalmente lo encontré en /n/9front!9000/extras pero para acceder a él quizás tengamos que montar previamente

% 9fs 9front

También está /n/contrib

% 9fs 9contrib

Esta secuencia de montaje no es persistente, debemos agregarla a nuestro lib/profile

La web y el correo

En la guía de starman aparece cómo configurar el correo así que no voy a repetir lo que él dijo.

Finalmente ¿cómo instalé netsurf? ¿Y por qué? Bueno, los que hayan usado 9front o Plan 9 saben que existe un navegador llamado mothra pero es muy simple y casi no tiene soporte de javascript ni de CSS que es algo mucho peor. Netsurf aporta una mejor experiencia navegando la web. Existe un repositorio con una versión de netsurf específica para plan9 y se encuentra en https://github.com/netsurf-plan9/nsport. Hay que leer el README y siguiendo las instrucciones casi todo se instaló menos el propio netsurf, para lo cual tuve que ir a https://github.com/netsurf-plan9/netsurf y clonar ese repositorio aparte antes de compilar todo con mk. Ojo que netsurf requiere para compilar unos 2 GB de RAM.

Para información más oficial de 9front entren al FQA. El capítulo 3 explica el hardware, incluyendo virtualización y el capítulo 4 guía en la instalación.

Eso. Cualquier cosa, ya saben dónde encontrarme.