Cloud-Init memudahkan pembuatan VM yang langsung siap pakai tanpa setup manual. Jika digabungkan dengan QEMU, kita bisa menjalankan VM ringan, fleksibel, dan sepenuhnya otomatis sangat cocok untuk pengujian, development, atau infrastruktur mini di laptop/server pribadi.

Artikel ini membahas langkah demi langkah membuat VM Ubuntu 24.04 di QEMU, lengkap dengan:

  • Auto-login & SSH access,
  • Password dan user otomatis,
  • Persistensi data,
  • Cloning VM,
  • Dan manajemen dasar seperti start, stop, dan reboot.

1. Instalasi Dasar di Host Ubuntu 24.04

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils cloud-image-utils virtinst

Pastikan KVM aktif:

kvm-ok

2. Download Image Ubuntu Cloud

mkdir -p ~/vm/ubuntu2404
cd ~/vm/ubuntu2404
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

3. Buat File Cloud-Init

user-data

#cloud-config
hostname: ubuntu-vm
manage_etc_hosts: true

users:
  - name: ubuntu
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin, sudo
    shell: /bin/bash
    lock_passwd: false
    plain_text_passwd: "ubuntu123"
    ssh_authorized_keys:
      - ssh-rsa AAAAB3... user@host

ssh_pwauth: true
disable_root: false

chpasswd:
  list: |
        ubuntu:ubuntu123
  expire: false

package_update: true
packages:
  - qemu-guest-agent
  - net-tools
  - curl
  - vim

runcmd:
  - systemctl enable qemu-guest-agent
  - systemctl start qemu-guest-agent
  - echo "Cloud-init setup done!" > /home/ubuntu/READY

meta-data

instance-id: ubuntu2404
local-hostname: ubuntu-vm

4. Buat ISO Cloud-Init

cloud-localds seed.img user-data meta-data

5. Buat Disk VM

qemu-img create -f qcow2 disk.qcow2 20G
qemu-img convert -O qcow2 noble-server-cloudimg-amd64.img base.qcow2
cp base.qcow2 disk.qcow2

6. Jalankan VM

qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -cpu host \
  -smp 2 \
  -drive file=disk.qcow2,format=qcow2 \
  -drive file=seed.img,format=raw \
  -nic user,model=virtio,hostfwd=tcp::2222-:22 \
  -nographic

Login lewat SSH:

ssh -p 2222 ubuntu@localhost

Password: ubuntu123


7. Menghentikan & Menjalankan Ulang VM

Hentikan VM:

  • Di console: Ctrl + A lalu X
  • Dari dalam VM: sudo shutdown -h now
  • Dari host: kill $(cat vm.pid) (jika dijalankan sebagai daemon)

Menjalankan ulang:

Gunakan perintah QEMU yang sama seperti awal menjalankan VM.


8. Membuat VM Lain dari Template yang Sama

Gunakan base image yang sama, buat direktori baru:

cd ~/vm
cp -r ubuntu2404 ubuntu2404-vm2
cd ubuntu2404-vm2

Ubah meta-data:

instance-id: ubuntu2404-vm2
local-hostname: ubuntu-vm2

Buat seed baru:

cloud-localds seed.img user-data meta-data

Buat disk overlay:

qemu-img create -f qcow2 -b ../ubuntu2404/base.qcow2 disk.qcow2

Jalankan:

qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 \
  -cpu host \
  -smp 2 \
  -drive file=disk.qcow2,format=qcow2 \
  -drive file=seed.img,format=raw \
  -nic user,model=virtio,hostfwd=tcp::2223-:22 \
  -nographic

Login:

ssh -p 2223 ubuntu@localhost

VM siap digunakan sebagai server lokal, test environment, atau base untuk deployment otomatis di sistem DevOps pribadi.