Ich habe diverse Scripte, Docker-Images und config files auf einem lokalen http Server liegen. Stecke dann meinen USB-Stick in den PC und ohne irgend ein zutun ist 5 min später der neue Server am laufen und alles eingerichtet.
Nun möchte ich diese "Installationsdaten" allerdings mit auf den USB-Stick (bootfähiges Image von Ubuntu Server) packen, damit ich mir den Umweg über den lokalen Server sparen kann.
Wie geht das über http? Eigentlich ganz einfach, wenn man mal rausgefunden hat wie Die Befehle unter runcmd: werden nämlich beim ersten Booten des Servers ausgeführt. Durch den Eintrag in grub.cfg weiß Ubuntu, dass es sich um eine unattended Installation handelt und zieht allle notwendigen Dateien von meinem lokalen Server und führt die Scripte aus. Nachfolgend der Inhalt der dafür maßgeblichen Dateien:
user-data:
#cloud-config
autoinstall:
user-data:
runcmd:
- mkdir -p /home/user/install
- apt install -y nano ufw samba rsync
- wget -r -np -nH -P /home/user/install http://123.456.789.123:8800/
- chmod +x /home/user/install/*
- bash /home/user/install/install.sh
- reboot
updates: security
version: 1
Display More
Die grub.cfg des USB-Sticks:
set timeout=5
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set default=2
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz ---
initrd /casper/initrd
}
menuentry "Auto Install /cdrom USB" {
linux /casper/vmlinuz autoinstall 'ds=nocloud;s=/cdrom/install/' ---
initrd /casper/initrd
}
menuentry "Auto Install http" {
linux /casper/vmlinuz autoinstall ds=nocloud-net\;s=http://123.456.789.123:8800/ ---
initrd /casper/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+x64.bin
}
fi
Display More
Struktur auf meinem http Server:
├── user-data
├── meta-data
├── script1.sh
├── script2.sh
├── install.sh
└── Docker
└── Dockervolume1
└── Dateien
└── Dockervolume2
└── Dateien
└── image
└── image.tar
Display More
Struktur auf dem USB-Stick:
└── boot
└── grub
└── grub.cfg
├── casper
├── dists
├── EFI
├── install
└── user-data
└── meta-data
└── Docker
└── Dockervolume1
├── pool
Display More
Die Ordnerstruktur auf dem http Server ist gleich mit dem Ordner /install auf dem USB-Stick.
Mit Boot Option 1 (install von /cdrom/install/) wird auch ein unattended Install erkannt und ausgeführt ... leider nur bis zum Punkt runcmd: irgendwie wird der USB-Stick während der Installation "entmountet" und darum kann ich die Daten aus dem /install Ordner nicht mehr kopieren. Ich habe es auf unzählige Arten mit verschiedenen Ordnern probiert. Auch das manuelle mounten schlägt fehl. Hat einer einen Tipp?
Hier noch runcmd vom USB stick: