In recent releases of Ubuntu, the installation experience has changed significantly. Starting with Ubuntu 24.04, the default server ISO uses the new Subiquity-based live installer, and the traditional text-based “mini.iso” workflow is no longer provided in the same way.
If you’re provisioning virtual machines via automation — especially on a headless host using KVM and virt-install — this can be frustrating. By default, virt-install may attempt to open a graphical console, pushing you toward VNC or SPICE even when you prefer a pure terminal-based workflow. If you open the virt-install console, you’ll see something like:
WARNING CDROM media does not print to the text console by default, so you likely will not see text install output. You might want to use --location. See the man page for examples of using --location with CDROM media
This guide shows how to install Ubuntu 24.04 LTS using the live server ISO entirely from the terminal, launching the installer kernel and initrd directly from the ISO.
Define Virtual Machine Parameters
Start by defining the VM configuration. The block below is fully editable — adjust CPU, RAM, disk size, and paths to fit your environment before running it.
export VM_NAME="ubuntu-vm"
export VM_ISO="https://releases.ubuntu.com/24.04.3/ubuntu-24.04.3-live-server-amd64.iso"
export VM_OS="ubuntu-stable-latest"
export VM_IMG="/var/lib/libvirt/images/${VM_NAME}.qcow2"
export VM_CORES=2
export VM_DISKSIZE=50
export VM_RAMSIZE=4096
export VM_LOCAL_ISL=/tmp/ubuntu.iso
| Variable | Purpose |
|---|---|
VM_NAME |
Name of the virtual machine in libvirt |
VM_ISO |
Official Ubuntu 24.04 live server ISO |
VM_OS |
OS variant for optimization |
VM_IMG |
Path to the VM disk image |
VM_CORES |
Number of virtual CPUs |
VM_DISKSIZE |
Disk size in GB |
VM_RAMSIZE |
RAM in MB |
VM_LOCAL_ISO |
Local ISO download path |
Download the Ubuntu 24.04 ISO
curl -o "$VM_LOCAL_ISO" -L "$VM_ISO"
Install Ubuntu 24 Using Terminal Installer
Here’s the key part: we instruct virt-install to boot directly from the installer kernel and initrd inside the ISO.
virt-install \
--virt-type kvm \
--name "$VM_NAME" \
--os-variant "$VM_OS" \
--disk path=${VM_IMG},size=${VM_DISKSIZE},bus=virtio,format=qcow2 \
--memory "$VM_RAMSIZE" \
--vcpus "$VM_CORES" \
--graphics none \
--console pty,target_type=serial \
--location ${VM_LOCAL_ISO},kernel=casper/vmlinuz,initrd=casper/initrd \
--extra-args="console=ttyS0,115200n8 --- console=ttyS0,115200n8"
This might also interest you