Actualizar OpenBSD

Escrito por Adrian Ali el 27 de octubre de 2021 usando OpenBSD Release 7.0. Actualizado el 28 de octubre de 2023 usando OpenBSD Release 7.4. contacto: adrianali arroba fortix.com.ar

Índice

1. Introducción
2. Versiones de OpenBSD
3. Pasos para actualizar release
3.1. Actualizar kernel y userland
3.2. Actualizar firmware
3.3. Actualizar parches en el kernel y userland
3.4. Actualizar archivos de configuración
3.5. Actualizar los paquetes instalados
3.6. Chequear la consistencia de los paquetes instalados
3.7. Borrar archivos obsoletos después de una actualización
4. Referencias

1. Introducción

Unos de los objetivos propuestos por el proyecto OpenBSD es que el sistema operativo sea fácil de actualizar, puesto que se considera que un sistema que es difícil de actualizar no se actualizara a tiempo, con los cual va a tener vulnerabilidades de seguridad, por tal motivo OpenBSD hace un gran esfuerzo para que la actualización sea fácil y efectiva.

2. Versiones de OpenBSD

En OpenBSD las versiones son las siguientes:

current: es el código más nuevo que esta debutando en público. Se va actualizando gradualmente y es donde se prueban las nuevas versiones de software.

snapshots: es el current de un día en particular, es más fácil de instalar que current puesto que viene empaquetado y se eligen los días que current no esta muy sucio, es recomendable instalar snapshots antes que current incluso para el proyecto OpenBSD puesto que de esta forma sabemos exactamente que actualización esta con bugs y podemos informar.

release: Cada mayo y noviembre se genera un snapshots de calidad que se llama release.

stable: es una versión release casi congelada con todos los parches, los desarrolladores tratan de no tocar una versión estable.

3. Pasos para actualizar release

Los siguientes pasos de actualización no necesariamente deben seguir el orden propuesto, sin embargo lo creo conveniente. Por otro lado tampoco significa que deba hacer la totalidad de los mismos siempre, por ejemplo es muy común ejecutar solo actualizaciones de patch, repitiendo esto varias veces antes de la salida de una versión release o es muy común actualizar ciertos paquetes cuando lo necesitamos y no esperar como se dijo la salida del nuevo release para hacerlo.

3.1. Actualizar kernel y userland

El comando para realizar la actualización del kernel y el userland a nivel release es:

sysupgrade -r -n -k

descarga los sets de actualización desde los repositorios de OpenBSD, una ves descargados el proceso solicita reiniciar para aplicar los cambios, ejemplo de salida:

puffy ~ root # sysupgrade -r -n -k    
Fetching from https://cdn.openbsd.org/pub/OpenBSD/7.4/amd64/    
SHA256.sig   100% |*************************************|  2144       00:00        
Signature Verified    
INSTALL.amd64 100% |************************************| 44949       00:00        
base74.tgz   100% |*************************************|   368 MB    00:25        
bsd          100% |*************************************| 24750 KB    00:02        
bsd.mp       100% |*************************************| 24845 KB    00:03        
bsd.rd       100% |*************************************|  4550 KB    00:02        
comp74.tgz   100% |*************************************| 75644 KB    00:07        
game74.tgz   100% |*************************************|  2748 KB    00:01        
man74.tgz    100% |*************************************|  7831 KB    00:01        
xbase74.tgz  100% |*************************************| 57135 KB    00:08        
xfont74.tgz  100% |*************************************| 22968 KB    00:03        
xserv74.tgz  100% |*************************************| 14951 KB    00:02        
xshare74.tgz 100% |*************************************|  4578 KB    00:01        
Verifying sets.    
Fetching updated firmware.    
fw_update: added none; updated intel; kept none    
Will upgrade on next reboot    
puffy ~ root #

cuando reiniciemos el proceso de actualización terminará, no hace falta hacerlo al instante, puede ser en cualquier momento. Comando para reiniciar:

puffy ~ # reboot

en el proceso de reinicio el sistema detecta que se está actualizando y solo dispara la continuación de la misma, pantalla que muestra como instala los sets cuando reinicia:

