Microordenadores - Desarrollos modernos para sistemas retro

Como instalar OpenBSD en Raspberry Pi 3
8 de Julio de 2017

OpenBSD es mi elección a la hora de montar cualquier tipo de servidor, especialmente si está conectado a internet, debido a su seguridad y a la sencillez de su mantenimiento. Este sistema se ha ganado una buena fama de ser el más seguro de todos ya que la seguridad es una de sus prioridades, así como la corrección del código y una estricta política de no incluir drivers binarios en sus fuentes. Desde hace poco OpenBSD funciona en la Raspberry Pi 3 y aquí explico como hacer la instalación.

OpenBSD tiene una gran documentación, es un sistema muy limpio y su instalación es sencilla, por lo que no repetiré lo que ya está muy bien documentado de forma oficial.

Aquí voy a explicar lo necesario para instalar OpenBSD en la Raspberry Pi 3 gracias al reciente soporte de la plataforma arm64, el primer port de OpenBSD en el que se ha sustituido el compilador GCC por clang. De momento no hay ninguna versión estable, por lo que hay que instalar la versión current. Necesitarás lo siguiente:

Herramientas necesarias

Consideraciones sobre OpenBSD en Raspberry Pi 3

ARMv8 es una arquitectura reciente en este sistema operativo por lo que aún no se considera estable, aunque he hecho pruebas compilando paquetes y no he tenido ningún problema.

Hay que tener en cuenta que, debido a la ausente documentación del chip Broadcom, la Raspberry Pi 3 sólo se podrá utilizar como un servidor headless (sin monitor). Al menos de momento, aparte de la tarjeta MicroSD se necesita un pendrive donde realizar la instalación del sistema.

Aplicaciones interesantes de OpenBSD en la Raspberry Pi 3 pueden ser un firewall para la red usando una tarjeta de red USB soportada o un servidor web seguro. OpenBSD incluye en el sistema base todo tipo de herramientas relacionadas con la red de forma que la dependencia de software de terceros es mucho menor que en otros sistemas.

Este tutorial está hecho para OpenBSD current ya que en el momento en que se escribió no había paquetes precompilados de la versión estable para ARM64. Desde la versión 6.2 OpenBSD ofrece tanto paquetes precompilados como parches binarios con syspatch(8) para esta arquitectura. El procedimiento es prácticamente el mismo, ahorrándote algunos pasos si usas la versión estable.

Como instalar OpenBSD current

Para instalar OpenBSD en la Raspberry Pi 3 hay que tener en cuenta que el sistema no detecta la tarjeta MicroSD salvo cuando arranca, por lo que la instalación deberás hacerla en un pendrive conectado a la Raspberry, y la tarjeta MicroSD deberá seguir conectada a la raspberry solamente para que pueda arrancar, aunque con una actualización de firmware es posible arrancar sin la necesidad de la tarjeta, como se explica en Raspberry Pi 3 booting from USB de la lista de correo de OpenBSD.

Ten en cuenta que no todos los pen drives son detectados correctamente, por lo que si no arranca con uno prueba con otro distinto.

Lectura recomendada

Cómo preparar miniroot61.fs

La imagen para esta placa en OpenBSD 6.1 es miniroot61.fs que se encuentra en el directorio arm64. Para hacer esto descárgala de tu mirror más cercano y compruébala con signify:

$ ftp ftp://ftp.nluug.nl/pub/OpenBSD/snapshots/arm64/miniroot61.fs
$ ftp ftp://ftp.nluug.nl/pub/OpenBSD/snapshots/arm64/SHA256.sig 
$ signify -C -p /etc/signify/openbsd-61-base.pub -x SHA256.sig miniroot61.fs
Signature Verified
miniroot61.fs: OK

Prepara el pendrive tal como indica el FAQ de OpenBSD. En mi caso he grabado la imagen a la tarjeta MicroSD de la siguiente forma (cambiando la X por el número de dispositivo detectado al conectar el lector USB):

$ doas dd if=miniroot61.fs of=/dev/rsdXc bs=20M

Como conectarlo mediante puerto serie UART a TTL

USB a TTL Silicon Labs CP2102 compatible con Linux y OpenBSD

He usado con éxito el adaptador USB a TTL Silicon Labs CP2102 en OpenBSD 6. También funciona en Linux y se puede comprar muy barato de china; yo lo compré en Amazon a unos 6 euros si no recuerdo mal, aunque se puede comprar mucho más barato.

Los pines GPIO para conectar la Raspberry al puerto USB del ordenador desde el que vamos a hacer la instalación se conectan de la siguiente forma:

Raspberry Pi 3 UART pinout

Con el pendrive donde vas a instalar OpenBSD conectado a la Raspberry y la tarjeta que has grabado anteriormente en la ranura MicroSD, ahora simplemente hay que conectar el dispositivo USB a TTL al puerto USB, ejecutar cu -l cuaU0 -s 115200 (o usar minicom si usas Linux) y a continuación encender el dispositivo. A partir de aquí el procedimiento de instalación es el ordinario, y está perfectamente explicado en la guía de instalación de OpenBSD.

Ten en cuenta que no todos los dispositivos USB son soportados por Uboot. Si se para cuando está detectando los discos, prueba con otro pendrive. Una vez que hayas completado la instalación tienes que especificar a Uboot que arranque primero desde usb, ya que si no cada vez que enciendas la Raspberry se ejecutará el instalador desde la tarjeta MicroSD (que debe seguir conectada). Esto se hace interrumpiendo el arranque de Uboot pulsando una tecla y escribiendo estos comandos:

