debian: Virtualization

ทดลองเกี่ยวกับ Virtualization

Topic: 

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 จะต่างออกไปจากนี้หรือไม่

อ้างอิง

debian: qemu เก็บตก

ทดลองใช้ qemu กับ usb
ในการสั่งรัน ต้องเติมพารามิเตอร์ -usbdevice host:XXXX:XXXX ต่อท้ายคำสั่ง
ซึ่งค่านี้คือค่า Vender ID และ Product ID ตามลำดับ โดยหาได้จากคำสั่ง lsusb

ตัวอย่างของเครื่องผมคือ
ต้องการใช้งาน usb ใน qemu โดยมี Printer Epson Stylus Photo 830 และสแกนเนอร์ UMAX Astra 5650

ดูค่าไอดี
$ lsusb

Bus 005 Device 001: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 002: ID 04b8:0005 Seiko Epson Corp. Stylus Printer
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 002: ID 0461:0392 Primax Electronics, Ltd 
Bus 001 Device 001: ID 0000:0000  

สั่งรัน qemu
$ qemu YOUR-PARAMETER -usbdevice host:04b8:0005 -usbdevice host:0461:0392

เสียง
ใช้คำสั่ง
$ qemu YOUR-PARAMETER -soundhw all

Topic: 

debian: บันทึกการปรุง qemu รุ่นปรับแก้ NumLock/CapsLock เพื่อแจกจ่าย

รุ่นนี้เป็นรุ่นปรับแก้บั๊กเรื่อง NumLock/CapsLock ไม่ยอมเปลี่ยน ตามที่เคยบันทึกไว้

แต่ผมลืมแพกเกจที่ต้องการก่อนติดตั้งหมดแล้ว ฝากดูเอาเองตอน debuild หรือ configure

วิธีสร้างแพกเกจเดเบียน
$ sudo aptitude install devscripts
$ apt-get source qemu
$ cd qemu-0.9.0+20070816
$ vi sdl.c

. . .
    if (ev->keysym.sym == SDLK_PAUSE) {
        /* specific case */
        v = 0;
        if (ev->type == SDL_KEYUP)
            v |= 0x80;
        kbd_put_keycode(0xe1);
        kbd_put_keycode(0x1d | v);
    //    kbd_put_keycode(0x45 | v);
        return;
    }

    if (kbd_layout) {
        keycode = sdl_keyevent_to_keycode_generic(ev);
    } else {
        keycode = sdl_keyevent_to_keycode(ev);
    }

    switch(keycode) {
    case 0x00:
        /* sent when leaving window: reset the modifiers state */
        reset_keys();
        return;
    case 0x2a:                          /* Left Shift */
    case 0x36:                          /* Right Shift */
    case 0x1d:                          /* Left CTRL */
    case 0x9d:                          /* Right CTRL */
    case 0x38:                          /* Left ALT */
    case 0xb8:                         /* Right ALT */
        if (ev->type == SDL_KEYUP)
            modifiers_state[keycode] = 0;
        else
            modifiers_state[keycode] = 1;
        break;
    //case 0x45: /* num lock */
    //case 0x3a: /* caps lock */
        /* SDL does not send the key up event, so we generate it */
    //    kbd_put_keycode(keycode);
    //    kbd_put_keycode(keycode | 0x80);
    //    return;
    }
. . .

$ debuild -us -uc
จะได้แพกเกจเดเบียน ตามต้องการ

ติดตั้งด้วยคำสั่ง
$ sudo dpkg -i ../qemu_0.9.0+20070816-1_i386.deb

วิธีสร้างแพกเกจแบบทั่วไป
$ wget http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz
$ tar xfz qemu-0.9.0.tar.gz
$ cd qemu-0.9.0
$ configure --cc=gcc-3.4
$ make
$ checkinstall -D make install
$ make qemu-doc.html
$ make qemu-tech.html
$ make qemu.1
$ make qemu-img.1
$ sudo make install-doc
$ make tarbin

จะได้แพกเกจ qemu-0.9.0-i386.tar.gz ตามต้องการ โดยไฟล์จะมาอยู่ที่ไดเรกทอรี่ Home

Download
หากคร้านที่จะคอมไพล์เอง ดาวน์โหลดได้ที่นี่ครับ ฝากทดสอบบั๊กให้ด้วย

อ้างอิง
Murray's Blog: Building modified debian packages

บันทึกการแก้ปัญหา Num Lock - Caps Lock ของ qemu

เมื่อได้ลองใช้งาน qemu แบบจริงจัง เจอปัญหาว่า Num Lock กับ Caps Lock มีอาการแปลก ๆ กดแล้วได้ผลบ้าง ไม่ได้ผลบ้าง
เลยลองถอด qemu ของดิสโตร แล้วดาวน์โหลด qemu รุ่นล่าสุดมาลองดูซอร์สโค๊ด
$ sudo aptitude remove qemu
$ wget http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz
$ tar xfz qemu-0.9.0.tar.gz
$ cd qemu-0.9.0

ค้นข้อมูลในกูเกิลดู พบว่าต้นตออยู่ที่ไฟล์ sdl.c
พบว่า qemu แก้ปัญหา sdl ไม่ยอมส่งรหัส Num Lock - Caps Lock ไปให้ระบบ ด้วยการเขียนโค๊ดส่งรหัสเอง
แต่ปัจจุบันนี้ sdl น่าจะแก้ปัญหานี้แล้ว แต่โค๊ดส่วนนี้ยังคงอยู่ เลยทดลองเติมคอมเมนต์ในโค๊ดส่วนนี้ดู
$ vi sdl.c

...
    //case 0x45: /* num lock */
    //case 0x3a: /* caps lock */
        /* SDL does not send the key up event, so we generate it */
    //    kbd_put_keycode(keycode);
    //    kbd_put_keycode(keycode | 0x80);
    //    return;
    ...

แล้วจึงคอมไพล์ใหม่ ด้วย gcc-3.4 ซึ่งต้องติดตั้งใหม่
$ sudo aptitude install gcc-3.4
$ ./configure --cc=gcc-3.4
$ make
$ sudo make install

ผลปรากฎว่า สามารถใช้คีย์ Num Lock และ Caps Lock ได้อย่างที่ควรจะเป็นครับ

ทดลองกับเดเบียน Lenny และอูบุนตู Feisty ไลบรารี libsdl1.2-dev ทั้งคู่

debian: ทดลอง XenOnLenny

จะเอามาลองทดสอบ Windows XP
ใช้ซีพียูอินเทล E6300 (เป็น VT อันดับเบื้องต้นที่สามารถวิ่ง Unmodified OS ได้) แรม 1G

ติดตั้ง xen
$ sudo aptitude install xen-hypervisor-3.0.3-1-i386 xen-utils-common

ติดตั้ง Dom0
$ sudo aptitude install xen-linux-system-2.6.18-4-xen-686
บูตใหม่ด้วย Dom0

