Home » Blog

Ubuntu Usbstick Autoinstall

<time datetime='2023-05-24 00:00:00 +0000 UTC'>May 24, 2023</time>&nbsp;·&nbsp;2 min&nbsp;·&nbsp;Michael Bäcker

Ein USB Stick für eine automatische Ubuntu Server Installation erstellen

Ubuntu autoinstall bash

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