Hit any key to stop autoboot:  0 
U-Boot> setenv boot_targets usb0 mmc0 pxe dhcp
U-Boot> saveenv
Saving Environment to FAT...
writing uboot.env
Error: Invalid FAT entry: 0xffffffe2
Invalid FAT entry
FAT: Misaligned buffer address (000000003ab2cb50)
done
U-Boot> boot

Los errores que muestra no suponen ningún problema. Una vez hecho esto y OpenBSD instalado en el pendrive arrancará al iniciar la Raspberry. Es conveniente activar ssh durante la instalación para poder acceder sin tener que volver a usar la conexión UART.

dmesg

Aquí dejo la información dmesg de la mía con OpenBSD recién instalado:

OpenBSD 6.1-beta (GENERIC) #0: Wed Mar  8 16:17:51 AEDT 2017
    jsg@arm64.jsg.id.au:/usr/src/sys/arch/arm64/compile/GENERIC
real mem  = 989855744 (944MB)
avail mem = 933609472 (890MB)
mainbus0 at root: Raspberry Pi 3 Model B Rev 1.2
simplefb0 at mainbus0: 1824x984
wsdisplay0 at simplefb0 mux 1
wsdisplay0: screen 0 added (std, vt100 emulation)
simplebus0 at mainbus0: "soc"
bcmintc0 at simplebus0
bcmdog0 at simplebus0
pluart0 at simplebus0
com0 at simplebus0: ns16550, no working fifo
com0: console
dwctwo0 at simplebus0
agtimer0 at simplebus0: tick rate 19200 KHz
simplebus1 at mainbus0: "clocks"
usb0 at dwctwo0: USB revision 2.0
uhub0 at usb0 configuration 1 interface 0 "Broadcom DWC2 root hub" rev 2.00/1.00 addr 1
uhub1 at uhub0 port 1 configuration 1 interface 0 "Standard Microsystems product 0x9514" rev 2.00/2.00 addr 2
smsc0 at uhub1 port 1 configuration 1 interface 0 "Standard Microsystems SMSC9512/14" rev 2.00/2.00 addr 3
smsc0: address b8:27:eb:84:93:2e
ukphy0 at smsc0 phy 1: Generic IEEE 802.3u media interface, rev. 3: OUI 0x0001f0, model 0x000c
umass0 at uhub1 port 2 configuration 1 interface 0 "Generic USB Storage" rev 2.00/94.54 addr 4
umass0: using SCSI over Bulk-Only
scsibus0 at umass0: 2 targets, initiator 0
sd0 at scsibus0 targ 1 lun 0:  SCSI0 0/direct removable
sd0: 15247MB, 512 bytes/sector, 31225856 sectors
vscsi0 at root
scsibus1 at vscsi0: 256 targets
softraid0 at root
scsibus2 at softraid0: 256 targets
bootfile: sd0a:/bsd
boot device: sd0
root on sd0a (d3a05467c4912927.a) swap on sd0b dump on sd0b
WARNING: CHECK AND RESET THE DATE!

Como ajustar el reloj y desactivar sndiod

La Raspberry Pi 3 no tiene reloj en tiempo real, por lo que para tener la hora correcta debes configurar OpenNTPD para que ajuste la hora en cada inicio. También desactivaré el servidor de sonido que viene por defecto añadiendo estas líneas al archivo /etc/rc.conf.local:

ntpd_flags="-s"
sndiod_flags=NO

Como actualizar OpenBSD current

Lo primero de todo es mirar en following -current si es necesaria alguna acción manual. A grosso modo, para actualizar OpenBSD current en la Raspberry Pi 3 hay que seguir estos pasos:

  1. Descargar el nuevo archivo bsd.rd del directorio snapshots como hiciste anteriormente.
  2. Grabarlo en la partición a de la tarjeta que va en la Raspberry.
  3. Arrancar la Raspberry con el USB externo desconectado para que arranque desde esta tarjeta y, cuando pregunta por boot> se escribe bsd.rd
  4. Se conecta el pendrive externo que contiene la instalación de OpenBSD.
  5. Se inicia el proceso seleccionando (U)pgrade.
  6. Si has instalado paquetes (aún no disponibles para arm64) ejecuta como root pkg_add -u

Para más y mejor información consulta el FAQ de OpenBSD.

Como descargar el árbol de ports para usar software de terceros

Como aún (en OpenBSD 6.1) no están disponibles los paquetes binarios para la arquitectura arm64 debes compilarlos tú mismo. El proceso es sencillo y viene perfectamente explicado en la sección AnonCVS de la web de OpenBSD. En este ejemplo voy a usar el mirror ftp.hostserver.de, concretamente la rama -current que es la que he instalado:

$ cd /usr
$ cvs -qd anoncvs@ftp.hostserver.de:/cvs get -P ports

Una vez descargado el árbol de ports, que son meras "recetas" para descargar, parchear y compilar los distintos programas, para actualizarlo bastaría con este comando:

$ cd /usr/ports
$ cvs -q up -Pd

Como compilar paquetes desde el árbol de ports

Puedes hacerlo directamente con make o usar la herramienta dpb, que es la forma recomendada ya que es más seguro, más rápido si vas a compilar cierto volumen de paquetes y permite compilaciones distribuidas en varias máquinas. Para ello tienes un tutorial que explica como compilar paquetes con dpb.

Enlaces


Contenido relacionado: