¿Cómo instalar OpenBSD?
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

Yo usé 2 USB para mi instalación, por lo que mis dispositivos eran los siguientes:
- USB (“sdb”),
ext2
, paquetes de software - USB (“sdc”), imagen de disco booteable (
install76.img
) - 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

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)
.