Playbooks de Ansible para Ubuntu 20.04

per Victor Carceler darrera modificació 2021-01-07T10:24:55+02:00

Ya están disponibles los playbooks de Ansible para las aulas con Ubuntu 20.04 y se pueden consultar en: https://github.com/vcarceler/playbooks-ubuntu2004.

Aprovechando la nueva versión de Ubuntu se han reescrito utilizando roles, lo que ha permitido obtener playbooks mucho más limpios y ordenados. En el momento de escribir este artículo el playbook de un aula incluye 83 tareas que, ejecutadas en un ordenador con disco duro mecánico, se completan aproximadamente en 1 hora.

Ansible_logo.svg.pngPara el aula Stallman tenemos:

---
- hosts: stallman
  user: root

  vars:
    grupos: adm,cdrom,dialout,kvm,libvirt,lpadmin,lxd,plugdev,sambashare,ubridge,vboxusers

  roles:
    - delete-users
    - lock-sshd
    - zsys-gc
    - swappiness-0
    - vasilisa
    - activate-unattended-upgrades
    - role: cambia-hostname
      vars:
        base_hostname: "stallman"
    - gnome3-dconf
    - software-2004
    - apache-userdir
    - wireshark
    - gns3
    - dotnet
    - kvm
    - lxd-zfs
    - convidat
    - apagado-1455
    - apagado-2130

  tasks:
    # Usuarios
    #- include: users/informatica/smx2a.yml
    #- include: users/informatica/smx2b.yml
    #- include: users/informatica/smx2c.yml

El orden de los roles transmite cierta orientación sobre el estado de las máquinas:

  1. Cuando la máquina está recién instalada con la imagen de instalación desatendida sobre OpenZFS se puede ver el usuario 'usuariinstall' en GDM.
  2. El primer rol del playbook borra el usuario por defecto. Así que tan pronto como se lanza el playbook desaparece de la pantalla el usuario 'usuariinstall' de aquellos ordenadores en los que Ansible ha empezado a trabajar.
  3. Finalmente, en los últimos roles, se define el usuario 'convidat' de manera cuando el usuario aparece en GDM se tiene la indicación de que prácticamente se ha completado la ejecución del playbook.
  4. Los dos últimos roles, que no llevan demasiado tiempo, se dedican a configurar el apagado automático de los ordenadores a las 14:55 y a las 21:30.

Instalación de software

La mayoría de las tareas se completan en unos pocos segundos, pero la instalación de software es con diferencia la tarea que más tiempo consume. Aunque, como el resto de tareas, una vez realizada no requiere prácticamente tiempo en las próximas ejecuciones del playbook.

La mayor parte del software que debe formar parte de la base de todos los ordenadores del centro se instala en el rol software-2004. En este rol hay 4 partes diferenciadas:

  1. La instalación de herramientas disponibles en paquetes snap.
  2. La actualización de algunos paquetes apt escogidos: firefox, net-tools, vim.
  3. La ejecución condicionada a un fallo en la tarea anterior de dpkg --configure -a para paliar los efectos de una interrupción inesperada durante la instalación de paquetes que haya podido dejar la base de datos de apt en un estado inconsistente.
  4. La instalación de herramientas disponibles en los repositorios apt de la distribución.

Todo este software se instala sobre la base de Ubuntu 20.04 instalado sobre OpenZFS en la que, además de los paquetes instalados por defecto, se ha añadido el servidor openssh para que Ansible pueda conectar.

La instalación desatendida consume 3.84GiB de disco y gracias a la compresión LZ4 se obtiene un ratio de 1.58 en el dataset rpool/ROOT.

root@ubuntu2004:~# zfs get compressratio rpool/ROOT
NAME        PROPERTY       VALUE  SOURCE
rpool/ROOT  compressratio  1.58x  -
root@ubuntu2004:~#

Instalación de herramientas disponibles en paquetes snap

