3.7 KiB
kvm
Working on scripting to create a VM from a template.
Ubuntu 22.04.5 LTS (Jammy Jellyfish)
Note that the following steps are derived from this guide
Autoinstall configuration reference manual
Generating the autoinstall ISO
- Install necessary packages
apt install xorriso
apt install p7zip
- Download the Ubuntu image
mkdir iso-build
cd iso-build
wget https://releases.ubuntu.com/jammy/ubuntu-22.04.5-live-server-amd64.iso
- Unpack the files and partition the images
mkdir source-files
7z -y x ubuntu-22.04.5-live-server-amd64.iso -osource-files
- In the source-files directory, you will see the ISO files plus a directory named ‘[BOOT]’, which contains 1-Boot-NoEmul.img and 2-Boot-NoEmul.img. Those are, respectively, the mbr (master boot record) and efi (UEFI) partition images from the ISO. They will be used to create the modified ISO. There is no reason to leave the raw image files on the new ISO, so move them out of the way and give the directory a better name.
cd source-files
ls
mv '[BOOT]' ../BOOT
- Edit the grub.cfg file at
source-files/boot/grub/grub.cfg
vim boot/grub/grub.cfg
Add the following above the existing menu entries:
menuentry "Autoinstall Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/server/ ---
initrd /casper/initrd
}
This will enable autoinstall and reference the server
directory where our user-data
and meta-data
files will be located.
- Create and add your custom autoinstall data files
mkdir server
cd server
touch meta-data
vim user-data
Paste the user-data.yaml
content into the user-data
file.
- Generate a new Ubuntu 22.04 server autoinstall ISO
The following command is helpful when trying to set up the arguments for building an ISO. It will give flags and data to closely reproduce the source base install ISO.
cd ../..
xorriso -indev ubuntu-22.04.5-live-server-amd64.iso -report_el_torito as_mkisofs
Using the output of the above, we create the following command. Make sure to run this from the source-files
directory.
cd source-files
xorriso -as mkisofs -r \
-V 'Ubuntu-Server 22.04.5 LTS amd64' \
-o ../ubuntu-22.04-autoinstall.iso \
--grub2-mbr ../BOOT/1-Boot-NoEmul.img \
-partition_offset 16 \
--mbr-force-bootable \
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img \
-appended_part_as_gpt \
-iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot \
-e '--interval:appended_partition_2_start_1040737s_size_10072d:all::' \
-no-emul-boot \
.
If you want to verify the structure of the user-data
file before running this or to troubleshoot later, the following can be helpful.
cloud-init schema --config-file server/user-data
Alternatively, you can also verify with:
sudo apt install yamllint
yamllint server/user-data
Once the xorriso
command is run successfully, the ubuntu-22.04-autoinstall.iso
will be created in the iso-build
directory.
Creating the VM using Bolt
Update the parameters provided to the below plan run command as needed.
cd bolt_vm_automation
bolt plan run bolt_vm_automation::create_vm \
target=siderack \
vm_name=moeny-bank01 \
ip_with_cidr=100.40.223.189/24 \
hostname=moeny-bank01 \
network=br0