Páginas

jueves, 26 de agosto de 2021

Entornos de Arranque en FreeBSD

 Gestión de entornos de arranque

Un entorno de arranque ZFS es un clon de arranque de los conjuntos de datos necesarios para arrancar el sistema operativo.

Los boot environment funcionan en base a los clone de ZFS. Los snapshot son archivos de solo lectura y los clone de lectura escritura.

Después de crear un boot environment se crea un nuevo datase ZFS.

Directorios excluidos del boot enviroment

/tmp  
/usr/home  
/usr/ports  
/usr/src  
/var/audit  
/var/crash  
/var/log  
/var/mail  
/var/tmp
bectl es la utilidad para gestionar entornos de arranque en ZFS. El comando bectl se utiliza para configurar e interactuar con entornos de arranque ZFS. Los entornos de arranque permiten actualizar el sistema conservando el entorno del sistema antiguo en un conjunto de datos ZFS separado. Incluye el soporte de jaulas (man bectl).

Este comando lista los BEs disponibles.

# bectl list
ZBE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    NR     /          4.21G 2021-08-20 18:46
La columna Activo muestra si este entorno de arranque está en uso. indica si el entorno de arranque está activo ahora. Una N significa que el entorno se está ejecutando. Una R significa que el entorno de arranque se activará al reiniciar. El entorno de arranque utilizado en el reinicio proviene de la propiedad bootfs del pool.

La opción create
crea un nuevo entorno de arranque, que es un clon del BE actualmente arrancado:
# bectl create prueba
# bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    NR     /          4.21G 2021-08-20 18:46
prueba     -      -          8K    2021-08-26 06:58

El entorno prueba no tiene letras activas, ya que no es el BE actualmente arrancado tampoco está configurado para ser el predeterminado en el próximo arranque.Actualmente estamos utilizando el entorno de arranque por defecto, y este mismo entorno de arranque se iniciará en nuestro próximo arranque. Sin embargo, el entorno de la versión prueba está disponible. En cualquier momento puede decirle a FreeBSD que arranque el entorno prueba y obtener el sistema tal y como estaba cuando creó el entorno.


Al reinicio de este sistema el menú de arranque tiene una nueva entrada
8. Boots Environments


Para para entrar en el submenú pulse 8

Para recorrer la lista de BEs Presione 2. Una vez que encuentre el que quiere arrancar, presione a o enter y arrancar en el BE seleccionado.  Seleccionado el BE prueba:


Una vez arrancado el listado cambia a:

# bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    R      -          4.21G 2021-08-20 18:46
prueba     N      /          1.32M 2021-08-26 06:58

El sistema seguirá arrancando en el BE por defecto ya que la R sigue en el BE default. Para establecer permanentemente el BE de prueba como el nuevo predeterminado, utilice el interruptor de activación:
# bectl activate prueba
Successfully activated boot environment prueba

root@freebsd:~ # bectl list
BE         Active Mountpoint Space Created
bectl-boot -      -          17.8M 2021-08-22 16:23
default    -      -          1.36M 2021-08-20 18:46
prueba     NR     /          4.21G 2021-08-26 06:58
Actualización de paquetes en BE

Creando un BE con un nombre referente:
# bectl create update_`date +%d%m%y`
Monte ese BE y realice la actualización dentro de ese BE, puede reiniciar en el nuevo Boot Environments para probar la actualizacion.
Para montar el BE se utiliza el nombre:
root@freebsd:~ # bectl list
BE            Active Mountpoint Space Created
bectl-boot    -      -          17.8M 2021-08-22 16:23
default       -      -          1.41M 2021-08-20 18:46
prueba        NR     /          4.21G 2021-08-26 06:58
update_260821 -      -          8K    2021-08-26 07:41
# bectl mount update_260821
Successfully mounted update_260821 at /tmp/be_mount.RoCg

El punto de montaje es: /tmp/be_mount.RoCg y se tiene que pasar al comando pkg para actualizar repositorios y realizar la actualización.
# pkg -r /tmp/be_mount.RoCg update -f
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100%    163 B   0.2kB/s    00:01    
Fetching packagesite.txz: 100%    6 MiB   1.3MB/s    00:05    
Processing entries: 100%
FreeBSD repository update completed. 30742 packages processed.
All repositories are up to date.

# pkg -r /tmp/be_mount.RoCg update
Checking for updates (57 candidates): 100%.

