Skip to content

Instantly share code, notes, and snippets.

@hmenke
Last active May 17, 2023 11:21
Show Gist options
  • Save hmenke/5b7519aa7eea1d1d231ef6df65bfeb79 to your computer and use it in GitHub Desktop.
Save hmenke/5b7519aa7eea1d1d231ef6df65bfeb79 to your computer and use it in GitHub Desktop.
Ubuntu cloud-init autoinstall

Create an Ubuntu 20.04 LTS autoinstall USB

This only works with UEFI boot.

  1. Get a USB key and format it with a GPT partition table. Using gptfdisk something like this should do it:
    sgdisk -og /dev/sdX
    sgdisk -n 0:0:0 -t 0:ef00 /dev/sdX
    
    Create a FAT32 partition, mount it and extract the ISO image to that location
    mkfs.vfat -F32 /dev/sdX1
    mkdir cd-image
    mount /dev/sdX1 cd-image
    7z x ubuntu-20.04.2-live-server-amd64.iso -ocd-image/
    
  2. Create a directory called nocloud, copy user-data to it, and create an empty file meta-data.
    mkdir cd-image/nocloud
    touch cd-image/nocloud/meta-data
    cp user-data cd-image/nocloud/user-data
    
  3. Edit the bootloader as described in ubuntu-usb.patch and disable the integrity check of the installer using
    echo "" > cd-image/md5sum.txt
    
--- boot/grub/grub.cfg
+++ boot/grub/grub.cfg
@@ -13,7 +13,7 @@
set timeout=5
menuentry "Install Ubuntu Server" {
set gfxpayload=keep
- linux /casper/vmlinuz quiet ---
+ linux /casper/vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---
initrd /casper/initrd
}
grub_platform
@@ -28,7 +28,7 @@
submenu 'Boot and Install with the HWE kernel' {
menuentry "Install Ubuntu Server" {
set gfxpayload=keep
- linux /casper/hwe-vmlinuz quiet ---
+ linux /casper/hwe-vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---
initrd /casper/hwe-initrd
}
}
--- isolinux/txt.cfg
+++ isolinux/txt.cfg
@@ -2,11 +2,11 @@
label live
menu label ^Install Ubuntu Server
kernel /casper/vmlinuz
- append initrd=/casper/initrd quiet ---
+ append initrd=/casper/initrd quiet autoinstall ds=nocloud;s=/cdrom/nocloud/ ---
label hwe-live
menu label ^Install Ubuntu Server with the HWE kernel
kernel /casper/hwe-vmlinuz
- append initrd=/casper/hwe-initrd quiet ---
+ append initrd=/casper/hwe-initrd quiet autoinstall ds=nocloud;s=/cdrom/nocloud/ ---
label memtest
menu label Test ^memory
kernel /install/mt86plus
#cloud-config
# https://ubuntu.com/server/docs/install/autoinstall-reference
autoinstall:
version: 1
interactive-sections:
- storage
apt:
primary:
- arches: [default]
uri: "http://ftp.fau.de/ubuntu"
sources:
salt:
source: "deb https://repo.saltproject.io/py3/ubuntu/20.04/amd64/latest $RELEASE 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-----
packages:
- curl
- emacs
- git
- salt-minion
# does this even do anything?
package_update: true
package_upgrade: true
# completely ignored (probably because interactive)
storage:
layout:
name: direct
swap:
size: 0
ssh:
allow-pw: true
install-server: true
keyboard:
layout: en
variant: us
locale: en_US.UTF-8
user-data:
timezone: Europe/Berlin
late-commands:
- swapoff -a
- sed -i '/^\/swap.img/d' /target/etc/fstab
- rm -f /target/swap.img
- echo 'root:$6$zScnL.LGa$W0rG9t6Yy2y84aprSP0USWQ/MD7AwLFO/ljt1iDm8Mb2AETAKyMfUGngG6oqOZ7naIa9BmIEOfqHWHyPHVaH3/' | chpasswd -e -R /target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment