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 enstorage
config
necesitaba ser configurado en false. De lo contrario curtin no se instalaría en un disco en blanco - los
keyboard
propiedadtoggle
estaba configurado para null, lo que provocó un error de validación. Simplemente quité la propiedad
- No hay
- 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óngeoip
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 paralinux-generic
en initramfs. Prefiero usar ellinux-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