Number of packages to install: 8
Number of packages to update: 44
Number of packages to reinstall: 5
The process will require 16 MiB more space.
91 MiB to download.
Proceed with this action? [yes/no]: yes
Una vez completada la actualización arranque en ese BE. Una vez que compruebe que todo funciona, puede activar ese BE.

# bectl activate update_260821
Successfully activated boot environment update_260821
root@freebsd:~ # bectl list
BE                      Active Mountpoint Space Created
bectl-boot              -      -          17.8M 2021-08-22 16:23
default                 N      /          1.53M 2021-08-20 18:46
prueba                  -      -          1.39M 2021-08-26 06:58
update_260821           R      -          4.24G 2021-08-26 07:41
Reiniciar el sistema:


# bectl list
BE                      Active Mountpoint Space Created
bectl-boot              -      -          17.8M 2021-08-22 16:23
default                 -      -          1.53M 2021-08-20 18:46
prueba                  -      -          1.80M 2021-08-26 06:58
update_260821           NR     /          4.24G 2021-08-26 07:41
Parchear el Sistema Operativo.

Actualizacion de seguridad.

Crear un BE, montar y tomar nota del nombre del punto de montaje:
# bectl create security_update_`date +%d%m%y`
root@freebsd:~ # bectl list
BE                     Active Mountpoint         Space Created
bectl-boot             -      -                  17.8M 2021-08-22 16:23
default                -      -                  1.53M 2021-08-20 18:46
prueba                 -      -                  1.52M 2021-08-26 06:58
security_update_260821 -      /tmp/be_mount.qzJ3 152K  2021-08-26 10:42
update_260821          NR     /                  4.24G 2021-08-26 07:41
# bectl mount security_update_260821
Successfully mounted security_update_260821 at /tmp/be_mount.qzJ3

El punto de montaje de security_update_260821 es /tmp/be_mount.qzJ3

En primer lugar, obtenga las actualizaciones
utilizando el punto de montaje del BE como basedir -b y la base de datos del BE como workdir -d
# freebsd-update -b /tmp/be_mount.qzJ3 -d /tmp/be_mount.qzJ3/var/db/freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata patches.. done.
Applying metadata patches... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 32 patches.....10....20....30. done.
Applying patches... done.
The following files will be updated as part of updating to
13.0-RELEASE-p4:
/bin/freebsd-version
/boot/kernel/kernel
Para que freebsd-update no utilice su base de datos por defecto en el Boot Environmentes actual:

# rm -rf /var/db/freebsd-update

Crear un nuevo directorio para los parches
# mkdir /var/db/freebsd-update  

Ejecute la herramienta freebsd-update utilizando el punto de montaje del BE como basedir -b y la base de datos del BE como workdir -d.

A continuación, repita ese comando con install:
# freebsd-update -b /tmp/be_mount.qzJ3 -d /tmp/be_mount.qzJ3/var/db/freebsd-update install
src component not installed, skipped
Installing updates...Scanning /tmp/be_mount.qzJ3/usr/share/certs/blacklisted for certificates...
Scanning /tmp/be_mount.qzJ3/usr/share/certs/trusted for certificates...
Scanning /tmp/be_mount.qzJ3/usr/local/share/certs for certificates...
done.
Antes de reiniciar en el BE parcheado, verifique la versión del BE actualmente arrancado:
# freebsd-version -u
13.0-RELEASE-p3

Repita la comprobación de la versión después de reiniciar en el BE security_update_260821:
# freebsd-version -u
13.0-RELEASE-p4
# bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 N      /          249M  2021-08-26 10:42
update_260821          R      -          4.25G 2021-08-26 07:41


Una vez comprobado
que todo marcha como debiera, puede activarlo.

 # bectl activate security_update_260821
Successfully activated boot environment security_update_260821
root@freebsd:~ # bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 NR     /          4.49G 2021-08-26 10:42
update_260821          -      -          1.40M 2021-08-26 07:41

Destruir un boot environment
# bectl destroy update_260821

Renombrar un boot enviroment
este no puede estar activo.
# bectl rename nombreactual nuevo nombre

Actualización del Sistema Operativo lo haré desde otra máquina con SO FreeBSD-12.2-RELEASE y actualizar a FreeBSD-13-RELEASE:

Version actual del SO
# freebsd-version -u
12.2-RELEASE-p10
root@freebsd:~ # bectl list
BE                     Active Mountpoint Space Created
bectl-boot             -      -          17.8M 2021-08-22 16:23
default                -      -          1.53M 2021-08-20 18:46
prueba                 -      -          1.52M 2021-08-26 06:58
security_update_260821 NR     /          4.49G 2021-08-26 10:42
update_260821          -      -          1.40M 2021-08-26 07:41
Crear un nuevo BE y montarlo:
# bectl create release-13.0

root@fbsd12:~ # bectl list
BE           Active Mountpoint Space Created
default      NR     /          4.00G 2021-08-26 12:27
release-13.0 -      -          8K    2021-08-26 14:40

root@fbsd12:~ # bectl mount release-13.0
Successfully mounted release-13.0 at /tmp/be_mount.yUsy

root@fbsd12:~ # bectl list
BE           Active Mountpoint         Space Created
default      NR     /                  4.00G 2021-08-26 12:27
release-13.0 -      /tmp/be_mount.yUsy 232K  2021-08-26 14:40
root@fbsd12:~ # 
Especifique la versión (-r 13.0-RELEASE) a la que se va a actualizar en el comando freebsd-update:

# freebsd-update -b  /tmp/be_mount.yUsy -d /tmp/be_mount.yUsy/var/db/freebsd-update -r 13.0-RELEASE upgrade
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 12.2-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic kernel/generic-dbg world/base world/doc world/lib32

The following components of FreeBSD do not seem to be installed:
world/base-dbg world/lib32-dbg

Does this look reasonable (y/n)? y

Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
nspecting system... done.
Fetching files from 12.2-RELEASE for merging... done.
Preparing to download files... done.
Fetching 10107 patches.....10....20....30....40...
10090....10100... done.
Applying patches...
Applying patches... done.
Fetching 634 files... ....10....20....30
salida cortada
...610....620....630.. done.
Attempting to automatically merge changes in files... done.

The following file will be removed, as it no longer exists in
FreeBSD 13.0-RELEASE: /etc/motd
Does this look reasonable (y/n)? y
To install the downloaded upgrades, run "/usr/sbin/freebsd-update install"

# freebsd-update -b /tmp/be_mount.yUsy -d /tmp/be_mount.yUsy/var/db/freebsd-update -r 13.0-RELEASE install
src component not installed, skipped
Installing updates...

Se han instalado las actualizaciones del kernel. Por favor, reinicie y ejecute
"/usr/sbin/freebsd-update install" de nuevo para terminar de instalar las actualizaciones.

# freebsd-update -r 13.0-RELEASE install
src component not installed, skipped
Installing updates...Scanning /tmp/be_mount.yUsy/usr/share/certs/blacklisted for certificates...
Scanning /tmp/be_mount.yUsy/usr/share/certs/trusted for certificates...
Scanning /tmp/be_mount.yUsy/usr/local/share/certs for certificates...

Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "/usr/sbin/freebsd-update install"
again to finish installing updates.

Despues de reiniciar con el Boot Environments release-13.0
compruebe la version del SO:

# freebsd-version -u
13.0-RELEASE-p4
# bectl list
BE           Active Mountpoint Space Created
default      R      -          4.00G 2021-08-26 12:27
release-13.0 N      /          1.93G 2021-08-26 14:40

Active el nuevo BE release-13.0

# bectl activate release-13.0
Successfully activated boot environment release-13.0
# bectl list
BE           Active Mountpoint Space Created
default      -      -          827M  2021-08-26 12:27
release-13.0 NR     /          5.93G 2021-08-26 14:40


Al reiniciar, se cargará el BE release-13.0. Dado que ahora ha reiniciado en ese BE, no tiene que montarlo y puede teclear el comando install para completar el proceso de instalación:

# freebsd-update install

Una vez que haya terminado de probar la actualización, puede activar el BE.

# bectl activate release-13.0

Si la actualización no funciona, o no activa el BE 13.0, al reiniciar volverá al BE anterior por defecto.

Si aparece el temido mensaje mountroot> que detiene el proceso de arranque del SO. En este caso, arranque en un BE bueno, monte el BE que da problemas, identifique su punto de montaje. 

A medida que investigue posibles soluciones, los cambios puede realizarlo dentro del punto de montaje. Por ejemplo, si el punto de montaje del BE es /tmp/be_mount.b5ID y necesita editar el archivo fstab del Boot Environments, edite en /tmp/be_mount.b5ID/etc/fstab.

FreeBSD es genial!.