Welcome to the OpenBSD/amd64 7.4 installation program.
Performing non-interactive upgrade...
Terminal type? [vt220] vt220
Available disks are: sd0.
Which disk is the root disk? ('?' for details) [sd0] sd0
Checking root filesystem (fsck -fp /dev/sd0a)... OK.
Mounting root filesystem (mount -o ro /dev/sd0a /mnt)... OK.
Force checking of clean non-root filesystems? [no] no
fsck -p 79184c3a2827d8c4.d... OK.
fsck -p 79184c3a2827d8c4.e... OK.
/dev/sd0a (79184c3a2827d8c4.a) on /mnt type ffs (rw, local, wxallowed)
/dev/sd0d (79184c3a2827d8c4.d) on /mnt/tmp type ffs (rw, local, nodev, nosuid)
/dev/sd0e (79184c3a2827d8c4.e) on /mnt/var type ffs (rw, local, nodev, nosuid)

Let's upgrade the sets!
Location of sets? (cd0 disk http nfs or 'done') [http] disk
Is the disk partition already mounted? [yes] yes
Pathname to the sets? (or 'done') [7.4/amd64] /home/_sysupgrade/

Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-', e.g.: '-game*'. Selected sets are labelled '[X]'.
    [X] bsd           [X] base74.tgz    [X] game74.tgz    [X] xfont74.tgz
    [X] bsd.mp        [X] comp74.tgz    [X] xbase74.tgz   [X] xserv74.tgz
    [X] bsd.rd        [X] man74.tgz     [X] xshare74.tgz
Set name(s)? (or 'abort' or 'done') [done] done
Directory does not contain SHA256.sig. Continue without verification? [no] yes
Installing bsd          100% |**************************| 24750 KB    00:00    
Installing bsd.mp       100% |**************************| 24845 KB    00:00    
Installing bsd.rd       100% |**************************|  4550 KB    00:00    
Installing base74.tgz   100% |**************************|   368 MB    00:36    
Installing comp74.tgz   100% |**************************| 75644 KB    00:18    
Installing man74.tgz    100% |**************************|  7831 KB    00:03    
Installing game74.tgz   100% |**************************|  2748 KB    00:00    
Installing xbase74.tgz  100% |**************************| 57135 KB    00:07    
Installing xshare74.tgz 100% |**************************|  4578 KB    00:11    
Installing xfont74.tgz  100% |**************************| 22968 KB    00:04    
Installing xserv74.tgz  100% |**************************| 14951 KB    00:01    
Location of sets? (cd0 disk http nfs or 'done') [done] done
Making all device nodes... done.
Multiprocessor machine; using bsd.mp instead of bsd.
fw_update: add none; update none; keep intel,vmm
Relinking to create unique kernel... done.

CONGRATULATIONS! Your OpenBSD upgrade has been successfully completed!

syncing disks... done
rebooting...

NOTA: Si quisieramos usar la versión snapshot de OpenBSD el comando "sysupgrade" sería:

sysupgrade -s -n -k

3.2. Actualizar firmware

Si bien el comando "sysupgrade" del punto anterior hizo una actualización de los archivos de firmware podemos confirmar que este todo actualizado ejecutando este comando:

puffy ~ #
puffy ~ # fw_update
puffy ~ #

Cada cierto tiempo podemos ejecutar este comando y ver si no hay actualizaciones para los firmware que tenemos instalados.

3.3. Actualizar parches en el kernel y userland

El comando "sysupgrade" actualiza la versión de release a la última, pero es muy probable que con el transcurrir de los días de haberse liberado la nueva versión release hayan salidos parches para ser instalados. Si queremos consultar que parches estan disponibles para instalación ejecutamos:

puffy ~ # syspatch -c
001_xserver
002_msplit
puffy ~ #

si nos muestra algún parche, para realizar las instalación de los mismos ejecutamos:

