Instalación desatendida de Ubuntu 20.04 sobre OpenZFS

per Victor Carceler darrera modificació 2021-01-07T10:25:29+02:00

https://commons.wikimedia.org/wiki/File:Openzfs.svgEl 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:

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 .isoy 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 y rpool.
  • 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.

  1. El primer paso consistirá en descargar la ISO original de la instalación de Ubuntu 20.04 Desktop.
  2. Después, utilizando xorriso, se puede extraer el contenido del fichero ISO a un directorio vacío. Si quiere saber más sobre gnu xorriso 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
  3. Una vez extraídos los ficheros de la imagen ISO a un directorio es posible añadir:
    • El fichero unattended.seed al directorio iso/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
  4. 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.