Instalación desatendida mediante Autoinstall

Objetivo:

Aprender a automatizar el despliegue de sistemas operativos Linux (Ubuntu Server) mediante la configuración de instalaciones desatendidas (método Autoinstall basado en ficheros YAML), eliminando la intervención manual en entornos de despliegue masivo.

Escenario:

  • Herramientas: Entorno de virtualización, ISO oficial de Ubuntu Server, editor de texto, servidor HTTP local o inyección de configuración en el medio de instalación.
  • Conceptos analizados: Automatización de despliegues, ficheros de configuración YAML, particionamiento automatizado, preconfiguración de cuentas de usuario y despliegues masivos.
  • Proceso clave: Diseño del archivo user-data, empaquetado o suministro de la configuración al instalador, ejecución desatendida y verificación post-instalación.

Escenario Real: Despliegue masivo en el CPD

El departamento de sistemas debe desplegar de manera simultánea 30 servidores idénticos para un nuevo cluster de computación. Configurar manualmente cada máquina mediante el asistente gráfico de instalación tomaría días y es propenso a errores humanos (teclados cambiados, contraseñas mal escritas, particiones incorrectas). Como administrador de infraestructura, tu objetivo es configurar una instalación desatendida mediante Autoinstall para que las máquinas se instalen de forma autónoma con solo arrancar desde la red o la ISO.

Tradicionalmente en el ecosistema Debian/Ubuntu se utilizaban los ficheros Preseed, pero en las versiones modernas de Ubuntu Server el instalador automatizado se gestiona mediante el estándar Autoinstall utilizando un archivo estructurado en formato YAML. Este archivo responde automáticamente a todas las preguntas del instalador (idioma, teclado, distribución de red, particionado, creación de usuarios y paquetes a instalar) desde el primer segundo de arranque.

NOTA: Para probar esta práctica de forma controlada, utilizaremos una máquina virtual en nuestro hipervisor añadiendo un parámetro en la línea de comandos de arranque del núcleo (*kernel boot parameters*) para indicarle dónde se encuentra el archivo de configuración automatizada.

Instrucciones:

Fase 1: Creación del archivo de configuración automatizada (user-data):

  • Crear un archivo de texto llamado user-data en tu equipo host con la siguiente estructura básica de ejemplo:
    #cloud-config
    autoinstall:
      version: 1
      locale: es_ES.UTF-8
      keyboard:
        layout: es
      identity:
        hostname: servidor-auto01
        password: "$6$rounds=4096$randomsalt$W1vV...contraseña_hasheada..."
        username: adminfp
      ssh:
        install-server: true
        allow-pw: true
      storage:
        layout:
          name: direct
      packages:
        - htop
        - curl
        - git
      late-commands:
        - echo "Instalación automatizada finalizada con éxito" > /target/root/estado.txt
  • Asegúrate de generar correctamente el hash de la contraseña (puedes usar openssl passwd -6) para incluirlo en la sección de identidad.

Fase 2: Puesta a disposición del archivo de configuración:

  • Para que el instalador de Ubuntu pueda leer el archivo user-data, este debe ser accesible durante el arranque. Las opciones más comunes son:
    • Montar un servidor web local temporal en el equipo host (ej. con Python: python3 -m http.server 8080).
    • Modificar la ISO original para incluir el archivo dentro de los parámetros de arranque (*custom ISO*).
    • Pasarlo como parámetro mediante el kernel en el menú de GRUB del instalador.
  • Crear un archivo vacío adicional llamado meta-data (necesario por estructura de cloud-init, puede estar completamente vacío).

Fase 3: Configuración del arranque de la máquina virtual:

  • Crear una nueva máquina virtual en el hipervisor con la ISO de Ubuntu Server conectada.
  • En la pantalla inicial de arranque del instalador (GRUB), pulsar la tecla e para editar los parámetros de inicio de la línea de comandos del núcleo.
  • Añadir al final de la línea que comienza por linux el parámetro de autoinstaLación apuntando a nuestro origen, por ejemplo:
    autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/
  • Pulsar F10 o Ctrl+X para iniciar el proceso automatizado.
NOTA: Observarás que el sistema arranca y comienza a desplegarse por completo sin detenerse en ninguna pantalla de configuración. Todas las decisiones están predefinidas en el script YAML.

Fase 4: Espera y verificación del despliegue autónomo:

  • Dejar que la máquina virtual complete la instalación y reinicie de forma automática hacia el disco duro local.
  • Una vez finalice el reinicio, comprobar que el sistema operativo está accesible intentando iniciar sesión con el usuario creado (ej. adminfp).
  • Verificar que los paquetes adicionales declarados en el archivo YAML (como htop o curl) se instalaron correctamente durante el proceso.

Verificación:

  • Comprobar el nombre de host asignado automáticamente ejecutando: hostname
  • Verificar la existencia del archivo de control generado en la fase final: cat /root/estado.txt
  • Comprobar el esquema de particionado aplicado automáticamente mediante: lsblk

Posibles errores y resolución de problemas:

Si durante el arranque de la instalación automatizada el proceso se detiene y muestra un error de sintaxis o entra en el asistente interactivo tradicional, suele deberse a un error de indentación o espacios en el archivo YAML (el formato YAML es extremadamente estricto con los tabuladores y los espacios) o a que el instalador no ha podido alcanzar la URL del servidor HTTP donde se aloja el archivo user-data.

  • Solución: Valida la sintaxis de tu archivo YAML mediante un linter en línea y comprueba la conectividad de red temporal entre la máquina virtual y el host mediante comandos de ping o comprobando el estado del servidor web local.

Preguntas de reflexión:

  1. ¿Qué ventajas aporta el uso de instalaciones automatizadas mediante Autoinstall frente a los métodos de instalación manual en entornos corporativos o de centros de datos?
  2. ¿Por qué es obligatorio utilizar contraseñas con hash criptográfico en lugar de texto plano dentro de los archivos de configuración automatizada?
  3. ¿Qué función cumple la directiva late-commands dentro de la estructura de un archivo de autoinstalación en Ubuntu?
  4. ¿Cómo se relaciona el sistema cloud-init utilizado en entornos Cloud con la automatización local mediante ficheros user-data?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué ventajas aporta el uso de instalaciones automatizadas mediante Autoinstall frente a los métodos de instalación manual en entornos corporativos o de centros de datos?

Aportan velocidad masiva de despliegue, repetibilidad exacta sin desviaciones de configuración entre equipos, reducción drástica de errores humanos y la posibilidad de integrar la infraestructura como código dentro de los ciclos de aprovisionamiento automatizado.


2. ¿Por qué es obligatorio utilizar contraseñas con hash criptográfico en lugar de texto plano dentro de los archivos de configuración automatizada?

Porque los archivos de configuración suelen almacenarse en repositorios de código, servidores web accesibles o medios compartidos. Si la contraseña se escribiera en texto plano, cualquier persona con acceso al fichero podría leer credenciales con privilegios administrativos de manera inmediata.


3. ¿Qué función cumple la directiva late-commands dentro de la estructura de un archivo de autoinstalación en Ubuntu?

Permite ejecutar comandos de terminal personalizados justo antes de que finalice por completo el proceso de instalación, utilizando el entorno del nuevo sistema montado (en /target). Se utiliza habitualmente para instalar paquetes adicionales específicos, aplicar parches de seguridad o configurar tareas de post-aprovisionamiento.


4. ¿Cómo se relaciona el sistema cloud-init utilizado en entornos Cloud con la automatización local mediante ficheros user-data?

Están estrechamente relacionados porque el instalador automatizado moderno de Ubuntu (Autoinstall) utiliza internamente la infraestructura y sintaxis de cloud-init para interpretar los metadatos y datos de usuario, permitiendo reutilizar la misma lógica tanto en instalaciones físicas locales como en instancias desplegadas en la nube.