En el artículo anterior ya utilizamos los boot environments para actualizar hosts físicos o VMs sin tener que preocuparnos por si las actualizaciones dejaban el sistema en un estado inconsistente ya que podíamos revertir a un estado anterior, en esta ocasión vamos a profundizar un poco mas y vamos a generar una Jail desde un equipo físico.
Primero creamos un “boot environment” llamado test:
bectl list
BE Active Mountpoint Space Created
default NR / 976M 2021-03-28 16:39
test - - 8K 2021-04-02 19:40
Exportamos el “boot environment” a un fichero:
Como podemos ver se trata de un snapshot ZFS:
test.raw: ZFS shapshot (little-endian machine)
version 17
type: ZFS
destination GUID: BA 27 32 93 51 80 2A AC
name: 'zroot/ROOT/test@2021-04-02-20:04:52-0'
Yo personalmente utilizo
Iocage
como sistema de gestión de Jails, así que creo una Jail llamada test y le asigno una dirección ip:
iocage set ip4_addr=“nfe0|192.168.69.69/24” test
Hemos creado la Jail tan solo para poder copiar los ficheros de configuración de Iocage:
cp /zroot/iocage/jails/test/fstab /root/
Destruimos la Jail:
This will destroy jail test
Are you sure? [y/N]: y
Destroying test
Copiamos el fichero que contiene el snapshot ZFS al servidor Iocage:
Creamos los datasets zroot/iocage/jails/test y zroot/iocage/jails/test/root manualmente, no utilizamos las funcionalidades de Iocage porque el import está bugeado tal como se describe
aquí
:
zfs create zroot/iocage/jails/test/root
Cargamos el snapshot en dicho dataset:
Copiamos los ficheros de configuración anteriormente backupeados:
cp /root/fstab /zroot/iocage/jails/test/fstab
Arrancamos la Jail:
Consultamos el estado de las Jails:
+-----+----------+-------+--------------+---------------+
| JID | NAME | STATE | RELEASE | IP4 |
+=====+==========+=======+==============+===============+
| 17 | test | up | 12.2-RELEASE | 192.168.69.69 |
+-----+----------+-------+--------------+---------------+
Ya podemos acceder a la Jail:
$ uname -a
FreeBSD freebsd1.alfaexploit.com 12.2-RELEASE-p4 FreeBSD 12.2-RELEASE-p4 GENERIC amd64
Recordemos que los siguientes directorios son excluidos de los “boot environments”, si necesitamos alguno de ellos tendremos que sincronizarlos manualmente a la Jail.
/tmp
/usr/home
/usr/ports
/usr/src
/var/audit
/var/crash
/var/log
/var/mail
/var/tmp
En el servidor físico permitimos las keys de la Jail para el usuario root:
Reconfiguramos OpenSSH para que se pueda acceder directamente como root:
PermitRootLogin yes
Instalamos bash en la Jail:
NOTA: En realidad podríamos utilizar cualquier shell o simplemente ejecutar de forma consecutiva cada uno de los scps.
Arrancamos bash:
Finalmente sincronizamos cada uno de los directorios:
Y ya lo tenemos, una Jail exactamente igual que nuestro servidor físico.