Saltar al contenido

Instalación automatizada del servidor 20.04 usando PXE e imagen de servidor en vivo

Hola usuario de nuestro sitio web, hallamos la solución a lo que necesitas, continúa leyendo y la obtendrás aquí.

Solución:

Instalación del servidor Ubuntu 20.04 completamente automatizada usando PXE

Estos son los pasos para realizar una instalación del servidor Ubuntu 20.04 completamente automatizada usando PXE con el servidor en vivo imagen. Encontré que el proceso estaba ligeramente documentado y lleno de problemas. En estos pasos, estoy instalando 20.04 en un UEFI servidor basado.

(editar: adapté estos pasos para una BIOS servidor basado en Implementar Ubuntu 20.04 en máquina virtual bare metal o virtualbox de pxelinux, cloud-init no recoge el archivo de datos del usuario)

Hay muchas variaciones posibles en estos pasos. Pueden personalizarse y adaptarse a las necesidades de cada uno. El objetivo es proporcionar un ejemplo de cómo lograr esto y ayudar a otros usuarios a superar los problemas encontrados.

enlaces sobre el instalador

  • https://wiki.ubuntu.com/FocalFossa/ReleaseNotes#Installer
  • https://ubuntu.com/server/docs/install/autoinstall
  • https://discourse.ubuntu.com/t/server-installer-plans-for-20-04-lts/13631
  • https://discourse.ubuntu.com/t/netbooting-the-live-server-installer/14510

referencias de configuración

  • https://ubuntu.com/server/docs/install/autoinstall-reference
  • https://curtin.readthedocs.io/en/latest/topics/config.html

código fuente

  • https://github.com/CanonicalLtd/subiquity
  • https://github.com/canonical/curtin

Construye un servidor tftp

Todos los pasos siguientes se ejecutan como root. Estos se probaron en un servidor Ubuntu 18.04.

Instale el servidor tftp y un servidor web

apt-get -y install tftpd-hpa apache2

Configurar apache para servir archivos desde el directorio tftp

cat > /etc/apache2/conf-available/tftp.conf <
        Options +FollowSymLinks +Indexes
        Require all granted

Alias /tftp /var/lib/tftpboot
EOF
a2enconf tftp
systemctl restart apache2

Descarga la iso del servidor en vivo

wget http://old-releases.ubuntu.com/releases/20.04/ubuntu-20.04-live-server-amd64.iso -O /var/lib/tftpboot/ubuntu-20.04-live-server-amd64.iso

Extraiga el kernel y initramfs de la iso del servidor en vivo

mount /var/lib/tftpboot/ubuntu-20.04-live-server-amd64.iso /mnt/
cp /mnt/casper/vmlinuz /var/lib/tftpboot/
cp /mnt/casper/initrd /var/lib/tftpboot/
umount  /mnt

Descargue la imagen de grub para cargar a través de PXE

wget http://archive.ubuntu.com/ubuntu/dists/focal/main/uefi/grub2-amd64/current/grubnetx64.efi.signed -O /var/lib/tftpboot/pxelinux.0

Configurar grub. Esta configuración proporcionará una opción de arranque totalmente automatizado, así como una opción de arranque manual.

mkdir -p /var/lib/tftpboot/grub
cat > /var/lib/tftpboot/grub/grub.cfg <<'EOF'
default=autoinstall
timeout=30
timeout_style=menu
menuentry "Focal Live Installer - automated" --id=autoinstall 
    echo "Loading Kernel..."
    # make sure to escape the ';'
    linux /vmlinuz ip=dhcp url=http://$pxe_default_server/tftp/ubuntu-20.04-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://$pxe_default_server/tftp/
    echo "Loading Ram Disk..."
    initrd /initrd

menuentry "Focal Live Installer" --id=install 
    echo "Loading Kernel..."
    linux /vmlinuz ip=dhcp url=http://$pxe_default_server/tftp/ubuntu-20.04-live-server-amd64.iso
    echo "Loading Ram Disk..."
    initrd /initrd

