23 Mar 2011

Belajar Virtualisasi Mesin Dengan QEMU

Submitted by walecha

QEMU adalah sebuah emulator mesin virtual lintas platform yang canggih. Saya mengatakan hal ini karena jika anda telah menginstal #QEMU di sistem anda, Anda tidak akan menemukan apa-apa selain antarmuka perintah baris sederhana yang dapat dijalankan secara lokal maupun remote. Dengan kata lain, Anda dapat membangun sendiri antarmuka grafis anda untuk menjalankan QEMU. Anda dapat menggunakan shell script, yang berbasis GTK kompleks atau antarmuka Qt, atau jika Anda suka, Anda dapat membangun sendiri antarmuka berbasis web menggunakan PHP, Python, Ruby atau Perl. Maksud saya hal ini benar-benar menjadi milik Anda.

Hal lain mengapa memilih QEMU adalah faktor dependensinya. Jika Anda pengguna Slackware, maka Anda tidak perlu apa-apa lagi untuk menginstal QEMU pada sistem anda. Cukup unduh tarball-nya, kompilasi, instal dan anda sudah siap. Hanya ingat satu hal dalam membangun QEMU, sebaiknya anda menjalankan #Slackware Anda dalam init 1 atau init 3 (text mode / mode non-grafis) karena kompilasi QEMU adalah sebuah proses yang sangat membutuhkan sumber daya. Dalam sistem saya ketika saya membangun QEMU di init 4 (mode grafis), proses pembangunan selalu berhenti setelah beberapa menit karena compiler kehabisan memori.

Sebelum Anda melanjutkan, saya sarankan Anda untuk mengaktifkan dukungan virtualisasi di CPU melalui BIOS. Kemudian jangan lupa untuk memuat modul KVM dan AIO di kernel:

# /sbin/modprobe kvm-intel (kvm-amd untuk CPU AMD)
# /sbin/modprobe aio

Setelah itu anda dapat membuat disk image untuk dijadikan harddisk bagi OS Tamu di QEMU anda. Punya saya seperti ini:

# /usr/bin/qemu-img -c -f qcow2 10G

Seperti yang saya utarakan sebelumnya, anda dapat menjalankan QEMU sesuka anda, karena antarmukanya perintah baris. Berikut ini yang saya lakukan jika saya akan menginstall OS Tamu ke harddisk virtual tersebut:

# /usr/bin/qemu-system-x86_64 -localtime -monitor stdio -enable-kvm -vnc :1 -cpu kvm64 -m 1G -vga std -net nic,model=e1000 -net user,hostfwd=tcp::4222-:22 -soundhw hda -usb -usbdevice host:VENDOR_ID:PRODUCT_ID -cdrom /PATH/TO/CD-DVD-BOOT.iso -boot d -drive file=/PATH/TO/DISK.img,index=0,media=disk,if=ide,cache=writeback,aio=threads

Perintah tersebut akan menjalankan QEMU untuk membuat sebuah mesin virtual dengan spesifikasi seperti ini:

  • #KVM: Enable
  • CPU: 64-bit Compatible
  • RAM :1G
  • Kartu VGA: QEMU VESA 2.0
  • Kartu Audio: Intel HDA
  • Kartu Jaringan: Intel Gigabit Ethernet e1000
  • Boot: CD Image

Setelah OS tamu terinstall, kita dapat mem-boot OS tamu tanpa memasukkan opsi -cdrom pada saat eksekusi qemu:

# /usr/bin/qemu-system-x86_64 -localtime -monitor stdio -enable-kvm -vnc :1 -cpu kvm64 -m 1G -vga std -net nic,model=e1000 -net user,hostfwd=tcp::4222-:22 -soundhw hda -usb -usbdevice host:VENDOR_ID:PRODUCT_ID -drive file=/PATH/TO/DISK.img,index=0,media=disk,if=ide,cache=writeback,aio=threads

Opsi -localtime sangat disarankan untuk mencegah ketidaksinkronan waktu sistem dengan OS tamu. Opsi -monitor stdio dan -vnc memiliki keterkaitan dalam hal fleksibilitas kontrol terhadap OS tamu dan QEMU. Opsi -vnc menyebabkan output apapun (grafis/teks) dari OS tamu masuk ke dalam sistem VNC yang dapat diakses melalui jaringan dengan menggunakan #VNC client, misalnya KRDC milik KDE. Nah untuk dapat mengontrol QEMU secara langsung, opsi -monitor stdio akan menyebabkan monitor QEMU tetap terbuka di terminal tempat kita menjalankan QEMU dan akan otomatis tertutup jika kita melakukan shutdown pada OS tamu.

Dengan adanya monitor QEMU tersebut, kita dapat melakukan penggantian/pelepasan/penambahan CD/DVD atau perangkat eksternal seperti flashdisk, atau kita ingin mematikan mesin virtual dari luar alias tidak login ke dalam OS tamu. Dalam monitor tersebut kita juga dapat melihat sumber daya mesin virtual kita. Output OS tamu di QEMU secara default akan dijalankan via SDL dalam mode grafis (jika kita berada dalam mode X) atau dengan curses/ncurses jika kita berada dalam mode teks. Dengan kombinasi keduanya, kita dapat 'menghilangkan' dua modus output tersebut (SDL/curses) sehingga beberapa mesin virtual dapat dijalankan sekaligus tanpa kita harus kehilangan desktop dan sistem input/output untuk sistem kita. Anda dapat menggunakan opsi -nographic untuk meniadakan output dalam bentuk apapun termasuk monitor QEMU tetapi anda tetap dapat melihat OS tamu anda dengan vnc jika opsi -vnc anda aktifkan. Anda dapat menambahkan opsi -daemonize untuk membuat QEMU berjalan di balik layar. Toh anda tidak membutuhkan sebuah monitor tetap terbuka karena tidak ada yang dapat dilihat secara langsung kecuali anda mengaktifkan tty serial anda. Lihat /etc/inittab untuk mengkonfigurasi perangkat serial yang dapat diaktifkan sebagai monitor QEMU.

qemu-slack32-201103212249.png

Untuk kenyamanan proses remote, saya menggunakan fitur port forwarding yang disediakan oleh opsi -net user,hostfwd. Saya tidak menggunakan perangkat tun/tap karena mesin virtual saya tidak saya gunakan untuk melayani pengguna di internet alias tidak perlu ada koneksi dari luar yang masuk ke dalam mesin virtual saya. Jadi fitur standar tersebut sudah cukup buat saya untuk dapat melakukan proses remote SSH ke mesin virtual saya.

Sekian dulu tulisan tentang QEMU saat ini. Untuk opsi-opsi yang lebih lengkap silakan lihat manual QEMU.