Los paquete snap pueden complementar el software instalado con apt. Las principales características de este formato son:

  • De la misma forma que hacen Flatpak y AppImage cada aplicación está empaquetada en un único fichero (con sus dependencias) que puede ser instalado en las principales distribuciones de GNU/Linux.
  • Los paquetes snap se actualizan de manera automática. De hecho no es posible (sin entrar en opciones de desarrollo) bloquear su actualización, cada vez que se publica una nueva versión las máquinas que lo tengan el paquete instalado descargarán la nueva versión.
  • Cada paquete es una imagen squashfs que se monta mediante un dispositivo loop. Así las instalaciones y actualizaciones son transacciones que no provocan ningún error en el caso de interrumpirse.

Si bien este formato tiene unas características técnicas interesantes y además abre la puerta a las aplicaciones disponibles en su repositorio también tiene un pero muy feo: canonical se reserva el control de la tienda de aplicaciones y repositorio. Salvo opciones de desarrollo no es posible indicar el repositorio del que se descargarán los paquetes, se descargarán de la tienda de aplicaciones controlada por Canonical. Y no es posible montar repositorios alternativos, si se quiere publicar una nueva aplicación en formato snap debe publicarse en la tienda oficial.

En el centro se instalarán en formato snap todas aquellas aplicaciones que estén empaquetadas por un autor verificado.

Los snaps instalados son:

root@ubuntu2004:/var/snap# ls
atom             gnome-3-34-1804            kde-frameworks-5-qt-5-14-core18  obs-studio
blender          godot-3-1                  kdenlive                         octave
bluej            godot-bare                 kig                              pdfmixtool
brackets         godot-runtime              kmplot                           pdftk
chromium         gtk2-common-themes         kotlin                           qalculate
code             gtk-common-themes          krita                            ruby
core             inkscape                   ktouch                           shotcut
core18           intellij-idea-educational  librepcb                         snapd
darktable        jupyter                    lxd                              snap-store
dotnet-sdk       kalgebra                   musescore                        sweethome3d-homedesign
eclipse          kbruch                     netbeans                         syncthing
gimp             kcalc                      node                             vlc
gnome-3-28-1804  kde-frameworks-5-core18    node-red
root@ubuntu2004:/var/snap#

Cuando se instalan el espacio consumido en disco sube hasta los 10.3GiB.

Instalación de herramientas disponibles en los repositorios apt

Los paquetes .deb instalados con apt siguen formando el grueso del software instalado.

Se solicita la instalación de los paquetes: audacity default-jdk dia dia-rib-network dia-shapes dia2code dialog docutils-doc filezilla freecad fritzing git gnome-boxes golang-go httpie ipcalc kicad kicad-doc-es korganizer librecad libreoffice-base libreoffice-report-builder lyx ncdu openshot pgadmin3 planner prometheus-node-exporter pylint pylint3 python3-docutils python3-pip python3-pylint-django python3-pypdf2 recordmydesktop relational rst2pdf scratch slic3r texlive-lang-spanish tree tshark ttf-mscorefonts-installer unrar virt-top virtualbox virtualenv vpcs xorriso.

Cuando se resuelven las dependencias se llega al millar de paquetes nuevos para instalar que, una vez instalados, llevan el espacio consumido en disco hasta los 15GiB.

Así que cuando se instala un aula con más de 20 ordenadores se genera mucho tráfico en la red como muestra esta interfaz del gateway de un aula:

if_ens12-day.png

Otro software instalado

Aún quedan algunos roles que instalan aplicaciones al margen de software-2004. Estos otros roles existen por si resulta conveniente no instalar estas aplicaciones en algunos ordenadores del centro.

Estos roles son:

apache-userdir

Instala el servidor web Apache y PHP. Activa en Apache el módulo userdir para que los usuarios puedan publicar su propia web en ~/public_html.

wireshark

Instala el analizador de protocolos de red Wireshark.

gns3

Instala el emulador de redes GNS3, la única aplicación que ha requerido añadir un repositorio PPA propio.

dotnet

Instala dotnet-sdk y modifica /etc/profile.d/04-fix-dotnet.sh para que vscode pueda compilar.

kvm

Instala kvm, libvirt y virt-manager y activa la virtualización anidada. La configuración por defecto de libvirt crea el puente virbr0 con la IP 192.168.122.1/24 al que pertenecerán las interfaces de las MVs.

lxd-zfs

Instala y configura LXD. En este caso se deja configurado para que utilice ZFS como pool de almacenamiento y el puente lxdbr0 para las interfaces de red de los contenedores.