Creación de un template de FreeBSD

Crear templates de para jails de FreeBSD es algo bastante bueno, ya que te permite ahorrar tiempo y crear templates para según lo que quieras hacer. Un template general con herramientas como git instaladas, o un template que tenga nginx con php para ahorrarte unos minutos a la hora de instalar un nuevo servicio que use ese software.

Para empezar crea un filesystem de zfs donde quieras

zfs create stranger/jails/template

Y procedemos a instalar el sistema base

cd /stranger/jails/template
fetch https://download.freebsd.org/releases/amd64/14.2-RELEASE/base.txz
tar xfv base.txz -C /stranger/jails/template

Con esto ya tendremos el sistema base instalado. Ahora tendrías que crear la jail (o hacer un chroot, pero mejor crear la jail ¿no?) e instalar el software que quisieras y configurarlo como quieras

/etc/jail.conf
squirrelmail {
  # STARTUP/LOGGING
  exec.start = "/bin/sh /etc/rc";
  exec.stop = "/bin/sh /etc/rc.shutdown";
  exec.consolelog = "/var/log/jail_console_${name}.log";
 
  # PERMISSIONS
  allow.raw_sockets;
  exec.clean;
  mount.devfs;
 
  # HOSTNAME/PATH
  host.hostname = "${name}";
  path = "/stranger/jails/${name}";
 
  # NETWORK
  ip4.addr = "bge4|192.168.1.201/24";
}

Podemos iniciar la jail con service jail start template y luego jexec template sh para acceder a la consola de la jail. Donde podremos instalar todo lo que queramos, por ejemplo

pkg install -y git zsh Y los que quieras.

Una vez instalados y configurados ya tendríamos nuestro templates

Podemos hacer exit para salir de la jail.

Y para crear el template para clonar filesystems tendremos que crear una snapshot zfs snapshot stranger/jail/template@2025-04-06

Por ejemplo, para crear un template para php pues haríamos

pkg install -y nginx php84

Tras configurar el nginx.conf para que cargue php (así, por ejemplo)

/usr/local/etc/nginx/nginx.conf
    server {
        listen       80;
        server_name  localhost;
        root   /usr/local/www/roundcube;
        index index.php index.html index.htm;
 
        # scripts de PHP
        location ~ \.php$ {
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi_params;
        }
    }

Iniciamos el coso con

service nginx enable
service php_fpm enable
service nginx start
service php_fpm start

Luego podemos crear un nuevo FS con el template de php que acabamos de crear. Vamos a crear una nueva snapshot para esto

zfs snapshot stranger/jails/template@2025-04-06_php
zfs send stranger/jails/template@2025-04-06_php | zfs recv -F stranger/jails/template_php

Y restauramos el template a su estado de template sin más (sin php ni cosas raras). También tenemos el template con php

zfs rollback stranger/jails/template@2025-04-06

Y por ejemplo, para instalar roundcube podríamos hacer

zfs send stranger/jails/template_php@2025-04-06_php | zfs recv -F stranger/jails/roundcube

¡Felicidades por haber conseguido crear templates de jails con FreeBSD!