Add basic custom ubuntu image guide
parent
83c97fe795
commit
18b84313d4
|
|
@ -0,0 +1,142 @@
|
|||
# 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:
|
||||
|
||||
```bash
|
||||
sudo apt install xorriso
|
||||
```
|
||||
|
||||
## Step 1: Extract the Original ISO Contents
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
1. Additional packages
|
||||
2. Custom scripts to run during installation
|
||||
3. Network configuration
|
||||
4. More complex storage layouts with custom partitioning
|
||||
5. 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
|
||||
Loading…
Reference in New Issue