Funktionierende Lösung zur Installation von Ubuntu 22.04 über iPXE mit cloud-init, subiquity, auto-install, curtin

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

Code:
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#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

Code:
1
2
3
: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/

Wünsche maximale Erfolge!

Ein Gedanke zu „Funktionierende Lösung zur Installation von Ubuntu 22.04 über iPXE mit cloud-init, subiquity, auto-install, curtin

  1. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert