Instalación desatendida de Ubuntu 20.04 sobre OpenZFS
El instalador de Ubuntu 20.04 Desktop permite seleccionar la instalación del sistema sobre OpenZFS de forma experimental. Cuando se realiza la instalación de esta manera el instalador particiona el disco duro para permitir el arranque y utilizar dos zpools: bpool
y rpool
. El primero contiene /boot
y el segundo los datos del sistema.
Pueden leerse más detalles sobre la instalación sobre OpenZFS y la integración en el sistema de zsys
que realiza snapshots de manera automática en dos artículos anteriores:
- Primeras impresiones de Ubuntu 20.04 Focal Fossa y OpenZFS.
- Sobre la (no) purga de snapshots automáticos en Ubuntu 20.04 con zsys.
Durante el próximo curso en nuestras aulas estará instalado Ubuntu 20.04 sobre OpenZFS, así que será necesaria preparar una instalación desatendida de Ubuntu 20.04 sobre OpenZFS. En este artículo se explican los detalles de esta instalación preparada por Gonzalo Collado.
Dos instaladores: escritorio y servidor.
Las versión de escritorio y de servidor de Ubuntu 20.04 se diferencian en el instalador utilizado. La versión de servidor utiliza un nuevo instalador que permite realizar instalaciones desatendidas a partir de una configuración YAML.
No está completamente documentado pero se puede encontrar información en: Automated Server Installs for 20.04.
Sin embargo la instalación manual de Ubuntu 20.04 server no parece tener ningún tipo de soporte para la instalación experimental del sistema sobre OpenZFS.
La versión de escritorio utiliza como instalador ubiquity
, que funciona de un modo similar al instalador de Debian, y que puede automatizarse a partir de ficheros preseed
en los que se introducen los parámetros que introduciría el usuario durante una instalación interactiva. En esta versión del instalador aparece la opción de la instalación experimental sobre OpenZFS, así que en algún lugar deben figurar los scripts necesarios para esta tarea.
Script para la preparación del disco con OpenZFS.
Afortunadamente resulta muy cómodo que la versión de escritorio permita probar el sistema antes de lanzar el instalador. De esta manera es posible explorar el sistema de archivos de la imagen .iso
y encontrar en /usr/share/ubiquity/zsys-setup
el script bash
que se encarga de la preparación del disco. No es un script corto pero parece realizar su trabajo razonablemente bien.
Allí por ejemplo se puede ver:
- Cómo se crean las particiones en función de que se trate de un ordenador con BIOS (utilizando particiones extendidas) o UEFI (utilizando particiones GPT y una partición ESP).
- Cómo se define la partición para swap.
- La creación de los zpools
bpool
yrpool
. - La creación de los diferentes datasets.
Opciones para el fichero preseed
Pero una cosa es descubrir qué script utiliza el instalador y otra es descubrir la opción adecuada del fichero preseed
para realizar la instalación desatendida sobre OpenZFS.
Afortunadamente Gonzalo Collado tiró del hilo hasta encontrar la opción:
d-i ubiquity/use_zfs boolean true
Pero el instalador necesita también las opciones habituales de particionado para considerar que no hay ningún error. Así el bloque dedicado al particionado acaba siendo:
# Partitioning d-i ubiquity/use_zfs boolean true d-i partman-auto/disk string /dev/sda d-i partman-auto/method string regular d-i partman-auto/choose_recipe select atomic d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman-lvm/device_remove_lvm boolean true d-i preseed/early_command string umount /media
Por lo demás el fichero preseed utilizado para las aulas acaba instalando las claves públicas que permiten a Ansible controlar la máquina:
# Late Command ubiquity ubiquity/success_command string ifup -a; in-target apt-get install -y openssh-server python3 ubuntu-desktop; \ mkdir /target/root/.ssh; \ chmod u=rwx,g-rwx,o-rwx /target/root/.ssh; \ echo 'ssh-rsa superclavepúblicassh vcarceler@baba-yaga' >> /target/root/.ssh/authorized_keys; \ echo 'ssh-rsa superclavepúblicassh q2dg@baba-yaga' >> /target/root/.ssh/authorized_keys; \ chmod 700 /target/root/.ssh; \ chmod 600 /target/root/.ssh/authorized_keys
Se puede consultar el fichero preseed
utilizado en las aulas (sin las claves ssh y cambiando la clave del usuario): unattended.seed
Preparación de una imagen ISO
Con todo esto es posible preparar una imagen ISO para realizar la instalación desatendida de los equipos del aula.
- El primer paso consistirá en descargar la ISO original de la instalación de Ubuntu 20.04 Desktop.
- Después, utilizando
xorriso
, se puede extraer el contenido del fichero ISO a un directorio vacío. Si quiere saber más sobre gnuxorriso
puede consultar los excelentes apuntes de Óscar Torrente: "Teoria i exercicis: manipulació d'ISOS (Part 1)".
xorriso -osirrox on -indev /home/usuario/Descargas/ubuntu-20.04-desktop-amd64.iso -extract / /home/usuario/desarrollo/u2004/iso
- Una vez extraídos los ficheros de la imagen ISO a un directorio es posible añadir:
- El fichero
unattended.seed
al directorioiso/preseed
- Editar el fichero
iso/isolinux/txt.cfg
para que contenga:
label live-install menu label ^Install Ubuntu kernel /casper/vmlinuz append file=/cdrom/preseed/unattended.seed auto=true priority=critical debian-installer/locale=ca_ES keyboard-configuration/layoutcode=cat ubiquity/reboot=true languagechooser/language-name=Catalan countrychooser/shortlist=ES localechooser/supported-locales=ca_ES.UTF-8 boot=casper automatic-ubiquity initrd=/casper/initrd quiet splash noprompt noshell ---
- Generar una nueva imagen ISO a partir de los contenidos del directorio
sudo mkisofs -D -r -V UNATTENDED_UBUNTU -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o Unattended.iso ~/desarrollo/u2004/iso
- Convertir la imagen en híbrida para que pueda utilizárse en un dispositivo USB:
sudo isohybrid Unattended.iso
- El fichero
- Finalmente se podrá utilizar la nueva imagen ISO para arrancar una máquina virtual o una máquina física utilizando el archivo ISO o un dispositivo USB.