Ubuntu USB Stick für Autoinstall
USB Stick Vorbereitung
USB Stick mit einer MBR Partition erstellen
Eine Partition erstellen mit Typ W95 FAT32
Ubuntu ISO vorbereiten
sudo mkdir /mnt123
sudo mount -o loop ~/isos/ubuntu-22.04.2-live-server-amd64.iso /mnt123
USB Stick mounten
sudo mkdir /mnt234
mount /dev/sdd1 /mnt234
ISO auf USB Stick kopieren
sudo rsync -av /mnt123/ /mnt234/
Nun ist der USB Stick fertig und man kann davon booten, auch im UEFI Modus. Dank der Implementierung von UEFI kann man direkt von einer FAT Partition booten, sofern dort alle notwendigen Dateien und Ordner vorhanden sind:
- /EFI/boot/bootx64.efi
Mit dieser Datei wird dann die
- /EFI/boot/grubx64.efi
gebootet, die dann die Datei
- /boot/grub/grub.cfg
auswertet und ausführt.
Anpassen der grub.cfg für die automatische Installation
set timeout=30
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Manual Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz locale=de_DE bootkbd=de console-setup/layoutcode=de ---
initrd /casper/initrd
}
menuentry "Automatic Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz locale=de_DE bootkbd=de console-setup/layoutcode=de noeject autoinstall ds='nocloud-net;s=http://192.168.1.40:3003/' ---
initrd /casper/initrd
}
# menuentry "Ubuntu Server with the HWE kernel" {
# set gfxpayload=keep
# linux /casper/hwe-vmlinuz ---
# initrd /casper/hwe-initrd
#}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+.bin
}
fi
Der Webserver
In dieser Grub Konfiguration wird ein Webserver angegeben ( http://192.168.1.40:3003 ). Im Dokument Root Ordner müssen 3 Dateien liegen:
- /meta-data
- /vendor-data
- /user-data
Die ersten beiden Dateien sind im Normalfall leer, die user-data enthält die für uns notwendige Konfiguration
#cloud-config
autoinstall:
version: 1
identity:
hostname: k3s-x86-node1
password: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0"
username: ubuntu
late-commands:
- echo "Ubuntu 22.04 LTS \nIP - $(hostname -I)\n" > /target/etc/issue
user-data:
locale: de_DE.UTF-8
timezone: Europe/Berlin
users:
- name: michael
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo, users, admin
ssh_import_id: lp:mbaecker
- name: ubuntu
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo, users, admin
ssh_import_id: lp:mbaecker
packages:
- docker.io
- git
- htop
- screen
updates: all
late-commands:
- usermod -a -G docker ubuntu
- usermod -a -G docker michael
# The modules that run in the 'config' stage
cloud_config_modules:
- ubuntu_autoinstall
- ssh-import-id
- keyboard
- locale
- set-passwords
- timezone
Das Passwort für den User ubuntu ist ubuntu.
Beide User bekommen den SSH-Public-Key von Ubuntu Launchpad des Benutzers mbaecker.
Ein sehr einfacher aber ausreichender Webserver kann wie folgt gestartet werden im Dokument Root Ordner.
python3 -m http.server 3003