puffy ~ # syspatch
Get/Verify syspatch74-001_xserver... 100% |*******************************************************************|  4466 KB    00:00    
Installing patch 001_xserver
Get/Verify syspatch74-002_msplit.tgz 100% |*******************************************************************| 93204       00:00    
Installing patch 002_msplit
Relinking to create unique kernel... done; reboot to load the new kernel
Errata can be reviewed under /var/syspatch
puffy ~ #

luego reiniciar si lo solicita:

puffy ~ # reboot

para consultar todos los patch que tiene un sistema instalado ejecutamos:

puffy ~ # syspatch -l
001_xserver
002_msplit
puffy ~ # 

3.4. Actualizar archivos de configuración

En el proceso de actualización anterior OpenBSD no sobrescribió ningún archivo de configuración, si bien si dejo los nuevos listos para que nosotros revisemos la actualización de los mismos, cosa de no perder configuraciones propias. Para actualizar los archivos de configuración se usa el comando:

sysmerge

El comando "sysmerge" vendría a ser como el comando "etc-update" de Gentoo, permite gestionar la actualización de archivos de configuración ya sea dejando el original, cambiando el original por el nuevo o haciendo un merge de ambos. Ejemplo, al ejecutar sysmerge busca el primer archivo a actualizar y nos muestra un diff unificado entre el viejo y el nuevo:

========================================================================

===> Displaying differences between ./etc/ssh/sshd_config and installed version:

--- /etc/ssh/sshd_config        Fri Oct 16 12:31:48 2020
+++ ./etc/ssh/sshd_config       Thu Sep 30 17:00:43 2021
@@ -1,4 +1,4 @@
-#      $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
+#      $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
 
 # This is the sshd server system-wide configuration file.  See
 # sshd_config(5) for more information.
@@ -27,7 +27,7 @@
 # Authentication:
 
 #LoginGraceTime 2m
-PermitRootLogin yes
+#PermitRootLogin prohibit-password

luego de mirar el diff presionamos la tecla 'q' y nos muestra en un menú las opciones:

  Use 'd' to delete the temporary ./etc/ssh/sshd_config
  Use 'i' to install the temporary ./etc/ssh/sshd_config
  Use 'm' to merge the temporary and installed versions
  Use 'v' to view the diff results again

  Default is to leave the temporary file to deal with by hand

How should I deal with this? [Leave it for later]

vamos a dejar nuestro archivo original así que elegimos la opción 'd'.

3.5. Actualizar los paquetes instalados

A diferencia de una distribución Linux los sistemas BSD como OpenBSD separan lo que es el sistema operativo principal o base (kernel y userland) de lo que son los paquetes o también llamados en el mundo BSD los Ports. Por ejemplo, en OpenBSD Apache es un paquete, o sea que debe ser instalado explícitamente porque no viene en el sistema base, lo mismo para PostgreSQL, GIT y muchos más. Comando para hacer un update a todos los paquetes previamente instalados:

puffy ~ # pkg_add -uvm

3.6. Chequear la consistencia de los paquetes instalados

Es recomendable después de cada actualización chequear con este comando la consistencia de los paquetes instalados, simplemente ejecutándolo así:

puffy ~ # pkg_check

3.7. Borrar archivos obsoletos después de una actualización

Este paso lo hacemos con el comando "sysclean" , el mismo genera un listado de todos los archivos obsoletos, debemos revisar ese listado sacando los archivos personales que queremos conservar y luego borrar el resto, ejemplo:

Generamos el listado:

puffy ~ # sysclean > /tmp/output.txt

borrar de la lista "/tmp/output.txt" los archivos que no queremos borrar del sistema, seguramente muchos seran archivos generados por nosotros mismos, estos archivos los tenemos que agregar en "/etc/sysclean.ignore" para que la próxima ves "sysclean" no los tenga en cuenta al generar el listado, ejemplo:

puffy ~ # cat /etc/sysclean.ignore 
/etc/mail/smtpd.conf.ori
/mnt/mi_disco
/backups
/datos
puffy ~ #

ahora borrar todo los archivos que están en "/tmp/output.txt".

4. Referencias

man fw_update

man pkg_add

man pkg_check

man sysmerge

man syspatch

man sysupgrade