EOF

Configurar nube-init con la configuración de instalación automática. Primero ejecuté la instalación manualmente para obtener el generado /var/log/installer/autoinstall-user-data archivo para utilizar como base. Luego hice modificaciones basadas en mis necesidades y errores encontrados.

cat > /var/lib/tftpboot/meta-data <
cat > /var/lib/tftpboot/user-data <<'EOF'
#cloud-config
autoinstall:
  version: 1
  # use interactive-sections to avoid an automatic reboot
  #interactive-sections:
  #  - locale
  apt:
    # even set to no/false, geoip lookup still happens
    #geoip: no
    preserve_sources_list: false
    primary:
    - arches: [amd64, i386]
      uri: http://us.archive.ubuntu.com/ubuntu
    - arches: [default]
      uri: http://ports.ubuntu.com/ubuntu-ports
  # r00tme
  identity: hostname: focal-autoinstall, password: $6$.c38i4RIqZeF4RtR$hRu2RFep/.6DziHLnRqGOEImb15JT2i.K/F9ojBkK/79zqY30Ll2/xx6QClQfdelLe.ZjpeVYfE8xBBcyLspa/,
    username: ubuntu
  keyboard: layout: us, variant: ''
  locale: en_US.UTF-8
  # interface name will probably be different
  network:
    network:
      version: 2
      ethernets:
        ens192:
          critical: true
          dhcp-identifier: mac
          dhcp4: true
  ssh:
    allow-pw: true
    authorized-keys: []
    install-server: true
  # this creates an efi partition, /boot partition, and root(/) lvm volume
  storage:
    grub:
      reorder_uefi: False
    swap:
      size: 0
    config:
    - ptable: gpt, path: /dev/sda, preserve: false, name: '', grub_device: false,
      type: disk, id: disk-sda
    - device: disk-sda, size: 536870912, wipe: superblock, flag: boot, number: 1,
      preserve: false, grub_device: true, type: partition, id: partition-sda1
    - fstype: fat32, volume: partition-sda1, preserve: false, type: format, id: format-2
    - device: disk-sda, size: 1073741824, wipe: superblock, flag: linux, number: 2,
      preserve: false, grub_device: false, type: partition, id: partition-sda2
    - fstype: ext4, volume: partition-sda2, preserve: false, type: format, id: format-0
    - device: disk-sda, size: -1, flag: linux, number: 3, preserve: false,
      grub_device: false, type: partition, id: partition-sda3
    - name: vg-0
      devices: [partition-sda3]
      preserve: false
      type: lvm_volgroup
      id: lvm-volgroup-vg-0
    - name: lv-root, volgroup: lvm-volgroup-vg-0, size: 100%, preserve: false,
      type: lvm_partition, id: lvm-partition-lv-root
    - fstype: ext4, volume: lvm-partition-lv-root, preserve: false, type: format,
      id: format-1
    - device: format-1, path: /, type: mount, id: mount-2
    - device: format-0, path: /boot, type: mount, id: mount-1
    - device: format-2, path: /boot/efi, type: mount, id: mount-3
write_files:
  # override the kernel package
  - path: /run/kernel-meta-package
    content: |
      linux-virtual
    owner: root:root
    permissions: "0644"
  # attempt to also use an answers file by providing a file at the default path.  It did not seem to have any effect
  #- path: /subiquity_config/answers.yaml
  #  content: |
  #    InstallProgress:
  #      reboot: no
  #  owner: root:root
  #  permissions: "0644"
EOF

Configurar DHCP

Configure las Opciones de DHCP 66,67 de acuerdo con la documentación de su servidor DHCP.

Arranque su servidor

En este punto, debería poder iniciar su servidor basado en UEFI y realizar una instalación completamente automática.

