Pendahuluan

Cloud-Init memudahkan pembuatan VM yang langsung siap pakai tanpa setup manual. Dengan QEMU, kita bisa menjalankan VM ringan, fleksibel, dan sepenuhnya otomatis — 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.