เตรียมติดตั้ง DomU ที่เป็น Windows XP
$ sudo aptitude install xen-ioemu-3.0.3-1

สร้างไฟล์คอนฟิกสำหรับ Windows XP
$ sudo vi /etc/xen/winxp.cfg

ติดตั้ง DomU ไว้บนพาร์ติชั่นของฮาร์ดดิสก์จริง ๆ คือ /dev/hda2
ติดตั้งเน็ตเวิร์กตามค่าปริยาย คือเป็นแบบบริดจ์
เนื้อไฟล์เป็นดังนี้

kernel = "/usr/lib/xen-3.0.3-1/boot/hvmloader"
device_model ='/usr/lib/xen-3.0.3-1/bin/qemu-dm'
builder='hvm'
memory = 384
name = "winxp"
vcpus=1
disk = ['phy:/dev/hda2,ioemu:hda,w','phy:/dev/hdb,hdb:cdrom,r']
boot='d'
vif = [ 'type=ioemu, bridge=xenbr0' ]
vnc=1
vncviewer=1
serial='pty'
ne2000=0

ติดตั้ง VNC สำหรับดูหน้าจอ Windows XP
$ sudo aptitude install xtightvncviewer

เริ่มบูตเพื่อติดตั้ง DomU
$ sudo xm create winxp.cfg

เมื่อเคอร์เซอร์หลุดออกมาสู่ภาวะพร้อม ก็สั่งดูหน้าจอติดตั้ง Windows XP ด้วย xtightvncviewer
$ xtightvncviewer localhost

... ติดตั้งตามปกติ ...
หมายเหตุ

  • ถ้ามีการเปลี่ยนความละเอียดของหน้าจอบน Windows XP อาจต้องปิดหน้าต่างของ xtightvncviewer แล้วก็ใช้คำสั่ง $ xtightvncviewer localhost ใหม่
  • ถ้าติดตั้งเรียบร้อยแล้ว อย่าลืมเปลี่ยนพารามิเตอร์ boot ในไฟล์ winxp.cfg เป็น boot = 'c' ด้วย

ผลการทดลอง

  • หลังจากใช้ qemu มานาน เลยมีความรู้สึกว่าเร็วจี๋ทีเดียว โดยเฉพาะเรื่องเน็ตเวิร์ก เร็วมาก ๆ
  • แป้นพิมพ์ตัวเลข ยังมีอาการพิมพ์ไม่ติดเป็นบางครั้ง
  • ตำแหน่งเมาส์ไม่ตรงกัน ระหว่าง Dom0 กับ DomU แก้โดยต้องลองปรับตำแหน่งเมาส์ด้วยการเคลื่อนเมาส์ให้พ้นกรอบของหน้าต่าง Viewer แล้วย้ายมาเริ่มใหม่ในด้านตรงข้าม (ต้องลองไปลองมา แล้วจะเริ่มขยับตรงเอง)
  • ความเร่งของเมาส์ไม่เท่ากัน ระหว่าง Dom0 กับ DomU แก้โดยปรับที่ Windows XP ให้ปิดการทำงานของการเร่งเมาส์
    Control Panel -> Mouse -> TAB-Pointer options -> ปิด Enhance pointer position
  • ยังมีปัญหา(ติดตั้งยังไม่เป็น)เรื่องเน็ตเวิร์กคือ ping จาก DomU ไป Dom0 ได้ แต่ในทางกลับกัน ping ไม่ได้ ยังไม่ทราบว่าต้องตั้งที่ไหน
    จะติดตั้งแบบ NAT เหมือน qemu ก็กลัวเสียความเร็ว เดี๋ยวมีโอกาสค่อยลองอีกทีนึง (แก้ที่ไฟล์ winxp.cfg ตำแหน่ง vif และไฟล์ /etc/xen/scripts/qemu-ifup)

สรุป
ถึงแม้จะยังไม่สมบูรณ์แบบ แต่ก็น่าใช้มาก โดยเฉพาะถ้าต้องการความเร็วในการใช้งาน การติดตั้งก็ไม่ยากเหมือนแต่ก่อน
เสียดายที่ต้องใช้กับซีพียูที่มีโหมด Vitualize เท่านั้น (Intel-VT, AMD-Pacifica) และโอเอสก็ต้องเป็น 32bit ขึ้นไปแบบ Windows XP
ถ้าใช้กับ Win98 ได้นี่จะประหยัดไลเซ่นซ์วินโดวส์เก่า ๆ ได้เยอะเลย

อ้างอิง

debian: บันทึก VirtualBox

หลังจากทดลอง Xen แล้ว พบว่ายังมีปัญหาเกี่ยวกับคีย์บอร์ดที่ค่อนข้างเอาแน่เอานอนไม่ได้ และปัญหาความไม่คุ้นเคยในการใช้เมาส์ผ่าน VNC
จึงได้มาทดลองใช้ VirtualBox
ซีพียูอินเทล E6300 หน่วยความจำ 1G
พบว่า

  • ถ้าใช้กับวินโดวส์ 9x ติดตั้งยาก มีปัญหากับ VGA และถ้าสามารถติดตั้งผ่านแล้ว ความเร็วสู้ qemu -no-kqemu ไม่ได้
  • ถ้าใช้กับวินโดวส์ Xp ความเร็วดีมาก สงสัยว่าจะเร็วกว่า Xen เสียอีก และเสถียรดีมาก ดีกว่า qemu สรุปว่าถ้าเป็น Windows Xp น่าใช้ VirtualBox มาก ๆ

จึงบันทึกการปรับตั้งค่าไว้ดังนี้

มีปัญหาว่าบางครั้ง แม้จะแก้ไขให้เราอยู่ในกลุ่ม vboxusers แล้วก็ตาม แต่บางครั้งก็ยังไม่สามารถรันได้ จึงแก้ไขให้ /dev/vboxdrv เป็นโหมด 666 ผ่าน udev
$ sudo vi /etc/udev/rules.d/60-vboxdrv.rules
แก้จาก KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
แก้เป็น

KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0666"

แก้ไขค่าเน็ตเวิร์ก tun ให้เป็น 666 เหมือนกัน
$ sudo vi /etc/udev/rules.d/020_permissions.rules
แก้เป็น

...
KERNEL=="tun",          MODE="0666"
...

สร้างสคริปต์สำหรับเน็ตเวิร์กแบบกำหนดเอง
$ vi ~/ifup-tap0

sudo iptables -t nat -D POSTROUTING -j MASQUERADE -o eth0
sudo iptables -t nat -A POSTROUTING -j MASQUERADE -o eth0
UNAME=$USER
sudo tunctl -u $UNAME -t tap0
sudo ifconfig tap0 192.168.4.254 up

$ sudo chmod 755 ~/ifup-tap0

ตั้งค่าให้ VirtualBox ใช้เน็ตเวิร์กแบบ Host Interface
Setting -> Network -&gt Host Interface
Interface name : tap0
Setup application : ~/ifup-tap0

