ubuntu: feisty - qemu

 

เดี๋ยวนี้ qemu พร้อม kqemu มีเป็นแบบแพกเกจเรียบร้อย การติดตั้งจึงต่างออกไปจากเดิม
สำหรับใน Feisty การติดตั้งเป็นดังนี้

ส่วนของ qemu
ติดตั้ง qemu
$ sudo aptitude install qemu

ส่วนของ kqemu
ติดตั้ง module-assistant
$ sudo aptitude install module-assistant

ติดตั้ง kqemu ผ่าน module-assistant
$ sudo m-a a-i kqemu

ใน Feisty ไม่ยอมสร้าง /dev/kqemu ให้ ต้องทำเอง
$ sudo mknod /dev/kqemu c 250 0
$ sudo chmod 666 /dev/kqemu
$ sudo modprobe kqemu

ส่วนของเน็ตเวิร์ก
สร้างตาราง nat ไว้รอก่อน
$ sudo iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0
$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0

ติดตั้งแพกเก็จชื่อ uml-utilities
$ sudo aptitude install uml-utilities

เอาอินเทอร์เฟส tun ขึ้นมา
$ sudo modprobe tun
$ sudo chmod 666 /dev/net/tun

qemu จะใช้งานเน็ตเวิร์กผ่านอินเทอร์เฟส tap0 เราจึงต้องสร้าง tap0 ขึ้นมา สมมุติว่าเราชื่อ user1
$ sudo tunctl -u user1

เสร็จแล้ว

สมมุติว่าเรามีอิมเมจ winxp.img อยู่แล้ว สามารถเรียกใช้งาน qemu ด้วย
$ qemu -kernel-kqemu -hda winxp.img -net nic -net tap,ifname=tap0

บันทึกเกร็ดเพิ่มเติม

  • ทดสอบไปทดสอบมา ดูแล้ว qemu น่าใช้ที่สุด เนื่องจากการทำงานราบเรียบกว่า Xen, VirtualBox, kvm, VMWare แพ้แต่ Parallel เท่านั้น ถึงแม้จะรันช้ากว่า แต่มีข้อดีตรงที่เราสามารถปรับเปลี่ยนได้ตามที่เราต้องการ
  • ในขั้นตอนติดตั้งโปรแกรม ควรปิดการทำงานของ kqemu โดยถ้าเป็น Windows Xp ให้เอาออปชั่น -kernel-kqemu ออก และถ้าเป็น Windows 98-ME ให้เติมออปชั่น -no-kqemu
  • ถ้าเป็นซีพียูตระกูลอินเทล - VT จะได้ความเร็วที่ราบรื่น แม้ไม่ได้ใส่ออปชั่น -kernel-kqemu ก็ตาม
  • เวลาติดตั้งโปรแกรม ควรใช้ประโยชน์จากการที่ qemu สามารถทำ overlay ได้มีเทคนิกดังนี้
    1. สร้างอิมเมจหลักก่อน สมมุติว่าชื่อ winxp.qcow
      $ qemu-img create -f qcow winxp.qcow 5G
    2. ติดตั้งวินโดวส์ โดยใช้ hda เป็น winxp.qcow จนเสร็จเรียบร้อย
    3. สร้าง Overlay image เพื่อเก็บอิมเมจเก่าไว้
      $ qemu-img create -b winxp.qcow -f qcow winxp.ovl
    4. ติดตั้งโปรแกรม หรือทำการทดลองใด ๆ บน Overlay image ที่สร้างขึ้น
    5. ถ้าติดตั้งไม่ผ่าน หรือทดลองจนงานเละ ก็ให้ลบอิมเมจ winxp.ovl ทิ้งไป แล้วเริ่มขั้นตอนก่อนหน้านี้ใหม่
    6. ถ้าติดตั้งหรือทดลองจนเสร็จเรียบร้อยแล้ว และต้องการบันทึกงานเข้าไปรวมกับอิมเมจเก่า ให้ใช้คำสั่ง
      $qemu-img commit winxp.ovl
      ผลคือข้อมูลใน winxp.ovl จะถูกบันทึกลงใน winxp.qcow และ winxp.ovl จะถูกลดขนาดลงมา พร้อมที่จะรับงานใหม่ต่อไป
  • ทดสอบล่าสุดบนเดเบียน qemu รุ่น 0.8.2 ซีพียู Pentium E6300 พบว่า
    • บน WindowsXP สั่งด้วย qemu เฉย ๆ เร็วกว่าใช้พารามิเตอร์ -kernel-kqemu
    • บน WindowsMe สั่งด้วย qemu -no-kqemu เร็วและเสถียรกว่า qemu เฉย ๆ (การสั่งด้วย qemu เฉย ๆ จะเปิดใช้งาน kqemu ในโหมด user โดยอัตโนมัติ)
    • บน WindowsMe สั่งด้วย qemu-system-x86_64 เฉย ๆ เสถียรเท่ากับสั่งด้วย qemu -no-kqemu แต่ช้ากว่า

    สรุปว่าสำหรับ qemu ตั้งแต่รุ่น 0.8.2 เป็นต้นไป ต้องทดลองดูหลาย ๆ แบบ ดูว่าแบบไหนดีที่สุด ไม่จำเป็นต้องเป็นตามคู่มือเสมอไป

หมายเหตุ

  • ผมอัปเกรดจาก dapper ด้วยคำสั่ง aptitude dist-upgrade จึงอาจมีสคริปต์เก่าหลงเหลืออยู่ ไม่แน่ใจว่าถ้าติดตั้งอูบุนตูจากแผ่นติดตั้งของ Feisty ล้วน ๆ ขั้นตอนการติดตั้ง qemu จะต่างออกไปจากนี้หรือไม่

อ้างอิง

Comments

 

ลองทำตามตัวอย่างไปเรื่อง และติดปัญหาบรรทัดนี้ครับอาจารย์

$ sudo iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0

จะมีเมสเสสแจ้งดังนี้ครับ (แฮ่ะๆ ไม่รู้เรื่อง iptables นิ)

$ iptables: No chain/target/match by that name

ช่วยด้วยจิ ...

 

ไม่มีอะไรครับ ผมชอบกันเหนียว เพราะถ้าเราเขียนกฎซ้ำกับกฎเก่า เขาจะไม่ยอมลบกฎเก่าออก แต่จะเพิ่มกฎใหม่ซ้อนทับเข้าไปเรื่อย ๆ
บรรทัดนี้มันเป็นการลบกฎเก่าออก ( -D ) ถ้าไม่มีกฎเก่าค้างอยู่ เขาจะแจ้งข้อผิดพลาดออกมา แต่ไม่มีผลอะไรครับ
บรรทัดที่ทำงานจริง ๆ เป็นบรรทัดถัดมา คือการเพิ่มกฎใหม่ ( -A ) ครับ

กำลังลองกับเดเบียนอยู่ครับ ใช้วิธีเดียวกันได้เลย
ตอนนี้หันมาคบกับ Debian-Desktop ชักชอบแฮะ มันตรงไปตรงมาดี :)

 

ตกลงทุกอย่างปกติดีใช่มั้ยครับ อาจารย์ ...

อย่าว่าขึ้เกียจหาข้อมูลเลยนะครับ ... ถ้าผมจะเรียก LiveCD ISO File ของลินุกส์ผมจะใช้คำสั่งแบบไหนครับ ...

รบกวนด้วยนะครับ ...

 

ยังไม่ค่อยเข้าใจคำถามครับ
สมมุติถ้าจะใช้ซีดีเป็นไดรฟ์เดียวกับลินุกซ์ คำสั่งจะเป็น
$ qemu -hda winxp.img -cdrom /dev/cdrom
แบบนี้น่ะครับ :)

 

หาตัวอย่างเองได้แล้วครับ แต่ยังมีปัญหาเรื่อง tap

$ qemu -kernel-kqemu -m 256 -cdrom edubuntu.iso -net nic -net tap,ifname=tap0

จะเกิด Error

warning: could not configure /dev/net/tun: no virtual network emulation
Could not initialize device 'tap'

และใช้คำสั่งแบบนี้ จะเกิด Kernel Panic

$ qemu -kernel-kqemu -m 256 -cdrom edubuntu.iso

เลยลอง qemu อย่างเดียวถึงทำงานได้ครับ

$ qemu -m 256 -cdrom edubuntu.iso

ช่วยชี้แนะหน่อยครับ

 

เรื่อง tap พอแก้ได้ครับ คือผมจะสร้างสคริปต์ก่อนใช้คำสั่ง qemu คือ
$ vi d.qemu

sudo iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0
sudo iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
sudo rmmod kqemu
sudo modprobe kqemu major=0
sudo chmod 666 /dev/kqemu
sudo rmmod tun
sudo modprobe tun
sudo chmod 666 /dev/net/tun
sudo tunctl -d tap0
sudo tunctl -u $USER

$ ./d.qemu
(อีตรง $USER ผมใส่ชื่อยูสเซอร์ตรง ๆ เลย ไม่งั้นมันจะกลายเป็น root ครับ)

แล้วจึงสั่งรัน qemu ...
เรื่อง cdrom ผมก็เจอข้อผิดพลาดเหมือนกันครับ ต้องลองผิดลองถูกเอาครับ

 

ผ่านแล้วครับ แต่ผมเจอ Kernel panic อยู่ดี แต่เปรียบเทียบความเร็วแล้วใช้ -kernel -kqemu จะเร็วกว่า คงต้องลองเคสอื่นๆดูครับ ขอบคุณครับที่ปันความรู้ให้นะครับ (เหมือนจับมือทำให้เลยนะเนี่ย) ...

 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.