Ich entschuldige mich vorab für den folgenden polemischen Beitrag. Aber was Canonical da abgeliefert hat ist ehrlichgesagt eine einzige Katastrophe. Seit 22.04 gibt es den Legacy-Debian-Installer nicht mehr, welcher bei 20.04 noch verfügbar war. Möchte man sauber Hosts über PXE komissionieren, ist bei Ubuntu nun cloud-init, subiquity, auto-install oder wie auch immer sie den Unsinn nennen, angesagt. Hauptsache die Buzzword-Quote stimmt, Funktionalität ist nunmehr nebensächlich. „Cloud-init is the industry standard multi-distribution method for cross-platform cloud instance initialization“…
Die neue YAML-Syntax sollte Verbesserungen bringen, aber das Chaos ist dadurch nur noch größer. root-User lassen sich im „identity“ Dictionary nicht anlegen, automatische Updates im Installationsprozess lassen sich nur mit einem Hack abstellen, die Referenzierung auf user-data und user-meta Files ist völlig undurchdacht, die YAML-Files erfordern nicht-YAML-konforme Syntax um zu funktionieren (wer hat sich die bescheuerte Erfordernis von „#cloud-config“ in der ersten Zeile der user-data YAML ausgedacht?), der Installationsprozess wird ewig in die Länge gezogen, ISO-Images sind zusätzlich zum Kernel und der Initramdisk nun auch bei Installation nötig und als wäre das nicht genug, werden diese in der Standardkonfiguration auch noch doppelt geladen (2×1,3GB) sodass eine Installation mindestens 3GB RAM erfordert, mit Hack dann 2GB. Schöne neue Welt.
Versteht mich bitte nicht falsch, der Debian-Installer hatte auch seine Macken, die Partitionierung war katastrophal, aber über die Jahre hat man sich eben irgendwie arrangiert und konnte von Release zu Release mit leichten Anpassungen springen.
Auto-Install reißt das alles ein um dann alles wieder gleichermaßen beschissen und schlecht dokumentiert wieder aufzubauen. Wofür bitte?
Sei es drum, trotz der schlechten Dokumentation und ohne Präzedenzfall habe ich es mit Hilfe geschafft, ein user-data YAML sowie einen beispielhaften Eintrag in der menu.ipxe zu schaffen, um Ubuntu 22.04 sauber mithilfe von iPXE installieren zu können. Sollte das Beispiel bei euch nicht funktionieren, meldet euch bitte in den Kommentaren.
Für weitere Informationen könnt ihr die Dokumentation von Molnar Peter konsultieren. Meine Beispiele stellen insofern eine Erweiterung der seinen dar, als das es hier konkret um iPXE geht und mein user-data YAML auf meine Bedürfnisse angepasst wurde.
user-data YAML
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
timezone: Europe/Berlin
network:
version: 2
renderer: networkd
ethernets:
ens192:
dhcp4: true
proxy: http://mein-deb-proxy:3128/
apt:
sources:
saltstack.list:
source: deb http://repo.saltstack.com/py3/ubuntu/20.04/amd64/3004 focal main
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2
mQENBFOpvpgBCADkP656H41i8fpplEEB8IeLhugyC2rTEwwSclb8tQNYtUiGdna9
m38kb0OS2DDrEdtdQb2hWCnswxaAkUunb2qq18vd3dBvlnI+C4/xu5ksZZkRj+fW
tArNR18V+2jkwcG26m8AxIrT+m4M6/bgnSfHTBtT5adNfVcTHqiT1JtCbQcXmwVw
WbqS6v/LhcsBE//SHne4uBCK/GHxZHhQ5jz5h+3vWeV4gvxS3Xu6v1IlIpLDwUts
kT1DumfynYnnZmWTGc6SYyIFXTPJLtnoWDb9OBdWgZxXfHEcBsKGha+bXO+m2tHA
gNneN9i5f8oNxo5njrL8jkCckOpNpng18BKXABEBAAG0MlNhbHRTdGFjayBQYWNr
YWdpbmcgVGVhbSA8cGFja2FnaW5nQHNhbHRzdGFjay5jb20+iQE4BBMBAgAiBQJT
qb6YAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAOCKFJ3le/vhkqB/0Q
WzELZf4d87WApzolLG+zpsJKtt/ueXL1W1KA7JILhXB1uyvVORt8uA9FjmE083o1
yE66wCya7V8hjNn2lkLXboOUd1UTErlRg1GYbIt++VPscTxHxwpjDGxDB1/fiX2o
nK5SEpuj4IeIPJVE/uLNAwZyfX8DArLVJ5h8lknwiHlQLGlnOu9ulEAejwAKt9CU
4oYTszYM4xrbtjB/fR+mPnYh2fBoQO4d/NQiejIEyd9IEEMd/03AJQBuMux62tjA
/NwvQ9eqNgLw9NisFNHRWtP4jhAOsshv1WW+zPzu3ozoO+lLHixUIz7fqRk38q8Q
9oNR31KvrkSNrFbA3D89uQENBFOpvpgBCADJ79iH10AfAfpTBEQwa6vzUI3Eltqb
9aZ0xbZV8V/8pnuU7rqM7Z+nJgldibFk4gFG2bHCG1C5aEH/FmcOMvTKDhJSFQUx
uhgxttMArXm2c22OSy1hpsnVG68G32Nag/QFEJ++3hNnbyGZpHnPiYgej3FrerQJ
zv456wIsxRDMvJ1NZQB3twoCqwapC6FJE2hukSdWB5yCYpWlZJXBKzlYz/gwD/Fr
GL578WrLhKw3UvnJmlpqQaDKwmV2s7MsoZogC6wkHE92kGPG2GmoRD3ALjmCvN1E
PsIsQGnwpcXsRpYVCoW7e2nW4wUf7IkFZ94yOCmUq6WreWI4NggRcFC5ABEBAAGJ
AR8EGAECAAkFAlOpvpgCGwwACgkQDgihSd5Xv74/NggA08kEdBkiWWwJZUZEy7cK
WWcgjnRuOHd4rPeT+vQbOWGu6x4bxuVf9aTiYkf7ZjVF2lPn97EXOEGFWPZeZbH4
vdRFH9jMtP+rrLt6+3c9j0M8SIJYwBL1+CNpEC/BuHj/Ra/cmnG5ZNhYebm76h5f
T9iPW9fFww36FzFka4VPlvA4oB7ebBtquFg3sdQNU/MmTVV4jPFWXxh4oRDDR+8N
1bcPnbB11b5ary99F/mqr7RgQ+YFF0uKRE3SKa7a+6cIuHEZ7Za+zhPaQlzAOZlx
fuBmScum8uQTrEF5+Um5zkwC7EXTdH1co/+/V/fpOtxIg4XO4kcugZefVm5ERfVS
MA==
=dtMN
-----END PGP PUBLIC KEY BLOCK-----
storage:
swap:
size: 4G
config:
# Physical disk
- type: disk
id: drive-0
ptable: gpt
wipe: superblock-recursive
preserve: false
name: ''
grub_device: false
# EFI partition
- type: partition # EFI partition /boot/efi
number: 1
id: partition-0
device: drive-0
size: 256M
flag: boot
grub_device: true
- type: format # EFI partition format rules
id: format-0
volume: partition-0
fstype: fat32
label: ESP
- path: /boot/efi # EFI partition mount rules
device: format-0
type: mount
id: mount-efi
# LVM PV
- type: partition # LVM partition (PV)
number: 2
id: pv-0
device: drive-0
size: -1
grub_device: false
# LVM VG
- name: VG # LVM VG (system)
devices: [ pv-0 ]
preserve: false
type: lvm_volgroup
id: vg-0
# LVM LV ROOT
- name: ROOT # LVM LV (root)
volgroup: vg-0
size: 8G
wipe: superblock
preserve: false
type: lvm_partition
id: lv-0
- fstype: ext4 # LVM LV root - format rules
volume: lv-0
preserve: false
type: format
id: format-root
- path: / # LVM LV root - mount rules
device: format-root
type: mount
id: mount-root
# LVM LV VAR
- name: VAR # LVM LV (root)
volgroup: vg-0
size: 12G
wipe: superblock
preserve: false
type: lvm_partition
id: lv-1
- fstype: ext4 # LVM LV root - format rules
volume: lv-1
preserve: false
type: format
id: format-var
- path: /var # LVM LV root - mount rules
device: format-var
type: mount
id: mount-var
# LVM LV DATA
- name: DATA # LVM LV (root)
volgroup: vg-0
size: -1
wipe: superblock
preserve: false
type: lvm_partition
id: lv-2
- fstype: ext4 # LVM LV root - format rules
volume: lv-2
preserve: false
type: format
id: format-data
- path: /data # LVM LV root - mount rules
device: format-data
type: mount
id: mount-data
identity:
hostname: testname
username: setup
password: "$6$.SAlxBpn2Ch0I$dPF3313pydThKpTXoHH/2aebmxilJVkPSMXtE8ZDG4rQTakd2VQTNZHKCVYRcPvzzCF3DX49hQr114jKYo7De."
ssh:
install-server: true
allow-pw: true
updates: all
packages:
- salt-minion
- python3-mako
- python3-psutil
user-data:
disable_root: false
late-commands:
- curtin in-target --target=/target -- sed -ie 's/GRUB_TIMEOUT=.\*/GRUB_TIMEOUT=5/' /etc/default/grub
- curtin in-target --target=/target -- sed -i '/^#GRUB_TERMINAL/cGRUB_TERMINAL=console' /etc/default/grub
- curtin in-target --target=/target -- sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/cGRUB_CMDLINE_LINUX_DEFAULT=""' /etc/default/grub
- curtin in-target --target=/target -- update-grub
menu.ipxe
:jammy-autonet
kernel http://seedserver.local/ipxe/jammy/vmlinuz initrd=initrd ip=dhcp cloud-config-url=/dev/null url=http://seedserver.local/jammy-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://seedserver.local/preseed/
initrd http://seedserver.local/ipxe/jammy/initrd
Wünsche maximale Erfolge!
Es gibt neben dem Debian Installer auch noch die Möglichkeit Debian und Ubuntu mit FAI (Fully Automatic Installation) via PXE oder auch von einem customized ISO zu installieren.
Man kann einen eigenen FAI Server aufsetzten und dann sehr fein die Installation steuern. Zu Anfang empfehle ich aber, die FAI.me Dienst zu nutzen, der einem auf einer Webseite ein customized Installations ISO erzeugt.