สำหรับ Windows XP เขาให้หน่วยความจำปริยายมาเป็น 128M แต่เรากำหนดเป็น 384M

ใน Windows XP ตั้งค่าให้ไอพีเป็น 192.168.1.4 และเกตเวย์เป็น 192.168.4.254

การเมานต์ไฟล์ vdi

ntfs
$ sudo mount -o loop,offset=0x$(hd -h 100000 IMAGE.vdi | grep "eb 52 90 4e 54 46 53" | cut -c 1-8) IMAGE.vdi /MOUNT/POINT
vfat
$ sudo mount -o loop,offset=0x$(hd -h 100000 IMAGE.vdi | grep "eb 3C 90" | cut -c 1-8) IMAGE.vdi /MOUNT/POINT

ที่มา: forums.virtualbox.org: Mounting .vdi file on host

debian: ติดตั้ง OS X Guest ใน VirtualBox

มีงานที่ต้องการทดสอบการแสดงผล ของ Safari/iBooks ใน iPhone/iPad (iOS) และ Mac (OS X) จึงต้องลง OS X เพื่อทดสอบ แอปที่จะใช้ คือ iBooks, iBooks Author และ Xcode ต้องการทรัพยากรเป็น Mavericks (10.9) แต่ Mavericks ไม่มีแผ่นขาย มีขายแต่ Snow Leopard (10.6.3) จึงต้องมีขั้นตอนเยอะหน่อย

ระบบที่ใช้ทดสอบ

host: Debian 3.12-1-amd64
cpu: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
ram: 8G
VirtualBox: Official 4.3

ขั้นตอน

  • 1.ติดตั้ง Snow Leopard (10.6) เพื่อจะสามารถดาวน์โหลด Mavericks (10.9) ได้ และนำมาสร้างเป็นไฟล์ iso เพื่อติดตั้งต่อไป
  • 2.ติดตั้ง Mavericks

ต้องเตรียม

  • ซื้อแผ่น Snow Leopard (10.6) ราคา 620 บาท บวกค่าส่งอีก 300 บาท (ต้องสมัคร/ใช้บัญชี Apple ID)
  • iBoot Ivy Bridge 1.1.0 สำหรับบูตเข้า Snow Leopard (ต้องลงทะเบียน) แตกไฟล์แล้วเก็บไฟล์ iBoot-Ivy-Bridge.iso ไว้ (ถ้าบูตไม่ผ่าน ลองดาวน์โหลด iBoot ตัวอื่นดู)
  • เนื้อที่ว่างของฮาร์ดดิสก์ ประมาณ 30-60 GB

1.ติดตั้ง Snow Leopard

เอา VirtualBox สร้าง Virtual Machine ใหม่ดังนี้

Name: osx
Type: Max OS X
Version: Mac OS X (64 bit)
Memory size: 2048
Hard drive: virtual hard drive 30.00GB VDI (VirtualBox Disk Image) (ค่าปริยาย 20G ไม่พอ)
Storage on physical hard drive: Dynamically allocated

ตั้งค่าอื่น

System: Motherboard: ยกเลิก Enable EFI (special OSes only)

Display: Video: Enable 3D Acceleration

Storage: Controller: SATA -> Empty เปลี่ยน Attributes: Choose a virtual CD/DVD disk file:
    เปลี่ยนเป็น iBoot-Ivy-Bridge.iso ที่เตรียมไว้

ส่วนที่เหลือ ใช้ค่าปริยายทั้งหมด

เสร็จแล้วก็บูตเข้า iBoot ต่อด้วย Snow Leopard เพื่อติดตั้ง

ตอนบูตเข้า iBoot ให้ใส่แผ่น Snow Leopard ในซีดีรอม แล้วเปลี่ยน Devices เป็น Host Drive ATAPI แล้วกด F5 เพื่อรีเฟรช แล้วจึงบูตติดตึ้ง Snow Leopard

Devices -> CD/DVD devices -> Host Drive ATAPI (sr0)
กด F5
บูตด้วย Mac OS X Install DVD

ติดตั้งตามปกติ ระหว่างติดตั้งต้องมีการสร้างพาร์ติชั่นด้วย

Utilities -> Disk Utility
เลือก 32.21 GB VBOX HARDISK -> Partition -> + ->
    Name: osx
    Apply

ติดตั้งต่อจนเสร็จ

บูตเข้าระบบโดยต้องกลับไปใช้ iBoot-Ivy-Bridge อีกครั้ง แล้วเลือกเข้า osx ที่ติดตั้งเสร็จแล้ว
ถ้าบูตไม่ขึ้น ให้ลองปิดและบูตใหม่

หลังติดตั้งเสร็จเรียบร้อย ให้อัปเดตระบบ เพื่อให้มี App Store

Apple -> Software Update

อัปเดตเสร็จ รีบูตใหม่ ระบบจะกลายเป็น 10.6.8 และมี App Store เรียบร้อย

ดาวน์โหลด Mavericks ผ่าน AppStore ขนาดประมาณ 5.3GB (5GiB)
เมื่อเสร็จ ไฟล์ที่ได้จะอยู่ที่ /Applications/Install OS X Mavericks.app

แปลงเป็น iso เพื่อจะนำไปติดตั้งในขั้นตอนต่อไป
เข้า Terminal

Applications -> Utilities -> Terminal

แล้วพิมพ์คำสั่งดังนี้

# Mount the installer image
hdiutil attach /Applications/Install\ OS\ X\ Mavericks.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app

# Convert the boot image to a sparse bundle
hdiutil convert /Volumes/install_app/BaseSystem.dmg -format UDSP -o /tmp/Mavericks

# Increase the sparse bundle capacity to accommodate the packages
hdiutil resize -size 8g /tmp/Mavericks.sparseimage

# Mount the sparse bundle for package addition
hdiutil attach /tmp/Mavericks.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build

# Remove Package link and replace with actual files
rm /Volumes/install_build/System/Installation/Packages
cp -rp /Volumes/install_app/Packages /Volumes/install_build/System/Installation/

# Unmount the installer image
hdiutil detach /Volumes/install_app

# Unmount the sparse bundle
hdiutil detach /Volumes/install_build

# Resize the partition in the sparse bundle to remove any free space
hdiutil resize -size `hdiutil resize -limits /tmp/Mavericks.sparseimage | tail -n 1 | awk '{ print $1 }'`b /tmp/Mavericks.sparseimage

# Convert the sparse bundle to ISO/CD master
hdiutil convert /tmp/Mavericks.sparseimage -format UDTO -o /tmp/Mavericks

# Remove the sparse bundle
rm /tmp/Mavericks.sparseimage

# Rename the ISO and move it to the desktop
mv /tmp/Mavericks.cdr ~/Desktop/Mavericks.iso

