Calm Hill My Random Thoughts

QEMU Simple Setup

အရင်ကတော့ ကိုယ့်စက်ပေါ်မှာ တခြား Operating System (OS) တွေ စမ်းဖို့ Virtual Machine (VM) လိုအပ်တဲ့အခါဆို VirtualBox ကိုသုံးတယ်။ အရင်လိုလည်း သိပ်မအားတာရယ် Technical ပိုင်းလည်း စမ်းဖို့သိပ်မရှိတာရယ် Oracle က ယူသွားတဲ့နောက်မှာ VirtualBox မသုံးဖြစ်သလောက် ဖြစ်လာတယ်။ နောက်ပိုင်းမှာ ရုံးကစက်တွေကလည်း Apple Silicon ဖြစ်နေတော့ VirtualBox က Support မပေးတော့တဲ့အတွက် သုံးလို့လည်းမရတော့ပါဘူး။ နည်းနည်း စမ်းသပ်စရာရှိတာရယ် VirtualBox လည်း မသုံးချင်တာရယ်နဲ့ အရင်ကမသုံးဖြစ်တဲ့ QEMU ကိုပြောင်းသုံးဖြစ်တယ်။

Installation on MacOS with Homebrew

brew install qemu

Mac မှာတော့ Installation ကိုတော့ brew နဲ့ပဲလုပ်လိုက်ရင် လွယ်ပါတယ် သိပ်ပြီးတော့ ထွေထွေထူးထူးလုပ်စရာ မလိုအပ်ပါဘူး။ Linux ပေါ်လည်း ကိုယ်သုံးတဲ့ Distro အပေါ်မူတည်ပြီးတော့ Package Manager တခုခုသုံးပြီး Install လုပ်ရင်ရပါလိမ့်မယ်။

Create Image

qemu-img create -f qcow2 ubuntu-22.04.qcow2 20G

ပထမဆုံးအဆင့်အနေနဲ့ ကိုယ်သုံးချင်တဲ့ VM အတွက် Storage Image ကို ပြင်ဆင်ပေးဖို့လိုမယ်။ Format တွေက VMWare, VirtualBox, Raw စသည်ဖြင့် တခြား Format တွေလည်း သုံးချင်ရင်ရပါတယ် Proprietary တွေ မသုံးချင်ဘူးဆိုလည်း Raw လို Format သုံးလည်းရပါတယ်။ ကိုယ်ကတော့ QEMU ရဲ့ qcow2 Format ကိုသုံးပြီးတော့ 20GB Size အနေနဲ့ Image တခုလုပ်ထားတယ်။

ကိုယ်သုံးမယ့် VM အတွက် Image တခုရရင် တကယ်တော့ ဘာမှမလိုတော့ဘူး စပြီးတော့သုံးလို့ရပါပြီ။ Command line options တွေက နည်းနည်းများတော့ တခါသုံးချင်ရင်တခါ ပြန်ပြီးတော့ ရိုက်ထည့်ရရင် အဆင်မပြေတော့ Script တခုနဲ့ အောက်မှာပြထားသလို ရေးထားလိုက်တယ်။

Start Script - start.sh

#!/usr/bin/env bash
qemu-system-x86_64 \
    -cpu host \
    -m 2G \
    -vga std \
    -net nic \
    -net user,hostfwd=tcp::2222-:22 \
    -machine type=q35,accel=hvf \
    -drive file=ubuntu-22.04.qcow2,if=virtio \
    -cdrom ubuntu-22.04.3-live-server-amd64.iso

တခြား Options တွေက သိပ်ထူးထူးခြားခြား ထည့်ထားတာမရှိပါဘူး -m 2G ဆိုပြီး RAM ကို 2GB ပေးထားတယ် -vga std ကတော့ Video Dispaly ကို Default ပဲသုံးထားတာပါ Video Display မလိုချင်ရင်တော့ တခြား Options တွေနဲ့ အစားထိုးပေးဖို့လိုလိမ့်မယ်။ -drive file=ubuntu-22.04.qcow2,if=virtio မှာသုံးထားတဲ့ ubuntu-22.04.qcow2 ကတော့ qemu-img နဲ့ Create လုပ်ထားတဲ့ Filename ဖြစ်ရမယ်။ -net user,hostfwd=tcp::2222-:22 ကတော့ VM ကို Host ကနေ SSH နဲ့ Connect လုပ်ဖို့အတွက် VM ထဲက Port 22 ကို Host ပေါ်က Port 2222 အနေနဲ့ Map လုပ်ထားတာ။ အခုမှသုံးမယ့် VM Image အသစ်ဖြစ်လို့ Installation တွေ လုပ်ဖို့အတွက် Ubuntu 22.04 ISO တခုကို -cdrom မှာ ထည့်ထားတယ်။ Installation လုပ်ပြီးရင် နောက်တခါတွေမှာတော့ အဲဒီ့ Option မပါလိ့ရပါတယ်။

Start the Virtual Machine

./start.sh

Script File ထဲမှာ ထည့်ထားပြီးရင်တော့ VM ကိုသုံးချင်တဲ့အခါ Script ကို Run ပြီးသုံးရုံပါပဲ။

SSH from Host Machine

ssh username@localhost -p 2222

VM ထဲက SSH Server Port 22 ကို 2222 အနေနဲ့ Redirect လုပ်ထားတဲ့အတွက် Connect လုပ်ချင်ရင် Host Machine ရဲ့ Local Port 2222 ကို Connect လုပ်ရင်ရပါလိမ့်မယ်။ SSH မဟုတ်ဘူး Web Server တို့ဘာတို့ဆိုရင်တော့ 80 လိုဟာကို Redirect လုပ်ပြီးသုံးရင်ရပါလိမ့်မယ်။ သုံးရတာလည်း အတော်အဆင်ပြေပါတယ် VirtualBox ထက်လည်း အများကြီးမြန်ပါလိမ့်မယ်။