Ubuntu instalación automática Implementación automatizada
autoinstall es la solución de instalación automatizada proporcionada por el instalador Subiquity del servidor Ubuntu. Utiliza un archivo de configuración YAML para permitir la implementación de servidores desatendidos.
Cómo funciona
La configuración de instalación automática se puede proporcionar a través de:
- datos de usuario de inicio de nube: pasados a través de los datos de usuario de la plataforma en la nube
- Archivo local: colocado en el medio de instalación o en un sistema de archivos accesible
- Servidor HTTP - Cargado a través de la red
El instalador busca la configuración de instalación automática al inicio. Una vez encontrado, procede automáticamente con la instalación sin intervención manual.
Estructura de configuración básica
#cloud-config
autoinstall:
version: 1
# Language and keyboard
locale: en_US.UTF-8
keyboard:
layout: us
# Network configuration
network:
version: 2
ethernets:
eth0:
dhcp4: true
# Software sources
apt:
primary:
- arches: [default]
uri: http://archive.ubuntu.com/ubuntu
# Disk configuration
storage:
layout:
name: lvm
# User configuration
identity:
hostname: ubuntu-server
username: ubuntu
password: "$6$rounds=4096$xyz$hashedpassword"
# SSH configuration
ssh:
install-server: true
allow-pw: false
authorized-keys:
- ssh-ed25519 AAAA... admin@workstation
# Post-installation commands
late-commands:
- curtin in-target -- apt update
- curtin in-target -- apt upgrade -yEjemplos de configuración completos
Instalación de servidor estándar
#cloud-config
autoinstall:
version: 1
# Interactive settings (which steps require manual confirmation)
interactive-sections: [] # Empty means fully automatic
locale: en_US.UTF-8
keyboard:
layout: us
variant: ""
# Use updated installer
refresh-installer:
update: true
# Network
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
# Proxy (leave empty if not used)
proxy: ""
# APT mirror
apt:
primary:
- arches: [amd64]
uri: http://archive.ubuntu.com/ubuntu
geoip: false
# Storage configuration - using LVM
storage:
layout:
name: lvm
sizing-policy: scaled
# Or specify root partition size
# sizing-policy: all
# System identity
identity:
hostname: prod-web-01
username: deploy
# Generated with: mkpasswd --method=sha-512
password: "$6$rounds=4096$saltsalt$hashedpasswordhere"
# SSH
ssh:
install-server: true
allow-pw: false
authorized-keys:
- ssh-ed25519 AAAA... deploy@admin
# Snap packages to install
snaps:
- name: docker
channel: latest/stable
classic: false
# Deb packages to install
packages:
- ubuntu-server-minimal
- vim
- htop
- curl
- wget
- git
- ufw
- fail2ban
# Automatic security updates
updates: security
# Post-installation commands
late-commands:
# Set timezone
- curtin in-target -- timedatectl set-timezone America/New_York
# Configure firewall
- curtin in-target -- ufw allow ssh
- curtin in-target -- ufw --force enable
# Write custom configuration files
- |
cat <<'SYSCTL' > /target/etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1
net.core.somaxconn = 65535
vm.swappiness = 10
SYSCTL
# Enable services
- curtin in-target -- systemctl enable fail2ban
# Reboot automatically after installation completes
shutdown: rebootEsquema de partición personalizado
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
storage:
config:
# Disk
- id: disk0
type: disk
ptable: gpt
path: /dev/sda
wipe: superblock-recursive
grub_device: false
# EFI partition
- id: efi-part
type: partition
device: disk0
size: 512M
flag: boot
grub_device: true
# Boot partition
- id: boot-part
type: partition
device: disk0
size: 1G
# Remaining space for LVM
- id: lvm-part
type: partition
device: disk0
size: -1 # All remaining space
# EFI filesystem
- id: efi-fs
type: format
volume: efi-part
fstype: fat32
# Boot filesystem
- id: boot-fs
type: format
volume: boot-part
fstype: ext4
# LVM volume group
- id: vg0
type: lvm_volgroup
name: vg0
devices:
- lvm-part
# LVM logical volume - root
- id: lv-root
type: lvm_partition
volgroup: vg0
name: lv-root
size: 20G
# LVM logical volume - var
- id: lv-var
type: lvm_partition
volgroup: vg0
name: lv-var
size: 30G
# LVM logical volume - home
- id: lv-home
type: lvm_partition
volgroup: vg0
name: lv-home
size: -1
# Format logical volumes
- id: root-fs
type: format
volume: lv-root
fstype: ext4
- id: var-fs
type: format
volume: lv-var
fstype: ext4
- id: home-fs
type: format
volume: lv-home
fstype: ext4
# Mount points
- id: mount-efi
type: mount
device: efi-fs
path: /boot/efi
- id: mount-boot
type: mount
device: boot-fs
path: /boot
- id: mount-root
type: mount
device: root-fs
path: /
- id: mount-var
type: mount
device: var-fs
path: /var
- id: mount-home
type: mount
device: home-fs
path: /home
identity:
hostname: custom-server
username: admin
password: "$6$rounds=4096$saltsalt$hash"
ssh:
install-server: trueProporcionar la configuración de instalación automática
Método 1: modificar la ISO
# Mount the original ISO
mkdir -p /mnt/iso
sudo mount -o loop ubuntu-26.04-live-server-amd64.iso /mnt/iso
# Copy the contents
mkdir -p ~/custom-iso
cp -rT /mnt/iso ~/custom-iso
sudo umount /mnt/iso
# Add the autoinstall configuration
mkdir -p ~/custom-iso/autoinstall
cp autoinstall.yaml ~/custom-iso/autoinstall/user-data
touch ~/custom-iso/autoinstall/meta-data
# Modify the GRUB configuration to add an autoinstall boot entry
# Add the following to ~/custom-iso/boot/grub/grub.cfg:
cat >> ~/custom-iso/boot/grub/grub.cfg << 'EOF'
menuentry "Autoinstall Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/autoinstall/ ---
initrd /casper/initrd
}
EOF
# Regenerate the ISO
sudo apt install xorriso -y
xorriso -as mkisofs \
-r -V "Ubuntu 26.04 Autoinstall" \
-o ~/ubuntu-26.04-autoinstall.iso \
-J -joliet-long \
--grub2-mbr /usr/lib/grub/i386-pc/boot_hybrid.img \
-partition_offset 16 \
-append_partition 2 0xEF ~/custom-iso/boot/grub/efi.img \
-appended_part_as_gpt \
-eltorito-boot boot/grub/bios.img \
-eltorito-catalog boot/grub/boot.cat \
--no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot -e '--interval:appended_partition_2:all::' --no-emul-boot \
~/custom-isoMétodo 2: servidor HTTP
# Start an HTTP server on another machine
mkdir -p ~/autoinstall-server
cp autoinstall.yaml ~/autoinstall-server/user-data
touch ~/autoinstall-server/meta-data
cd ~/autoinstall-server
python3 -m http.server 8080
# During installation, add the kernel parameter in the GRUB command line:
# autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/Método 3: arranque de red PXE
Adecuado para implementación a gran escala, combinado con servidores TFTP + HTTP:
# Install PXE-related software
sudo apt install tftpd-hpa -y
# Place the kernel and initrd in the TFTP directory
sudo cp /mnt/iso/casper/vmlinuz /srv/tftp/
sudo cp /mnt/iso/casper/initrd /srv/tftp/
# Add kernel parameters in the PXE configuration
# kernel vmlinuz
# append initrd=initrd autoinstall ds=nocloud-net;s=http://192.168.1.50:8080/ ---Generar un hash de contraseña
# Method 1: Using mkpasswd
sudo apt install whois -y
mkpasswd --method=sha-512
# Method 2: Using openssl
openssl passwd -6
# Note: Python 3.13 removed the crypt module; use the mkpasswd or openssl methods above insteadExportar la configuración de instalación automática de un sistema existente
Después de la instalación, puede exportar la configuración de instalación del sistema actual para usarla como plantilla:
# View the autoinstall configuration used during installation
sudo cat /var/log/installer/autoinstall-user-data
# This file contains the full installation configuration and can be reused as a templateValidar la configuración
# Validate syntax with cloud-init
cloud-init schema --config-file autoinstall.yaml
# Check YAML format with Python
python3 -c "import yaml; yaml.safe_load(open('autoinstall.yaml'))"Problemas comunes
La instalación se detiene en un paso de confirmación
Asegúrese de que interactive-sections esté configurado en una lista vacía:
autoinstall:
interactive-sections: []Configuración de red no aplicada
Verifique que el nombre de la interfaz de red sea correcto. Puede verificar el nombre real de la interfaz en el entorno de instalación con ip link.
comandos tardíos fallando
- Utilice el prefijo
curtin in-target --para ejecutar comandos dentro del sistema de destino - Para operaciones de ruta directa, utilice el prefijo
/target/ - Consulte los registros en:
/var/log/installer/curtin-install.log