คัดลอก Mavericks.iso บน Desktop มาสู่เครื่องจริง (อาจผ่าน usb หรือเน็ตเวิร์ค - ผมใช้ผ่านเน็ตเวิร์ค) เพื่อจะนำไปติดตั้งในขั้นตอนต่อไป

ปิดเครื่อง

จบขั้นแรก

หากต้องการทดสอบ Snow Leopard ต่อไปก็สามารถเก็บ Virtual Machine "osx" นี้ไว้ได้ แต่หากไม่ต้องการใช้แล้วก็ลบทิ้งได้เลย

ที่มา

2.ติดตั้ง Mavericks

เอา VirtualBox สร้าง Virtual Machine ใหม่ดังนี้

Name: osx64
Type: Max OS X
Version: Mac OS X (64 bit)
Memory size: 2048
Hard drive: virtual hard drive 30.00GB VDI (VirtualBox Disk Image) (ถ้าต้องใช้งานจริงจัง ควรเป็น 40G ขึ้นไป)
Storage on physical hard drive: Dynamically allocated

คราวนี้ไม่ต้องใช้ iBoot แล้ว โดยจะใช้ Mavericks.iso ที่ได้จากขั้นตอนก่อนหน้ามาทำเป็น virtual CD/DVD disk file
สำหรับบูตเพื่อติดตั้ง และไม่ต้องยกเลิก EFI แล้ว

ตั้งค่าอื่น

System: Processor: 2 CPU

Display: Video:
    Video Memory: 32 MB (ใช้ค่าอื่นแล้วเปิด System Information ไม่ได้)
    Enable 3D Acceleration

Storage: Controller: SATA -> Empty เปลี่ยน Attributes: Choose a virtual CD/DVD disk file:
    เปลี่ยนเป็น Mavericks.iso ที่เตรียมไว้

ก่อนจะบูต ให้บอก VirtualBox ว่าจะติดตั้งเป็น 64 บิต และเลือกหน้าจอเป็นขนาด 1440x900
เข้า Terminal ของลินุกซ์ แล้วพิมพ์ดังนี้

VM=osx64
N=4    #N can be one of 0,1,2,3,4,5 referring to the 640x480, 800x600, 1024x768, 1280x1024, 1440x900, 1920x1200 screen resolution respectively (5 may not worked).

VBoxManage modifyvm "$VM" --firmware efi64
VBoxManage setextradata "$VM" VBoxInternal2/EfiGopMode $N
VBoxManage setextradata "$VM" VBoxInternal2/SmcDeviceKey "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"

แล้วก็เริ่มสตาร์ท osx64 เพื่อติดต้้งได้เลย บูตครั้งแรกอาจนานหน่อยและมีรายงานความผิดพลาดเยอะ แต่ไม่ต้องสนใจ

วิธีติดตั้งเหมือนเดิม คือต้องพาร์ติชั่นก่อน แล้วติดตั้งต่อจนจบ

ตอนบูตครั้งแรก อย่าลืมเปลี่ยน virtual CD/DVD จาก Mavericks กลับเป็น Host Drive ATAPI (sr0)

จบแล้ว

ที่มา

รายงานผล

  • Snow Leopard: เปิด About this Mac ไม่ได้
  • Mavericks: การรันไม่ค่อยลื่นเท่าไหร่ แต่ก็พอใช้งาน test/debug Safari/iBooks ตามจุดประสงค์หลักได้
  • ใช้ปุ่ม Alt ขวามือ แทนปุ่ม Command ใน Mac
  • Mouse wheel หมุนกลับทางกับของลินุกซ์/วินโดวส์

debian: macOS guest on VirtualBox - create installation media short note.

SYSTEM
OS: Debian Linux 4.18.0-3-amd64
CPU: AMD Ryzen 7 1700 Eight-Core Processor
VirtualBox: virtualbox-5.2 : 5.2.20-125813~Ubuntu~bionic

STEP
1. CREATE VM
2. MODIFY VM
3. BOOT INSTALLER
4. BOOT NEW OS
5. CREATE NEXT VERSION CDR INSTALLER
6. FIX VirtualBox NOT SUPPORT apfs IN High Sierra/Mojave

1. CREATE VM
General
Machine -> New
Name="NAME OF VM"
Type=Mac OS X
Version=Mac OS X (64-bit)

Storage
HDD=NEW VDI DISK IMAGE (20-60G)
CD=CDR INSTALLER

2. MODIFY VM
RUN COMMANDS:

VM_RES="1280x960"	#EXAMPLE
NAME="NAME OF VM"	#EXAMPLE

VBoxManage modifyvm "$NAME" --usbxhci on --firmware efi --chipset ich9 --mouse usbtablet --keyboard usb --vram 128 --cpus 2 --memory 4096 --boot1 dvd --boot2 disk --boot3 none --boot4 none --cpu-profile "Intel Core i7-6700K" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
VBoxManage setextradata "$NAME" "CustomVideoMode1" "${VM_RES}x32"
VBoxManage setextradata "$NAME" VBoxInternal2/EfiGraphicsResolution "$VM_RES"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1

#FOR Snow Leopard: NUMBER OF CPU=1
VBoxManage modifyvm "$NAME" --usbxhci on --firmware efi --chipset ich9 --mouse usbtablet --keyboard usb --vram 128 --cpus 1 --memory 4096 --boot1 dvd --boot2 disk --boot3 none --boot4 none --cpu-profile "Intel Core i7-6700K" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff

#FOR Sierra: SOLVE PARAVIRTUALIZATION BUG
#https://gist.github.com/arobb/447a962af4f07ef81e79987d686275e5
#https://www.insanelymac.com/forum/topic/292170-how-to-spoof-real-mac-in-vmware/
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F22589C8"
VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "CK1156I6DB6"
VBoxManage modifyvm "$NAME" --paravirtprovider none
#REVERT BACK WHEN FINISH INSTALLATION
VBoxManage modifyvm "$NAME" --paravirtprovider default

##SOME USEFUL SETTINGS, DO NOT RUN
##BOOT SINGLE USER
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-s"
##REVERT
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs ""
##TURN OFF
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs " "
##VERBOSE
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-v"
##NO AMD, NO NVIDIA
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-s agc=0 -amd_no_dgpu_accel nv_disable=1"
##DEBUG
#VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-v debug=0x144"

#IF MOUSE OR KEYBOARD DO NOT WORK, TRY TO ADD NEW USB FILTERS

3. BOOT INSTALLER
#STEP
#- ERASE DISK
#- INSTALL
#FOR Mavericks NETWORK MAY NOT WORK, JUST INSTALL LOCALLY, WILL WORK AFTER REBOOT.

4. BOOT NEW OS

5. CREATE NEXT VERSION CDR INSTALLER
#GET PACKAGES FROM SAFARI, DO NOT INSTALL:

#LION
https://itunes.apple.com/app/id444303913?mt=12

#MOUNTAIN LION
https://itunes.apple.com/app/id537386512?mt=12