Errores encontrados

  • El servidor que se está instalando requiere más de 2 GB de RAM. Terminé creando una VM con 3 GB para probar
  • El generado /var/log/installer/autoinstall-user-data el archivo se rompió de las siguientes maneras
    • No hay version propiedad, lo que provocó un error de validación. Agregué la propiedad
    • los network La sección requería otro nivel de anidación. Este error se menciona en la referencia de configuración.
    • los preserve propiedad en cada elemento en storageconfig necesitaba ser configurado en false. De lo contrario curtin no se instalaría en un disco en blanco
    • los keyboard propiedad toggle estaba configurado para null, lo que provocó un error de validación. Simplemente quité la propiedad
  • Cuando curtin se instala en un dispositivo UEFI, reordena el orden de inicio para que la opción de inicio actual sea la primera en la lista. El resultado es que el inicio de red se convierte en la primera opción en el siguiente reinicio. Entonces, cuando se realiza la instalación y se reinicia ... terminas en el entorno PXE nuevamente en lugar de arrancar desde el disco. Encontré un indocumentadocortin opción reorder_uefi. Afortunadamente, subiquidad pasa esta configuración a curtin
  • los apt opción de configuración geoip no parece funcionar. Siempre hubo registros de solicitudes de geoip.
  • Usar valores legibles por humanos para tamaños de partición (p. Ej. size: 512M) dio como resultado que el tamaño se almacenara como un flotante, lo que provocó errores al dimensionar los volúmenes LVM como un porcentaje. Evitar los valores legibles por humanos parece solucionar este problema

Otras características que faltan

No investigué tanto en estos. Se basan en lo que harían mis archivos preconfigurados. La mayoría de ellos probablemente podrían arreglarse con un uso inteligente de early-commands, late-commands, y nube-init. Puede que también me haya perdido algo

  • Una forma de establecer la zona horaria
  • Una forma de establecer la contraseña de root
  • Una forma de configurar un solo proxy apto. Me gusta usar apt-cacher-ng para apt, pero no funciona como proxy general. El instalador asume que cualquier proxy que configure es para todo
  • Una forma de pausar al final de la instalación en lugar de reiniciar automáticamente. La solución es agregar un valor a interactive-sections, pero eso da como resultado 3 pausas
  • Permitir directo cortin configuración. Tienes que crear yaml para nube-init para proporcionar yaml a subiquidad, que luego genera yaml para cortin. Proporcionaría más flexibilidad de configuración para poder proporcionar el yaml de curtin directamente
  • Permitir directo nube-init configuración. Tienes que crear yaml para nube-init para proporcionar yaml a subiquidad, que luego genera yaml para nube-init en la máquina instalada. Estos archivos deberían ser fáciles de modificar con late-commands, pero no lo probé
  • Posibilidad de elegir el paquete del kernel. Descubrí que la imagen del kernel instalada se basa en lo que está escrito en /run/kernel-meta-package. Esto está codificado para linux-generic en initramfs. Prefiero usar el linux-virtual paquete para máquinas virtuales. Pude usar el nube-init configuración para sobrescribir el archivo

Editar 1

La resultante /target/var/lib/cloud/seed/nocloud-net/user-data archivo utilizado por cloud-init durante el primer arranque. Las respuestas indican el lock-passwd la propiedad tiene un error tipográfico y puede afectar a algunos usuarios

#cloud-config
growpart: mode: 'off'
locale: en_US.UTF-8
preserve_hostname: true
resize_rootfs: false
ssh_pwauth: true
users:
- gecos: ubuntu
  groups: [adm, cdrom, dip, plugdev, lxd, sudo]
  lock-passwd: false
  name: ubuntu
  passwd: $6$.c38i4RIqZeF4RtR$hRu2RFep/.6DziHLnRqGOEImb15JT2i.K/F9ojBkK/79zqY30Ll2/xx6QClQfdelLe.ZjpeVYfE8xBBcyLspa/
  shell: /bin/bash

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *