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.
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-dataen 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.
- Montar un servidor web local temporal en el equipo host (ej. con Python:
- 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
epara 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
linuxel parámetro de autoinstaLación apuntando a nuestro origen, por ejemplo:autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/
- Pulsar
F10oCtrl+Xpara iniciar el proceso automatizado.
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
htopocurl) 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:
- ¿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?
- ¿Por qué es obligatorio utilizar contraseñas con hash criptográfico en lugar de texto plano dentro de los archivos de configuración automatizada?
- ¿Qué función cumple la directiva
late-commandsdentro de la estructura de un archivo de autoinstalación en Ubuntu? - ¿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.