#MAVERICKS
https://itunes.apple.com/app/id675248567?mt=12

#YOSEMITE
https://itunes.apple.com/app/id444303913?mt=12

#EL CAPITAN
https://itunes.apple.com/app/id1147835434?mt=12

#SIERRA
https://itunes.apple.com/app/id1127487414?mt=12

#HIGH SIERRA
https://itunes.apple.com/app/id1246284741?mt=12

#MOJAVE
https://itunes.apple.com/app/id1398502828?mt=12
#IF FAIL, DOWNLOAD FROM HERE
#http://osxdaily.com/2018/09/29/download-full-macos-mojave-installer/
#http://dosdude1.com/mojave/
#AFTER FINISH INSTALLATION, RE-DOWNLOAD FROM APPLE AGAIN, THEN RE-CREATE INSTALLER FROM MOJAVE

#SOME LINK ARE DEAD, PLEASE DOWNLOAD FROM "iTunes -> Purchased"

#START BUILD
FILE="ElCapitan"	#EXAMPLE
APPDIR="/Applications/Install OS X El Capitan.app"	#EXAMPLE

SIZE=8000

#CREATE IMAGE AND MOUNT
hdiutil create -o /tmp/$FILE -size ${SIZE}m -layout SPUD -fs HFS+J  # -> /tmp/$FILE.dmg
hdiutil attach /tmp/$FILE.dmg -noverify -nobrowse 	# -> /Volumes/untitled

#***** asr METHOD ***** (<=Yosemite, El Capitan(CDR), Sierra)
#MOUNT InstallESD
hdiutil attach "$APPDIR/Contents/SharedSupport/InstallESD.dmg"  # -> /Volumes/OS X Install ESD
ESD="/Volumes/OS X Install ESD"

#FOR <= Yosemite, Sierra:
#RESTORE BaseSystem TO IMAGE
asr restore -source "$ESD/BaseSystem.dmg" -target /Volumes/untitled -noprompt -noverify -erase    #/Volumes/untitled -> /Volumes/OS X Base System

#COPY PACKAGES
rm "/Volumes/OS X Base System/System/Installation/Packages"
cp -av "$ESD/Packages" "/Volumes/OS X Base System/System/Installation/"


#FOR >= Yosemite:
cp -av "$ESD/BaseSystem.dmg" "/Volumes/OS X Base System/"
cp -av "$ESD/BaseSystem.chunklist" "/Volumes/OS X Base System/"

#FOR >= El Capitan(CDR):
cp -av "$ESD/AppleDiagnostics.dmg" "/Volumes/OS X Base System/"
cp -av "$ESD/AppleDiagnostics.chunklist" "/Volumes/OS X Base System/"

#UNMOUNT ALL
hdiutil detach "/Volumes/OS X Base System"
hdiutil detach "$ESD"

#***** createinstallmedia METHOD ***** (El Capitan(VDI), High Sierra, Mojave)
#CREATE INSTALLER TO IMAGE
#FOR El Capitan(VDI) (USE VDI INSTEAD OF CDR - NEED WRITABLE MEDIA WHEN INSTALL), >= High Sierra:
sudo "$APPDIR/Contents/Resources/createinstallmedia" --volume /Volumes/untitled/ --applicationpath "$APPDIR" --nointeraction    #/Volumes/untitles -> /Volumes/Install OS X XXX

#UNMOUNT BASE
hdiutil detach "/Volumes/Install XXX"

#***** END 2 METHOD *****

#RESIZE IMAGE FOR BEST FIT
hdiutil resize -size `hdiutil resize -limits /tmp/$FILE.dmg | tail -n 1 | awk '{ print $1 }'`b /tmp/$FILE.dmg

#CONVERT IMAGE TO CDR
hdiutil convert /tmp/$FILE.dmg -format UDTO -o /tmp/$FILE  # -> /tmp/$FILE.cdr

#COPY TO HOST
scp /tmp/$FILE.cdr USER1@HOST1:/WHERE/TO/STORE/IMAGE

6. FIX VirtualBox NOT SUPPORT apfs IN High Sierra/Mojave

#FOR Mojave FIRST BOOT 
fs1:
cd macOS\ Install\ Data
cd Locked\ Files
cd Boot\ Files
boot.efi

#PREPARE apfs DRIVER FOR NEXT BOOT
#https://github.com/acidanthera/AppleSupportPkg
#AT Debian HOST
mkdir /tmp/tmp
cd /tmp/tmp
wget https://github.com/acidanthera/AppleSupportPkg/releases/download/2.0.5/AppleSupport-v2.0.5-RELEASE.zip
unzip AppleSupport-v2.0.5-RELEASE.zip
cd Drivers/
genisoimage -o ../driver.iso .

#ATTACH /tmp/tmp/driver.iso TO Mojave GUEST OPTICAL DRIVE STORAGE
#BOOT Mojave GUEST
fs1:
load APFSDRIV.EFI
load USBKBDXE.EFI
load APPLEUIS.EFI
map -r
fs1:
cd System\Library\CoreServices
boot.efi
#IF FAILED, TRY TO LOAD JUST APFSDRIV.EFI

