# FreeBSD Jails implementación Un ejemplo de implementar Jails mediante el uso de [ThinJails/NullFS](https://docs.freebsd.org/en/books/handbook/jails/#thin-jail). Probablemente no sea la mejor ni la manera mas eficiente de hacerlo, pero puede servir para aprender como funcionan las jails en FreeBSD. Recuerda que la comunidad dispone de otras maneras de hacer esto: [Jail Managers](https://docs.freebsd.org/en/books/handbook/jails/#jail-managers-and-containers). ##  Detalle Las Jails se van a apoyar en ZFS para su creacion y mantenimiento. Se va a seguir esta estructura de archivos ### Base de la distribucion El directorio donde se descarga el release de FreeBSD correspondiente que actuara como base para las jails usara el zfs slice / directorio: ``` zroot/jails/releases /usr/local/jails/releases ``` Ejemplo: ```shell zroot/jails 1.14T 384G 88K /usr/local/jails zroot/jails/releases 5.47G 384G 96K /usr/local/jails/releases zroot/jails/releases/13.1-RELEASE 2.32G 384G 1.40G /usr/local/jails/releases/13.1-RELEASE zroot/jails/releases/13.2-RELEASE 1.41G 384G 1.41G /usr/local/jails/releases/13.2-RELEASE zroot/jails/releases/14.0-RELEASE 1.30G 384G 1.30G /usr/local/jails/releases/14.0-RELEASE zroot/jails/releases/14.1-RELEASE 451M 384G 451M /usr/local/jails/releases/14.1-RELEASE ``` ### Base jails Una vez descarado el sistema base se separa en dos partes, por un lado el "userspace" de FreeBSD en solo ReadOnly y por otro los directorios escribibiles en modo RW clonando el release anterior y dividiendo en dos partes: ```shell zroot/jails/templates /usr/local/jails/templates # Parte solo lectura zroot/jails/templates/base-$FREEBSD_RELEASE-RELEASE /usr/local/jails/templates/base-$FREEBSD_RELEASE-RELEASE # Parte lectura/escritura zroot/jails/templates/skeleton-$FREEBSD_RELEASE-RELEASE /usr/local/jails/templates/skeleton-$FREEBSD_RELEASE-RELEASE ``` Por ejemplo: ``` zroot/jails/templates 84.5M 384G 120K /srv/jails/templates zroot/jails/templates/base-13.1-RELEASE 50.1M 384G 1.36G /srv/jails/templates/base-13.1-RELEASE zroot/jails/templates/base-13.2-RELEASE 568K 384G 1.40G /srv/jails/templates/base-13.2-RELEASE zroot/jails/templates/base-14.0-RELEASE 552K 384G 1.29G /srv/jails/templates/base-14.0-RELEASE zroot/jails/templates/base-14.1-RELEASE 232K 384G 447M /srv/jails/templates/base-14.1-RELEASE zroot/jails/templates/skeleton-12.1-RELEASE 4.85M 384G 4.46M /srv/jails/templates/skeleton-12.1-RELEASE zroot/jails/templates/skeleton-12.2-RELEASE 4.92M 384G 4.49M /srv/jails/templates/skeleton-12.2-RELEASE zroot/jails/templates/skeleton-13.0-RELEASE 4.78M 384G 4.34M /srv/jails/templates/skeleton-13.0-RELEASE zroot/jails/templates/skeleton-13.1-RELEASE 4.82M 384G 4.38M /srv/jails/templates/skeleton-13.1-RELEASE zroot/jails/templates/skeleton-13.2-RELEASE 4.48M 384G 4.41M /srv/jails/templates/skeleton-13.2-RELEASE zroot/jails/templates/skeleton-14.0-RELEASE 4.52M 384G 4.43M /srv/jails/templates/skeleton-14.0-RELEASE zroot/jails/templates/skeleton-14.1-RELEASE 4.42M 384G 4.42M /srv/jails/templates/skeleton-14.1-RELEASE ``` Mas detalle: ```shell # ls -lah /usr/local/jails/templates/base-14.1-RELEASE/ total 88 drwxr-xr-x 15 root wheel 24B Jun 20 2024 . drwxr-xr-x 13 root wheel 13B Jun 20 2024 .. -rw-r--r-- 1 root wheel 1.0K May 31 2024 .cshrc -rw-r--r-- 1 root wheel 495B May 31 2024 .profile -r--r--r-- 1 root wheel 6.0K May 31 2024 COPYRIGHT drwxr-xr-x 2 root wheel 49B Jun 20 2024 bin drwxr-xr-x 15 root wheel 69B Jun 20 2024 boot dr-xr-xr-x 2 root wheel 2B May 31 2024 dev lrwxr-xr-x 1 root wheel 12B Jun 20 2024 etc -> skeleton/etc lrwxr-xr-x 1 root wheel 13B Jun 20 2024 home -> skeleton/home drwxr-xr-x 4 root wheel 78B Jun 20 2024 lib drwxr-xr-x 3 root wheel 5B May 31 2024 libexec drwxr-xr-x 2 root wheel 2B May 31 2024 media drwxr-xr-x 2 root wheel 2B May 31 2024 mnt drwxr-xr-x 2 root wheel 2B May 31 2024 net dr-xr-xr-x 2 root wheel 2B May 31 2024 proc drwxr-xr-x 2 root wheel 150B Jun 20 2024 rescue lrwxr-xr-x 1 root wheel 13B Jun 20 2024 root -> skeleton/root drwxr-xr-x 2 root wheel 150B Jun 20 2024 sbin drwxr-xr-x 2 root wheel 2B Jun 20 2024 skeleton lrwxr-xr-x 1 root wheel 11B May 31 2024 sys -> usr/src/sys lrwxr-xr-x 1 root wheel 12B Jun 20 2024 tmp -> skeleton/tmp drwxr-xr-x 13 root wheel 14B Jun 20 2024 usr lrwxr-xr-x 1 root wheel 12B Jun 20 2024 var -> skeleton/var ``` ```shell ls -lah /usr/local/jails/templates/skeleton-14.1-RELEASE/ total 37 drwxr-xr-x 9 root wheel 9B Jun 20 2024 . drwxr-xr-x 13 root wheel 13B Jun 20 2024 .. drwxr-xr-x 30 root wheel 106B Jun 20 2024 etc drwxr-xr-x 2 root wheel 2B Jun 20 2024 home drwxr-xr-x 2 root wheel 2B Jun 20 2024 portsbuild drwxr-x--- 2 root wheel 7B May 31 2024 root drwxrwxrwt 2 root wheel 2B May 31 2024 tmp drwxr-xr-x 4 root wheel 4B Jun 20 2024 usr drwxr-xr-x 24 root wheel 24B May 31 2024 var ``` ### Jails Cuando se crea una jail se clonan el base / skeleton del release correspondiente con el nombre de la jail y se establece su fstab y su configuracion. ## Configuración host Archivo /etc/rc.conf ```shell ## Jails jail_enable="YES" jail_set_hostname_allow="NO" jail_list="" jailsffss_enable="YES" jail_sysvipc_allow="YES" ``` Archivo /etc/jail.conf ```shell # Networking interface = "lagg0"; ip4.addr = 192.168.50.$ip; # Config host.hostname = "$name.local"; path = "/usr/local/jails/services/$name"; mount.devfs; mount.fstab = "/usr/local/jails/jail.fstab.d/$name.fstab"; exec.start = "/bin/sh /etc/rc"; exec.stop = "/bin/sh /etc/rc.shutdown"; exec.poststop = "/sbin/umount /usr/local/jails/$name/skeleton; /sbin/umount /usr/local/jails/$name"; exec.clean; ```