3.2 KiB
3.2 KiB
Creating a Custom Ubuntu Server Installation Image
This guide walks through the process of creating a customized Ubuntu Server installation image with automated setup.
Prerequisites
Install the required tools:
sudo apt install xorriso
Step 1: Extract the Original ISO Contents
# Create working directory
mkdir -p ubuntu-custom/{extract,iso}
# Enter the working directory
cd ubuntu-custom
# Download the iso file if we don't have it already
test -e ubuntu-24.04.2-live-server-amd64.iso || curl -O https://releases.ubuntu.com/24.04.2/ubuntu-24.04.2-live-server-amd64.iso
# Mount the original ISO
sudo mount -o loop ubuntu-24.04.2-live-server-amd64.iso iso
# Copy all contents
rsync -av iso/ extract/
# Unmount when done
sudo umount iso/
Step 2: Create Autoinstall Configuration
# Create directory for autoinstall files
chmod u+w extract/casper/
mkdir -p extract/casper/autoinstall/
# Create user-data file with your configuration
cat > extract/casper/autoinstall/user-data << 'EOF'
#cloud-config
autoinstall:
version: 1
locale: en_US
keyboard:
layout: us
storage:
layout:
name: direct
identity:
hostname: myserver
username: user
# Generate with: mkpasswd --method=SHA-512
password: $6$rounds=4096$....
ssh:
install-server: yes
authorized-keys:
- ssh-rsa AAAAB3N....
packages:
- openssh-server
- fail2ban
- ufw
user-data:
disable_root: true
late-commands:
- echo 'user ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/user
- curtin in-target -- ufw allow OpenSSH
- curtin in-target -- ufw --force enable
EOF
# Create empty meta-data file (required)
touch extract/casper/autoinstall/meta-data
Step 3: Modify Boot Configuration
Edit the GRUB configuration to enable autoinstall:
# Backup original config
chmod u+w extract/boot/grub/
cp extract/boot/grub/grub.cfg extract/boot/grub/grub.cfg.backup
# Edit the grub.cfg file
nano extract/boot/grub/grub.cfg
Replace or modify the first menuentry to:
menuentry "Automated Ubuntu Server Install" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/casper/autoinstall/ quiet ---
initrd /casper/initrd
}
Step 4: Create the Custom ISO
xorriso -as mkisofs -r \
-V "Ubuntu Custom" \
-o custom-ubuntu.iso \
-J -joliet-long \
-b boot/grub/i386-pc/eltorito.img \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-eltorito-alt-boot -e EFI/boot/bootx64.efi \
-no-emul-boot \
extract/
Step 5: Test the ISO
Test the ISO using a virtual machine:
# With QEMU
qemu-img create -f qcow2 test-disk.qcow2 20G
qemu-system-x86_64 -cdrom custom-ubuntu.iso \
-drive file=test-disk.qcow2,format=qcow2,if=virtio \
-m 2048
Additional Customization Options
You can expand the user-data file to include:
- Additional packages
- Custom scripts to run during installation
- Network configuration
- More complex storage layouts with custom partitioning
- Time zone and locale settings
Troubleshooting
If the installer doesn't automate:
- Check that the paths in the kernel parameters match where you placed the autoinstall files
- Verify the syntax of your user-data file
- Ensure both user-data and meta-data files exist