#AFTER FINISH INSTALLATION, CREATE startup.nsh FOR NEXT BOOT
#https://forums.virtualbox.org/viewtopic.php?f=22&t=88258&sid=20c97a3fb77e1578f58f3b1fd74460eb&start=15
#https://github.com/img2tab/okiomov/blob/master/macos_okiomov.sh
#AT Mojave GUEST
diskutil list
sudo mkdir /Volumes/efi
sudo mount -t msdos /dev/disk1s1 /Volumes/efi
mkdir -p /Volumes/efi/EFI/DRIVERS
cp -av /Volumes/CDROM/* /Volumes/efi/EFI/DRIVERS/
ls /Volumes/efi/EFI/DRIVERS/ >> /Volumes/efi/startup.nsh
vi /Volumes/efi/startup.nsh
load fs0:\EFI\DRIVERS\APFSDRIV.EFI
load fs0:\EFI\DRIVERS\USBKBDXE.EFI
load fs0:\EFI\DRIVERS\APPLEUIS.EFI
map -r
for %a run (1 5)
  fs%a:
  cd "macOS Install Data\Locked Files\Boot Files"
  boot.efi
  cd "System\Library\CoreServices"
  boot.efi
endfor
#SHUTDOWN GUEST AND DETACH driver.iso
#IF FAILED, TRY TO LOAD JUST APFSDRIV.EFI

##### SOME USEFUL LINK/COMMANDS #####

#IF BOOT FAILED, TRY TO BOOT...
#FROM: fs1:>macOS Install Data\Locked Files\Boot Files\boot.efi
#OR: fs1:>System\Library\CoreServices\boot.efi

#CREATE BOOTABLE INSTALLER
#https://support.apple.com/th-th/HT201372

#SOLVE "Install macOS High Sierra.app does not appear to be a valid OS installer application."
#https://www.reddit.com/r/MacOS/comments/7470rb/install_macos_high_sierraapp_does_not_appear_to/

sudo cp -av /macOS Install Data /Applications/Install macOS High Sierra.app/Contents/SharedSupport

#CREATE High Sierra ISO INSTALLER
#https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/

#REF
#https://github.com/rtrouton/create_macos_vm_install_dmg

#Mojave
#https://astr0baby.wordpress.com/2018/09/25/running-macos-mojave-10-14-on-virtualbox-5-2-18-on-linux-x86_64/
MOJAVE

debian: ทดลองติดตั้ง OpenVZ บน lenny

OpenVZ เป็นซอฟต์แวร์ที่ใช้ทำ virtualization ที่ใช้กับลินุกซ์เท่านั้น
มีข้อแตกต่างจาก xen ตรงที่ใช้เพียงเคอร์เนลเดียว

ข้อดีคือ เร็วและพร้อมใช้
ข้อเสียคือ ไม่มีการ swap หน่วยความจำ ถ้าหน่วยความจำเต็ม โปรเซสที่มาทีหลังจะตายหมด
(แต่ก็ยังมีข้อดีในข้อเสีย คือ openvz จะบริหารการสลับหน่วยความจำระหว่าง guest os อย่างมีประสิทธิภาพ และโปรเซสที่รันอยู่ก่อนที่หน่วยความจำจะเต็ม จะยังคงได้ความเร็วที่เกือบคงที่)

กำหนด
cpu: Intel E2140
mb: ECS P4M890T-M V2.0
ram: 4GB
debian: Lenny
host: server1.example.com, 192.168.1.31, 2.6.26-2-openvz-686
guest-101: test.example.com, 192.168.1.131
vz-partition: /dev/sda9

ติดตั้ง
เริ่มบน lenny

# aptitude install linux-image-2.6.26-2-openvz-686 vzctl vzquota

แก้ไขระบบตามคู่มือ

# vi /etc/sysctl.conf
...
#openvz
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
...

สั่งปรับให้มีผลทันที

# sysctl -p

แก้ระบบเน็ตเวิร์คสำหรับ guest ตามคำแนะนำ

# vi /etc/vz/vz.conf
...
# Controls which interfaces to send ARP requests and modify APR tables on.
#NEIGHBOUR_DEVS=detect
NEIGHBOUR_DEVS=all
...

บูตใหม่

# shutdown -r now

ตรวจผลหลังการบูต

# uname -r
2.6.26-2-openvz-686

สมมุติว่าจะติดตั้งระบบ openvz container ไว้ที่ /dev/sda9 ที่ฟอร์แมตเป็น ext3 ไว้เรียบร้อยแล้ว
สั่งหยุดเพิ่อปรับระบบ

# /etc/init.d/vz stop

แก้ไข fstab เพื่อให้เมานต์ที่ /var/lib/vz อัตโนมัติ

# vi /etc/fstab
...
/dev/sda9       /var/lib/vz     ext3    defaults        0       2
...

ย้ายไฟล์ที่ติดตั้งแล้วมาที่ /dev/sda9 แล้วเริ่ม openvz ใหม่

# mkdir /mnt/tmp
# mount /dev/sda9 /mnt/tmp
# mv /var/lib/vz/* /mnt/tmp
# umount /mnt/tmp
# mount -a
# /etc/init.d/vz start

เนื่องจากค่าไฟล์คอนฟิกของ openvz นั้น ปรับต้้งยากมาก เราเลยจะเอา util ของเขามาใช้เป็นตัวอย่าง
ไปที่ที่เก็บไฟล์คอนฟิก

# cd /etc/vz/conf

สร้างตัวอย่างไฟล์คอนฟิก โดยสมมุติว่าเราจะแบ่งให้เซิร์ฟเวอร์เครื่องนี้มี 4 guest os โดยให้ชื่อไอดี (ของอันแรก) ว่า 101

# vzsplit -n 4 > 101.conf

ปรับแต่งค่าอื่น ๆ ของ guest ตามการกำหนดข้างต้น

# vzctl set 101 --onboot yes --save
# vzctl set 101 --hostname test.example.com --save
# vzctl set 101 --ipadd 192.168.1.131 --save
# vzctl set 101 --nameserver ns1.example.com --save

ติดตั้ง guest os โดยไปดาวน์โหลด template มาจาก debian.systs.org

# cd /var/lib/vz/template/cache/
# wget http://debian.systs.org/ostemplates/debian-5.0-i386-minimal.tar.gz

ติดตั้ง

# vzctl create 101 --ostemplate debian-5.0-i386-minimal

หากต้องการคัดลอก apt source-list ก็สามารถคัดลอกจาก host ไปใช้ได้

# cp /etc/apt/sources.list /var/lib/vz/private/101/etc/apt

เริ่มระบบ

# vzctl start 101 

ตั้งรหัสผ่านของ guest ให้ root

# vzctl exec 101 passwd

ใช้งานผ่าน vzctl

# vzctl enter 102

(ออกด้วย exit)

หรือใช้งานผ่าน ssh

# ssh root@test.example.com

ติดตั้งส่วนของ guest ที่ยังเหลืออยู่

# aptitude update
# aptitude install console-data locales
# dpkg-reconfigure locales
# aptitude upgrade

เสร็จแล้วครับ

ที่มา

debian: บันทึกติดตั้ง WebVZ บน lenny

WebVZ เป็นโปรแกรมจัดการ OpenVZ แบบ web based
ตอนนี้ยังทำอะไรไม่ได้มาก แต่ติดตั้งไว้ก็ดี เผื่อทำงานอะไรเล็ก ๆ น้อย ๆ

สมมุติว่าเครื่องหลักมีไอพี 192.168.1.31

# aptitude install ruby rubygems libsqlite3-ruby sqlite3 rails
# gem install -v=2.1.0 rails    #รอ 1 เพลิน
# ln -sf /var/lib/vz /
# cd /usr/local
# wget http://downloads.sourceforge.net/project/webvz/webvz/webvz%202.0/webvz.2.0.tar.gz
# tar xfz webvz.2.0.tar.gz 
# ln -sf webvz.2.0 webvz
# cd webvz
# ruby script/server -b 192.168.1.31

เครื่องอื่น ๆ ในวง สามารถใช้งานผ่าน url: http://192.168.1.31:3000
user: admin
pass: admin123

เสร็จแล้ว

ที่มา

webvz: ทำ container ใช้เอง

บันทึกการทำ container ใช้เอง ด้วย debootstrap

# aptitude install debootstrap
# cd /var/lib/vz/private
# mkdir 1001
# debootstrap --arch=amd64 lenny 1001 http://server1.example.com:9999/debian
# cp /etc/apt/sources.list 1001/etc/apt/
# chroot 1001
# aptitude install console-data locales ssh screen less vim
# dpkg-reconfigure locales
# passwd
# aptitude update
# aptitude upgrade
# vi /etc/inittab
...
ตัดทิ้ง--------8<---------------------
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
จบตัดทิ้ง--------->8--------------------
...

(อาจติดตั้งแพกเกจ หรือปรับแต่งค่าอื่น ๆ ที่จำเป็นเพิ่มได้)

# exit

เก็บไว้ใช้ในโอกาสต่อไป

# cd 1001
# tar cfz ../debian.tar.gz *

เที่ยวหลังก็สามารถแตกไฟล์ออกมาใช้งานได้ เช่น

# mkdir 1002
# cd 1002
# tar xfz ../debian.tar.gz

เป็นต้น

debian: ทดลองติดตั้ง Xen บน lenny

Xen เป็นซอฟต์แวร์ที่ใช้ทำ virtualization ในทางทฤษฎีสามารถรัน guest os ใด ๆ ก็ได้ โดยมีข้อแม้คือ ซีพียู ต้องรองรับการทำ virtualization ด้วย แต่ถ้าซีพียูไม่รองรับ ต้องใช้กับ os ที่ดัดแปลงให้ใช้กับ xen เท่านั้น

(คราวก่อนติดตั้งเพื่อทดลอง windows แต่เที่ยวนี้จะทำ host)

ข้อดีคือ เร็วพอควร และสามารถ swap หน่วยความจำได้ ทำให้ใช้งานได้เหมือนในระบบลินุกส์ปกติ
ข้อเสียคือ เนื่องจากแยกเคอร์เนลและฮาร์ดแวร์กันอย่างเด็ดขาด จึงทำให้ต้องการฮาร์ดแวร์มากกว่าปกติ และหากหน่วยความจำที่แบ่งให้แต่ละ guest os ไม่พอ xen จะทำการสลับหน่วยความจำลงดิสก์ ทำให้ระบบทำงานช้ามาก (ซึ่งจะมีผลกับทุก ๆ โปรเซสที่ยังค้างอยู่ในหน่วยความจำ คือช้าทั้งระบบ)

กำหนด
cpu: Intel E2140
mb: ECS P4M890T-M V2.0
ram: 4GB
host: server1.example.com, 192.168.1.31
guest-101: test.example.com, 192.168.1.131, bridged
xen-physical-partition: /dev/sda10,xvda
apt-proxy: 192.168.1.3:9999

ติดตั้ง Xen - dom0
เริ่มติดตั้งบน lenny

# aptitude install xen-hypervisor-3.2-1-i386 xen-linux-system-2.6.26-2-xen-686 xen-utils-3.2-1 xenstore-utils xen-shell

จะใช้เน็ตเวิร์กแบบ bridge

# vi /etc/xen/xend-config.sxp
...
# (network-script network-dummy)
(network-script network-bridge)
...

บูตใหม่

# shutdown -r now

ตรวจผลหลังการบูต

# uname -r
2.6.26-2-xen-686

ติดตั้ง domU
สมมุติว่าจะติดตั้ง xen-domU ไว้ที่ฮาร์ดดิสก์จริง /dev/sda10 ที่แบ่งพาร์ติชั่นเป็น ext3 ไว้เรียบร้อยแล้ว โดยจะเมานต์ /dev/sda10 เป็น /dev/xvda ใน xen และแบ่งพาร์ติชั่นต่าง ๆ ของ domU ใน /dev/xvda

# xm block-attach 0 phy:/dev/sda10 xvda w

ใช้ fdisk แบ่งพาร์ติชั่นตามใจชอบ

# fdisk /dev/xvda

ในที่นี้สมมุติว่า /dev/xvda5 เมานต์เป็น /
และ /dev/xvda6 ใช้เป็น swap

ฟอร์แมต ext3 และ swap ตามลำดับ

# mkfs.ext3 /dev/xvda5
# mkswap /dev/xvda6

ใช้วิธีติดตั้งแบบ debootstrap เนื่องจากเร็วกว่าวิธีอื่น
ติดตั้ง debootstrap

# aptitude install debootstrap

ติดตั้ง lenny บน /dev/xvda5 ผ่าน apt-proxy 192.168.1.3:9999
และเนื่องจากซีพียูไม่รองรับการทำ virtualize จึงต้องติดตั้งเคอร์เนลที่แปลงมาใช้กับ xen แล้ว

# mkdir /mnt/tmp
# mount /dev/xvda5 /mnt/tmp
# debootstrap lenny /mnt/tmp http://192.168.1.3:9999/debian
# mount -t proc none /mnt/tmp/proc
# mount -o bind /dev /mnt/tmp/dev
# mount -t sysfs none /mnt/tmp/sys
# cp /etc/apt/sources.list /mnt/tmp/etc/
# ehco 'test.example.com' > /mnt/tmp/etc/hostname
# chroot /mnt/tmp
test# vi /etc/network/interface
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.131
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.3
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.1.3
        dns-search example.com
test# vi /etc/fstab
...
#                
proc            /proc           proc    defaults        0       0
/dev/xvda5      /               ext3    errors=remount-ro 0       1
/dev/xvda6      none            swap    sw              0       0
test# aptitude update
test# aptitude install console-data locales ssh
test# dpkg-reconfigure locales
test# aptitude upgrade
test# aptitude install linux-image-2.6.26-2-xen-686
test# passwd
test# exit
# umount /mnt/tmp/sys
# umount /mnt/tmp/dev
# umount /mnt/tmp/proc
# umount /mnt/tmp
# xm block-detach 0 xvda

สร้างไฟล์คอนฟิก

# vi /etc/xen/101.cfg
#
#  Kernel + memory size
#
kernel      = '/boot/vmlinuz-2.6.26-2-xen-686'
ramdisk     = '/boot/initrd.img-2.6.26-2-xen-686'
memory      = '1024'
#
#  Disk device(s).
#
root        = '/dev/xvda5 ro'
disk        = [ 'phy:sda10,xvda,w' ]
#
#  Hostname
#
name        = 'test.example.com'
#
#  Networking
#
vif         = [ 'bridge=eth0' ]
#
#  Behaviour
#
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

เริ่ม domU - 101.cfg

# xm create 101.cfg

ตรวจสถานะ

# xm list

เข้าใช้งาน domU ด้วย ssh

# ssh root@test.example.com

เสร็จแล้วครับ

ที่มา

ubuntu: ลอง XenOnEdgy

cpu: Intel E6300
mb: Asrock Conroe945G-DVI
ram: 1G

เที่ยวนี้ลองคอมไพล์ซอร์สเอง ไม่ผ่านซักอย่าง เลยใช้แบบไบนารีดีกว่า
ทำตาม wiki.ubuntu.com/XenOnEdgy เกือบทั้งหมด

ติดตั้ง Dom0

เอาแพกเกจที่เกี่ยวข้องมาก่อน
$ sudo apt-get install xen-hypervisor-3.0-i386 xen-image-xen0-2.6.17-6-generic-xen0 xen-utils-3.0
+++ xen-hypervisor-3.0-i386* xen-image-xen0-2.6.17-6-generic-xen0*
xen-ioemu-3.0* xen-utils-3.0*

สร้างแรมดิสก์สำหรับบูตไว้ที่ /boot
$ sudo mkinitramfs -o /boot/xen0-linux-2.6.17-6-generic-xen0.initrd.img 2.6.17-6-generic-xen0

แก้ไขเมนูบูตให้ Xen อยู่อันแรก
$ sudo vi /boot/grub/menu.lst
ของเดิม /boot อยู่ที่ /dev/hda5 และ / อยู่ที่ /dev/hda7

...
title XEN/2.6.17
root (hd0,4)
kernel /boot/xen-3.0-i386.gz
module /boot/xen0-linux-2.6.17-6-generic-xen0 root=/dev/hda7 ro
module /boot/xen0-linux-2.6.17-6-generic-xen0.initrd.img
...

เน็ตเวิร์กยังไม่ได้ลอง เดี๋ยวจะกลับมาลอง

ติดตั้ง WinXP เป็น DomU

ในตัวอย่างของ wiki เขาใช้ลินุกส์เป็น DomU แล้วใช้ disk image เป็นไดร์ฟ
แต่ในที่นี้จะติดตั้ง WinXP โดยแบ่งพาร์ติชั่นจริง ๆ เป็นไดร์ฟ

สร้างไฟล์คอนฟิก ตั้งชื่อว่า winxp.cfg
$ sudo vi /etc/xen/winxp.cfg
พาร์ติชั่นที่ใช้ ผมแยกไปใช้ SATA คือ /dev/sda1

kernel = "/usr/lib/xen-ioemu-3.0/boot/hvmloader"
builder='hvm'
memory = 384
name = "winxp"
vcpus=1
vif = [ 'type=ioemu, bridge=xenbr0' ]
disk = ['phy:/dev/sda1,ioemu:hda,w','phy:/dev/hdb,hdb:cdrom,r']
device_model ='/usr/lib/xen-ioemu-3.0/bin/qemu-dm'
boot='d'
vnc=1
vncviewer=1
serial='pty'
ne2000=0

ก่อนบูตเพื่อติดตั้ง ต้องติด xvncviewer ก่อน
$ sudo apt-get install xtightvncviewer

แล้วก็ลองบูตเพื่อติดตั้งได้เลย ด้วยคำสั่ง
$ sudo xm create winxp.cfg

รีบตามไปดูจอของ WinXP ด้วยการเรียกใช้ xvncviewer
$ xtightvncviewer localhost

ผลการทดลอง
ข้อดีคือ ความเร็วที่เกี่ยวกับฮาร์ดแวร์ดีถึงดีมาก รู้สึกหน่วงนิดเดียว สามารถใช้งานได้อย่างจริงจัง
ข้อเสีย เหมือนเดิม คือการแสดงผลผ่าน VNC มีข้อจำกัดมาก คือ

  • พอยเตอร์ของเมาส์ไม่ตรง ทำให้ขัดความรู้สึก ต้องไปยกเลิกฟังก์ชั่น Enhance pointer precesion ของเมาส์ ถึงจะพอใช้งานได้
  • เวลาเปลี่ยนความละเอียดของ Desktop อาจต้องเริ่ม xtightvncviewer ใหม่

ข้อเสียอื่น ๆ ก็พอยอมรับได้ครับ เมื่อแลกกับความเร็วที่ได้มา

(ลองกับ WinMe ยังไม่ผ่านครับ)

ubuntu: แก้ปัญหาเรื่อง UUID

เนื่องจากอูบุนตูเปลี่ยนการเมานต์ดิสก์ จากเดิมที่กำหนดเป็นค่าดีไวซ์ มาเป็น UUID แทน (เข้าใจว่าเปลี่ยนมาหลายรุ่นแล้ว)
และเนื่องจากผมแบ่งพาร์ติชั่นแยกไว้หลายอัน เพื่อให้ลงได้หลายดิสโตรและสามารถใช้ข้อมูลร่วมกันได้ ทำไปทำมากลัวงง ผมเลยกำหนดค่าให้ไดรฟ์ใหม่ จาก UUID กลับมาใช้เป็น /dev/hda? แบบเก่า
ลองตรวจดูว่าจะใช้ค่าอะไรบ้างด้วยคำสั่ง
$ mount
ปรากฎว่าอูบุนตูแปลงค่าเดิม /dev/hda? กลายเป็น /dev/sda? เสียหมด
ก็เลยต้องปรับแก้ค่าในไฟล์ /etc/fstab จาก UUID=... มาเป็น /dev/sda? ให้หมด

วันนี้จะกลับมาทดสอบ Xen อีกครั้ง งานที่เคยเปลี่ยนค่าพาร์ติชั่นไว้เลยกลายมาเป็นปัญหา เพราะเคอร์เนลของ Xen หาไดรฟ์ sda? ไม่พบ
ทางแก้คือต้องแก้กลับมาเป็น UUID เหมือนเดิม
คำสั่งที่ใช้คือ
$ ls /dev/disk/by-uuid/ -alh

total 0
drwxr-xr-x 2 root root 180 May  9 21:27 .
drwxr-xr-x 5 root root 100 May  9 21:27 ..
lrwxrwxrwx 1 root root  10 May  9 21:27 0e6d39ab-0446-46d6-a6fa-e0d37dc1d73c -> ../../sdb1
lrwxrwxrwx 1 root root  10 May  9 21:27 17905509-63dd-40e5-99fd-6522baa71c13 -> ../../sda9
lrwxrwxrwx 1 root root  10 May  9 21:27 257ff35d-8add-492c-9b76-e3adc11ff7f8 -> ../../sda7
lrwxrwxrwx 1 root root  10 May  9 21:27 2A13-19F4 -> ../../sda1
lrwxrwxrwx 1 root root  10 May  9 21:27 50f0a6d8-10d6-4a6c-b1ff-3508d66f618e -> ../../sda2
lrwxrwxrwx 1 root root  10 May  9 21:27 694d81d4-da76-430c-acb4-78491037055e -> ../../sda8
lrwxrwxrwx 1 root root  10 May  9 21:27 f64defd2-5ebd-4749-947c-b02b55ee4137 -> ../../sda6

แล้วจึงตามแก้ค่าในไฟล์ /etc/fstab และไฟล์ /boot/grub/menu.lst ให้หมด
เมื่อเปลี่ยนกลับมาเป็นรูป UUID=... เรียบร้อยแล้ว ก็จะสามารถบูต Xen ได้อย่างที่ควรจะเป็น

อีกคำสั่งนึงคือ
$ sudo vol_id -u /dev/sda8

694d81d4-da76-430c-acb4-78491037055e

เอามาจาก ubuntuforum แต่ลืมบันทึกครับ

Topic: