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 ได้มีเทคนิกดังนี้
- สร้างอิมเมจหลักก่อน สมมุติว่าชื่อ winxp.qcow
$ qemu-img create -f qcow winxp.qcow 5G
- ติดตั้งวินโดวส์ โดยใช้ hda เป็น winxp.qcow จนเสร็จเรียบร้อย
- สร้าง Overlay image เพื่อเก็บอิมเมจเก่าไว้
$ qemu-img create -b winxp.qcow -f qcow winxp.ovl
- ติดตั้งโปรแกรม หรือทำการทดลองใด ๆ บน Overlay image ที่สร้างขึ้น
- ถ้าติดตั้งไม่ผ่าน หรือทดลองจนงานเละ ก็ให้ลบอิมเมจ winxp.ovl ทิ้งไป แล้วเริ่มขั้นตอนก่อนหน้านี้ใหม่
- ถ้าติดตั้งหรือทดลองจนเสร็จเรียบร้อยแล้ว และต้องการบันทึกงานเข้าไปรวมกับอิมเมจเก่า ให้ใช้คำสั่ง
$qemu-img commit winxp.ovl
ผลคือข้อมูลใน winxp.ovl จะถูกบันทึกลงใน winxp.qcow และ winxp.ovl จะถูกลดขนาดลงมา พร้อมที่จะรับงานใหม่ต่อไป
- สร้างอิมเมจหลักก่อน สมมุติว่าชื่อ winxp.qcow
- ทดสอบล่าสุดบนเดเบียน 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 จะต่างออกไปจากนี้หรือไม่
อ้างอิง
- http://bbs.archlinux.org/viewtopic.php?id=27298
- http://compsoc.dur.ac.uk/~djw/qemu.html
- http://ubuntuforums.org/showthread.php?t=179472
- https://help.ubuntu.com/community/WindowsXPUnderQemuHowTo
- http://ubuntuforums.org/showthread.php?p=2459231
- http://ubuntuforums.org/showthread.php?t=392198&highlight=kqemu
- http://kitty.in.th/index.php?room=lab&id=303
- Printer-friendly version
- Log in or register to post comments
- 14045 reads
Comments
ใช้ Feisty เพียวๆ ทดสอบ ...
ลองทำตามตัวอย่างไปเรื่อง และติดปัญหาบรรทัดนี้ครับอาจารย์
$ sudo iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0
จะมีเมสเสสแจ้งดังนี้ครับ (แฮ่ะๆ ไม่รู้เรื่อง iptables นิ)
$ iptables: No chain/target/match by that name
ช่วยด้วยจิ ...
re: iptables
ไม่มีอะไรครับ ผมชอบกันเหนียว เพราะถ้าเราเขียนกฎซ้ำกับกฎเก่า เขาจะไม่ยอมลบกฎเก่าออก แต่จะเพิ่มกฎใหม่ซ้อนทับเข้าไปเรื่อย ๆ
บรรทัดนี้มันเป็นการลบกฎเก่าออก ( -D ) ถ้าไม่มีกฎเก่าค้างอยู่ เขาจะแจ้งข้อผิดพลาดออกมา แต่ไม่มีผลอะไรครับ
บรรทัดที่ทำงานจริง ๆ เป็นบรรทัดถัดมา คือการเพิ่มกฎใหม่ ( -A ) ครับ
กำลังลองกับเดเบียนอยู่ครับ ใช้วิธีเดียวกันได้เลย
ตอนนี้หันมาคบกับ Debian-Desktop ชักชอบแฮะ มันตรงไปตรงมาดี :)
^^'
ตกลงทุกอย่างปกติดีใช่มั้ยครับ อาจารย์ ...
อย่าว่าขึ้เกียจหาข้อมูลเลยนะครับ ... ถ้าผมจะเรียก LiveCD ISO File ของลินุกส์ผมจะใช้คำสั่งแบบไหนครับ ...
รบกวนด้วยนะครับ ...
re: LiveCD
ยังไม่ค่อยเข้าใจคำถามครับ
สมมุติถ้าจะใช้ซีดีเป็นไดรฟ์เดียวกับลินุกซ์ คำสั่งจะเป็น
$ 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
ช่วยชี้แนะหน่อยครับ
re: tap
เรื่อง tap พอแก้ได้ครับ คือผมจะสร้างสคริปต์ก่อนใช้คำสั่ง qemu คือ
$ vi d.qemu
$ ./d.qemu
(อีตรง $USER ผมใส่ชื่อยูสเซอร์ตรง ๆ เลย ไม่งั้นมันจะกลายเป็น root ครับ)
แล้วจึงสั่งรัน qemu ...
เรื่อง cdrom ผมก็เจอข้อผิดพลาดเหมือนกันครับ ต้องลองผิดลองถูกเอาครับ
work!
ผ่านแล้วครับ แต่ผมเจอ Kernel panic อยู่ดี แต่เปรียบเทียบความเร็วแล้วใช้ -kernel -kqemu จะเร็วกว่า คงต้องลองเคสอื่นๆดูครับ ขอบคุณครับที่ปันความรู้ให้นะครับ (เหมือนจับมือทำให้เลยนะเนี่ย) ...