Hace unos años experimenté con OpenBSD con la intención de probarlo como estación de trabajo guiándome con openbsdjumpstart.org. Si bien no era la herramienta adecuada para mi día a día, me interesó su forma de manejo y quiero darle una segunda oportunidad como laboratorio de casa.

Obteniendo los Archivos de Instalación

Cuando hice todo esto faltaban unas cuantas semanas para el lanzamiento de la versión 7.6 por lo que opté por descargar la versión snapshot y, de paso, forzarme a probar el proceso de upgrade de OpenBSD, que supuestamente asemeja al modo rolling release, i.e., no es necesario reinstalar el SO para un upgrade mayor.

Mi aparato es de arquitectura amd64 y usé wget(1) para descargar todos los archivos necesarios con los siguientes comandos:

$ mkdir ~/Downloads/openbsd
$ cd ~/Downloads/openbsd
$ wget -r --no-parent --no-clobber "https://cdn.openbsd.org/pub/OpenBSD/snapshots/amd64/"
$ mv cdn.openbsd.org/pub/OpenBSD/snapshots/amd64 snapshot-amd64
$ rm -r cdn.openbsd.org
$ cd snapshot-amd64
$ shasum -c SHA256

Preparando Dispositivos de Instalación

Pieza de arte de OpenBSD 7.6
OpenBSD 7.6 fue lanzado el 8 de Octubre del 2024

Yo usé 2 USB para mi instalación, por lo que mis dispositivos eran los siguientes:

  1. USB (“sdb”), ext2, paquetes de software
  2. USB (“sdc”), imagen de disco booteable (install76.img)
  3. SSD, disco en el que instalaré el SO

Noté que al usar el formato FAT para la USB con los paquetes de software ocasiona un error al momento de verificar la integridad. Específicamente, el programa de instalación no reconoce los archivos INSTALL.amd64 ni SHA256.sig.

NOTA: OpenBSD tiene soporte nativo para ext2 pero tengo entendido que no tiene soporte para ext3 ni ext4.

Desde un sistema Linux:

% fdisk /dev/sdb
# crea una particion en la USB, e.g., sdb1
% mkfs.ext2 /dev/sdb1
% mount /dev/sdb1 /mnt/usb
% mkdir -p /mnt/usb/7.6/amd64
% cp -r ~/Downloads/openbsd/snapshot-amd64/* /mnt/usb/7.6/amd64/
% umount /dev/sdb1
% dd if=~/Downloads/openbsd/snapshot-amd64/install76.img of=/dev/sdc bs=1m

NOTA: al momento que descargué los archivos, la ultima versión estable era 7.5, por lo que la versión snapshot se referencía como 7.6.

Proceso de Instalación

Aun no tengo un modelo mental claro de como el sistema operativo mapea los discos a archivos, pero logré instalar el sistema creando archivos especiales con el script MAKEDEV(8).

Primero listé los discos encontrados por el kernel y después llamé al script para crear los archivos especiales:

% sysctl hw.disknames
hw.disknames=sd0:,sd1:f0bda3e4b66f6f9c,sd2:
% cd /dev
% for my_dev in sd0 sd1 sd2 ; do sh MAKEDEV $my_dev ; done ; cd /
% for my_dev in sd0 sd1 sd2 ; do fdisk $my_dev ; done
# [...] contenido de tablas de partición de los 3 discos

Con los discos en su lugar, procedí con la instalación automática que ofrece el instalador. No recuerdo como se llama el script, pero ejecutando ls / deberá ser aparente la ubicación.

Problemas Encontrados

Firmware

Al finalizar la instalación y bootear el sistema por primera vez me encontré con un sistema roto: el proceso de arranque abortaba por no encontrar el firmware (DRM) para mi GPU de AMD. El error decía, entre otras cosas: “openbsd amdgpu_discovery_init failed”

Para solucionar este problema tuve que repetir el proceso de instalación pero esta vez configurando una interfaz de red durante el proceso y que así el firmware pudiera ser instalado automaticámente gracias al comando fw_update(8).

Reloj

Apenas pude bootear a la nueva instalación, tuve problemas al buscar paquetes con pkg_info -Q pues por algún motivo no se configuró correctamente la hora de mi sistema. Esto se corrigió fácilmente con los siguientes comandos:

% rcctl stop ntpd
% /usr/sbin/rdate time.cloudflare.com

NOTA: como regla, prefiero configurar la hora de BIOS a UTC y dejar que los sistemas operativos configuren la zona horaria.

Instalación Base

Una vez con el sistema funcionando, instalé obsdfreqd siguiendo los pasos indicados por Solène. No funcionó a la primera, por lo que tuve que modificar su configuración a través de rc.conf.local(8):

% rcctl enable obsdfreqd
% echo 'obsdfreqd_flags="-T 45 -S hw.sensors.km0.temp0"' >> /etc/rc.conf.local

No hice mi tarea a fondo por lo que fuera del comando rcctl(8) no sabía como funcionan los servicios en OpenBSD. Puesto que tiene un sistema init similar al de Slackware, o sea, /etc/rc.d/, encontré el script de configuración /etc/rc.d/obsdfreqd que inicialmente modifiqué para echarlo a andar, pero abrí los scripts por curiosidad y me sorprendió la simplicidad de rcctl(8). Muy elegante y facil de seguir.

Access Point

Quería configurar mi equipo como Access Point siguiendo el ejemplo 1 de pf(4) pero descubrí despues de varias horas que no es posible replicarlo exactamente:

  • La antena de mi equipo usa el driver iwm(4), diferente al driver athn(4) del ejemplo
  • iwm(4) cuenta con los modos BSS y monitor, que le permiten asociarse con un Access Point y recibir paquetes sin asociarse a un AP, respectivamente.
  • No soporta el modo Host AP necesario para que funcione como Access Point

Conclusión

Pieza de arte de OpenBSD 6.7

Me gustaría seguir escribiendo aquí a medida que vaya configurando mi sistema pero esta publicación ya incluye mas de lo anticipado y ha perdido orden.

Estoy muy satisfecho con el script de instalación automática de OpenBSD, es muy rapido y deja un margen de error pequeño comparandolo con el de Slackware (no tengo experiencia con otros). El manejo del sistema base me parece una chulada, es tan simple que mi instinto fue modificar los scripts para arrancar los daemons que quería y a medio camino recapacité para no seguir hackeando y mejor leer los manuales.

Y los manuales hasta ahora me parece que sostienen su reputación. Quise habilitar un servicio con rcctl así que leí su manual, lo que me llevó a rc.conf(4) y ahí mismo explican rc.conf.local(4).

Por defecto usa ksh a la que no estoy acostumbrado pero para mi usuario la cambié facilmente a bash(1) con chsh(1).