Category Archives: Lab

ATA over Ethernet

ว่าจะลองตั้งแต่ 2.6.11 แล้ว ..แต่ไม่มี hardware (i.e. coraid) จนกระทั่งมี vblade ออกมาให้แชร์ storage ทั่วไปบนลินุกซ์ผ่าน AoE ได้ .. ก็ลองสักหน่อยดิ ..

เครื่องที่จะแชร์ storage ลง vblade ซะ แล้วก็

# vblade 0 0 eth0 /path/to/device
  • เลข 0 แรกคือเลข shelf ตั้งตามใจชอบ
  • เลข 0 ที่สองคือเลข slot ตั้งตามใจชอบเหมือนกัน
  • eth0 คือ Ethernet NIC ที่จะใช้
  • แล้วก็ /path/to/device ก็อาจจะเป็น /dev/hda1 หรือ dev อะไรก็ตามที่จะแชร์ผ่าน AoE จะเป็น storage ทั้งลูกหรือเป็น partition ก็ได้

ส่วนเครื่องที่จะ mount AoE storage ก็ลง aoetools ซะ จากนั้นก็

# modprobe aoe
# mount /dev/etherd/e0.0 /path

ตรง e0.0 นี่ 0 แรกคือ shelf และ 0 ตัวที่สองคือ slot ตามที่ตั้งไว้ตอนสั่ง vblade ..

เสร็จแล้น … ง่ายโคตร .. :D

ไหนๆ ก็ไหนๆ จับเวลาสักหน่อย เครื่องที่รัน vblade เป็น P4 3 GHz HT ไดรว์ Parallel ATA ธรรมดา NIC ของ RTL8139 100 Mbps ส่วนเครื่องที่ mount AoE storage ก็ Athlon XP 2000+ ใช้ RTL8139 100 Mbps เหมือนกัน

# hdparm -tT /dev/etherd/e0.0 

/dev/etherd/e0.0:
 Timing cached reads:   1032 MB in  2.00 seconds = 515.23 MB/sec
 Timing buffered disk reads:   12 MB in  3.18 seconds =   3.77 MB/sec

จริงๆ ตอนรันจะมีโวยวายนิดหน่อย (ขออนุญาตตัดทิ้ง) คงเพราะมันไม่ใช่ ATA drive จริงๆ .. เลขที่สนใจคือ buffered disk reads ได้ 3.77 MB/s .. อืม ไม่เร็ว แต่ก็ไม่เลวเหมือนกัน :)

apt-cacher

ใช้ apt-proxy มานาน เพิ่งจะเจอปัญหาหลังจากอัปเกรดเป็น edgy .. แก้ยังไงก็ไม่ดีขึ้น อาการก็แปลกๆ ที่โดน reset connection เกือบจะทุกครั้งที่มันพยายามจะโหลดข้อมูลจาก repositories .. ระยะนี้ก็เลยหาทางเลือกอื่นๆ ..

อันแรกคือ apt-move .. ลองใช้อยู่วันนึงก็พบว่ามันไม่ค่อยได้อย่างที่ต้องการ พยายามแยก dist แยก repo ก็ไม่สำเร็จ .. อันนี้ปัญหาใหญ่เลย เพราะที่ใช้อยู่มันมีทั้ง edgy, edgy-updates, edgy-security, wine, beryl, etc.. เลยโละทิ้งอีก

วันนี้ลอง apt-cacher .. เออ เข้าท่าแฮะ .. สวมรอย apt-proxy ได้เลย ว่าแล้วก็ aptitude purge apt-proxy ไปซะ .. คอนฟิก apt-cacher ก็ไม่ได้ยากอะไร แก้ไฟล์ /etc/apt-cacher/apt-cacher.conf ไม่กี่บรรทัด

daemon_port=9999

พอร์ต default เป็น 3142 .. ไม่จำเป็นต้องเปลี่ยนก็ได้ .. แต่ที่เปลี่ยนเป็น 9999 เพื่อจะสวมรอย apt-proxy ไปเลย ไม่ต้องตามแก้ sources.list เครื่อง clients เกือบๆ โหล .. แล้วก็ตั้ง mapping ตาม repo ที่จะcache ตามนี้

path_map = ubuntu th.archive.ubuntu.com/ubuntu ;
           ubuntu-security th.archive.ubuntu.com/security ;
           wine wine.budgetdedicated.com/apt ;
           beryl ubuntu.beryl-project.org/

สุดท้าย แก้ AUTOSTART ใน /etc/default/apt-cacher จะได้รัน apt-cacher อัตโนมัติตอนบูตเครื่่อง

AUTOSTART=1

ใครอยู่ใกล้ มข. อาจจะมาใช้ cache ด้วยกัน จะได้โหลด package ได้เร็วขึ้นโดยแก้หรือเพิ่มเติม /etc/apt/sources.list ตามนี้

# ubuntu
deb http://belldandy.kitty.in.th:9999/ubuntu/ edgy main restricted  ...
deb http://belldandy.kitty.in.th:9999/ubuntu/ edgy-updates main ...
deb http://belldandy.kitty.in.th:9999/ubuntu-security/ edgy-security main ...

# wine - from budgetdedicated.com
deb http://belldandy.kitty.in.th:9999/wine/ edgy main

# beryl - from beryl-project.org
deb http://belldandy.kitty.in.th:9999/beryl/ edgy main

/me ..

# aptitude --purge-unused purge apt-proxy apt-move

— edited — ลืมแก้ hostname (- -‘)

Edgy + AIGLX + Beryl

ก่อนหน้านี้เคยลอง XGL + Compiz ไปทีนึง แต่มันช้า (บน P-III 1 GHz + i830M) เลยไม่ได้ใช้งานจริง .. ตอนนี้ลง Edgy Efy ติดตั้ง X11 Xorg 7.1.1 มี AIGLX ในตัว เลยลองดูอีกที

ก่อนอื่นเพิ่ม repository

deb http://ubuntu.beryl-project.org/ edgy main-edgy

จากนั้นก็

# aptitude update
# aptitude install beryl emerald-themes

แล้วก็

$ beryl-manager

เสร็จแล้ว ..

เทียบกับ XGL + compiz แล้ว ติดตั้ง Edgy + AIGLX + Beryl ง่ายโคตรๆ เลย .. เวลา้ใช้งานก็ไม่ต้อง restart X Server กันใหม่ ลูกเล่นเพียบ ทำงานเร็วกว่า ใช้ color depth 16-bit ก็ได้ด้วย (XGL + Compiz ต้องใช้ 24-bit) .. ที่ยังต้องหาทางแก้กันต่อคือ video playback ที่ output ผ่าน XV จะเพี้ยนๆ … เลยต้องใช้ output เป็น X11 ธรรมดาซึ่งทำงานช้ากว่ามาก หรือไม่ก็ OpenGL ซึ่งก็ช้าเหมือนกัน .. ถ้าจะดูหนังก็ switch กลับไป metacity เอา :P

Mobile Phone and Linux

ได้ data cable มือถือเป็นมรดกตกทอดมาจากเพื่อนฝูง วันนี้เลยมาลองเสียบใช้บนลินุกซ์ดู เอ่อ เงียบ /dev ไม่มีอะไรใหม่ dmesg ก็ขึ้นแค่ว่ามี device เสียบ แต่ไม่ทำอะไรต่อ .. อย่างน้อยในเบื้องต้นนี้ก็ชาร์จไฟได้ล่ะ :P

สำรวจอยู่พักนึง เจอว่า

$ lsusb
...
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
...

อืมม คงต้องใช้ USB serial converter .. เลยเข้า kernel config ไปเจอ serial converter ของ PL2303 จริงๆ .. คอมไพล์เป็นมอดูล แล้วก็

$ sudo modprobe pl2303

ลอง dmesg อีกที คราวนี้เจอแล้ว

pl2303 1-2:1.0: pl2303 converter detected
usb 1-2: pl2303 converter now attached to ttyUSB0

มันก็จะทำตัวเสมือนเป็น serial device .. ทีนี้ก็หาโปรแกรมมาทดลองใช้ มี gnokii, gnocky, gnome phone manager .. ทั้งสามตัวติดต่อผ่าน /dev/ttyUSB0 ก็เห็นโทรศัพท์เลย มันใช้ AT command ในการติดต่อแฮะ :)

เครื่องโบราณ แต่ใช้ GPRS ได้นะ .. :P

File System over SSH Protocol

ปกติแล้ว Nautilus มันสามารถ connect network drive ผ่านทาง SSH ได้อยู่แล้ว โดยมันจำลองการทำงานเสมือนเป็น file system ผ่านทาง GNOME-VFS ซึ่งแปลว่ามันยังไม่ใช่ file system จริงๆ วันนี้คุยกับพี่ CoolNetClub ในห้อง #tlwg เรื่อง NFS กับ network drive ผ่าน SSH คุ้นๆ ว่าเคยเห็น sshfs แต่ยังไม่เคยลองซะที ก็เลยอาศัยโอกาสนี้ทดลองใช้ซักหน่อย

sshfs

sshfs อาศัย ssh/sftp/scp เป็นช่องทางในการ mount พื้นที่ในเครื่องๆ นึงมาเป็นส่วนนึงของ file system จริงๆ โดยใช้ Filesystem in Userspace (FUSE) ซึ่งเคอร์เนลของลินุกซ์สนับสนุนมาตั้งแต่รุ่น 2.6.14 สำหรับคนทีคอมไพล์เคอร์เนลเองก็ต้องคอนฟิก FUSE_FS=Y หรือ M ก็ได้

หลังจากได้เคอร์เนลที่สนับสนุน FUSE แล้ว ทีนี้ก็ติดตั้ง sshfs กัน .. บน Ubuntu ก็ง่ายหน่อย

# aptitude install sshfs

ซึ่งจะติดตั้ง sshfs พร้อมกับ dependencies (e.g. fuse-utils + libfuse2) ที่จำเป็น

จากนั้นเพิ่ม user ที่ต้องการใช้ FUSE เข้าไปอยู่ใน group fuse .. อันนี้จำเป็นต้องทำเพราะค่าปริยายแล้วโปรแกรมใน userspace มันบังคับให้เฉพาะ user ใน group fuse เท่านั้นที่ execute ได้

# usermod -G fuse -a username

ถ้าแก้ไข user ที่กำลัง login อยู่ อาจจะต้อง logout ออกจากระบบก่อน แล้ว login เข้ามาใหม่ถึงจะเริ่มมีผล

Mount!

สำหรับการใช้งานสำหรับคนที่คอมไพล์ FUSE_FS เป็นเคอร์เนลมอดูลก็สั่ง modprobe ซะก่อน

# modprobe fuse

จากนั้นก็สั่ง mount กัน

$ sshfs [email protected]:/path/ /mount/point/

sshfs ก็จะให้ใส่ password (หรืออาจจะต้องไม่ใส่ถ้าใช้ public-key authentication) พอผ่านขั้นตอน authentication ได้ sshfs ก็จะ mount /path/ บน host.domain.tld มาเป็นส่วนนึงของเครื่องที่เรียกใช้ sshfs .. ลองสั่ง mount ดูสักหน่อย

$ mount
...
...
...
sshfs#[email protected]:/path on /mount/point type fuse (rw,nosuid,nodev,max_read=65536,user=username)

จะเห็นว่า sshfs มัน mount พื้นที่ปลายทางมาเป็นส่วนนึงของ filesystem ของเราเรียบร้อย .. ทีนี้ทดสอบกันด้วยคำสั่งทั่วๆ ไปที่ทำงานกับ filesystem เช่น

$ ls /mount/point/

ก็จะเห็นไฟล์ที่อยู่บนเครื่อง host.domain.tld .. จะก๊อปปี้ไฟล์ ฯลฯ ก็ทำได้สบายๆ ไม่ต้องง้อ NFS

วิธี unmount ก็ใช้คำสั่ง fusermount -u เช่น

$ fusermount -u /mount/point

ปิดท้าย … สังเกตดูจะเห็นว่าการ mount / unmount FUSE ไม่จำเป็นต้องใช้สิทธิของ root เลย … เจ๋ง :D

Genius WizardPen บน Ubuntu Dapper Drake

Dapper ใช้ Xorg 7.0 มีการเปลี่ยนโครงสร้างพอสมควร และกระทบไดรเวอร์ WizardPen ที่ใช้อยู่เหมือนกัน จะคอมไพล์ไดรเวอร์ก็อาจจะต้อง hack นิดหน่อย

อย่างแรก ติดตั้งเครื่องมือในการพัฒนาที่จำเป็น และต้องไม่ลืม imake x11proto-core-dev x11proto-input-dev

โหลดซอร์ส wizardpen มา ตัวล่าสุดใช้ได้ทั้งเมาส์และปากกาแล้ว :D

$ tar xzf wizardpen-0.5.tar.gz
$ cd wizardpen-0.5

ทีนี้ต้องแก้ไฟล์ Imakefile นิดนึง .. ประมาณบรรทัดที่ 5 ให้ลบ

#Include  "/usr/X11R6/lib/X11/config/Server.tmpl"

ออกซะ จากนั้นก็คอมไพล์ตามคำแนะนำ

$ xmkmf
$ make
$ sudo make install

คิดว่าจะเรียบร้อยแล้ว .. ปรากฏว่ามันติดตั้งผิดที่ไปเล็กน้อย .. เลยต้องย้ายไบนารีไปอยู่ให้ถูกที่ถูกทาง

# mv /usr/X11R6/lib/modules/input/wizardpen_drv.o /usr/lib/xorg/modules/input/

จากนั้นใส่ udev rules สักหน่อยให้สร้าง symlink ไปยัง /dev/input/event? ของแท็ปเล็ต

$ vi /etc/udev/rule.d/10-local.rule

ใส่ตามนี้

BUS="usb", KERNEL="event[0-9]", SYSFS{product}="Tablet WP5540U", NAME="input/%k", SYMLINK="tablet"

ทีนี้ก็

/etc/init.d/udev restart
/etc/init.d/gdm restart

เรียบร้อย :)

Customizing Ubuntu 6.06

อัปเกรดเป็น Ubuntu 6.06 LTS Dapper Drake มาพักใหญ่ ตามมาด้วยการติดตั้งใหม่ จดโน้ตเป็น cookbook ของตัวเองได้พอสมควรเหมือนกัน

APT Proxy

เปลี่ยนมาใช้ local apt proxy ที่ belldandy.kitty.in.th เครือข่ายใครใกล้ มข. จะตามมาใช้ด้วยก็ได้ โดยแก้ไฟล์ /etc/apt/sources.list

# dapper drake
deb http://belldandy.kitty.in.th:9999/ubuntu dapper main restricted
deb http://belldandy.kitty.in.th:9999/ubuntu dapper universe multiverse
deb http://belldandy.kitty.in.th:9999/ubuntu dapper-updates main restricted
deb http://belldandy.kitty.in.th:9999/ubuntu dapper-updates universe multiverse
deb http://belldandy.kitty.in.th:9999/ubuntu dapper-security main restricted
deb http://belldandy.kitty.in.th:9999/ubuntu dapper-security universe multiverse

#deb http://th.archive.ubuntu.com/ubuntu dapper main restricted
#deb http://th.archive.ubuntu.com/ubuntu dapper universe multiverse
#deb http://th.archive.ubuntu.com/ubuntu dapper-updates main restricted
#deb http://th.archive.ubuntu.com/ubuntu dapper-updates universe multiverse
#deb http://security.ubuntu.com/ubuntu dapper-security main restricted
#deb http://security.ubuntu.com/ubuntu dapper-security universe multiverse

# kitty - official
deb ftp://ftp.kitty.in.th/pub/ubuntu/kitty dapper unstable

ใครที่ต้องใช้งานเว็บผ่านเว็บพร็อกซี อาจจะต้องแก้ /etc/apt/apt.conf นิดหน่อย

Acquire::http::Proxy "http://my.proxy.server.org:8080";

จากนั้นก็ apt-get update; apt-get upgrade | dist-upgrade กันไป

gconf-editor

ค่าปริยายไม่แสดงในเมนู จะให้ปรากฏก็เข้า Accessories -> Alacarte Menu Editor เข้าไป enable ใน System Tools -> Configuration Editor

Nautilus Things

  1. View
    • Icon View Defaults -> Default Zoom Level: 75%
    • Use compact layout – checked
    • List View Defaults -> Default Zoom Level: 50%
  2. Preview
    • Show text in icons -> Never
    • Only for files smaller than: 1 MB
    • Preview sound files -> Never
  3. ส่วนใน gconf ก็จะตั้งค่าพวกนี้ไว้
    • /apps/nautilus/preferences/always_use_browser – unchecked อยากใช้ spatial มากกว่า
    • /apps/nautilus/preferences/desktop_is_home_dir – checked เอา $HOME มาเป็น desktop ไปเลยสะดวกดี
    • /apps/nautilus-cd-burner/burnproof – checked เวลา burn แผ่นจะได้มี error น้อยลง
    • /apps/nautilus-cd-burner/overburn – checked เผื่อ burn แผ่นเกินความจุมาตรฐาน

System Preferences Things

ค่าโดยปริยายยังขาดๆ เกินๆ .. ชอบมั่งไม่ชอบมั่ง ก็เลยปรับๆ ตามใจ

  • เพิ่มคีย์บอร์ดเลย์เอาต์ภาษาไทย Keyboard -> Layouts -> Add … -> Thailand -> TIS-820.2538
  • เปลี่ยนคีย์สลับภาษา Keyboard -> Layout Options -> Group Shift/Lock behavior -> Alt+Shift changes group – checked
  • เปลี่ยนปุ่มลัด กดปุ่มวินโดว์สเลือกเมนูหลัก Keyboard Shortcuts -> Show the panel menu -> Windows Key (Super_L)
  • แสดงเฉพาะไอคอนบนทูลบาร์ Menus & Toolbars -> Toolbar button labels: Icons only
  • เปลี่ยนพฤติกรรมการทำงานของสารพัด Removable Drives and Media -> Multimedia, Cameras, PDAs, Printers & Scanners, Input Devices -> unchecked all
  • ปิดการทำงานของ ESD ตอนเริ่มทำงาน Sounds -> Enable software sound mixing (ESD) – unchecked
  • ปิดเสียง beep System Beep -> Enable system beep – unchecked
  • เลือกหน้าต่างเมื่อเลื่อนเมาส์ Window -> Select windows when the mouse moves over them – checked

OpenOffice.org

เพื่อประสิทธิภาพในการทำงานมีคนแนะนำว่าให้ตั้งค่าประมาณนี้ (จำไม่ได้แล้วว่าเอามาจากไหน – -)

  1. Tools -> Options -> Memory
    • Undo: Number of steps = 20
    • Graphic cache: User for OpenOffice.org = 64
    • Memory per object = 16
    • โหลด OO.o เร็วขึ้น OpenOffice.org quickstarter -> Load OpenOffice.org during system start-up -> checked .. ทำแล้วจะมีโปรแกรม Quick Starter ฝังอยู่ในหน่วยความจำประมาณ 20 MB
  2. ถ้าเมนูหรือ UI แสดงผลเพี้ยน เลือก Tools -> Options -> View -> Use system font for user interface -> unchecked อาจจะดีขึ้น
  3. เปลี่ยนขนาดไอคอนบนทูลบาร์ Tools -> Options -> View -> Icon Size and Style -> Small

hdparm

ปกติ DMA ทำงานอยู่แล้ว เลยทำแค่เพิ่ม multicount ใช้ 32-bit I/O และปิด power management .. แก้ไฟล์ /etc/hdparm.conf เพิ่ม

command_line {
       hdparm -q -m16 -q -c1 -q -B255 -q -C /dev/hda
}

Firefox

ให้ไวๆๆๆ ช่อง URL ใส่ about:config

  • ปิดการทำงานของ IPv6 network.dns.disableIPv6 true
  • ปิการทำงานของ IDN network.enableIDN false
  • เพิ่มค่า connection สูงสุด network.http.max-connections 64
  • เพิ่มค่า connection สูงสุด/เซิร์ฟเวอร์ network.http.max-connections-per-server 32
  • เพิ่มค่า persistent connection สูงสุด/พร็อกซี network.http.max-persistent-connections-per-proxy 16
  • เพิ่มค่า persistent connection สูงสุด/เซิร์ฟเวอร์ network.http.max-persistent-connections-per-server 8
  • ใช้ไปป์ไลน์ network.http.pipelining true
  • ใช้ไปป์ไลน์กับพร็อกซี network.http.proxy.pipelining true
  • จำนวนไปป์ไลน์สูงสุด network.http.pipelining.maxrequests 8

Packages

ที่ลงเพิ่มไปก็หลายตัวเหมือนกัน

  • acroread
  • beep-media-player
  • blender yafray
  • build-essential devscripts lintian dh-make fakeroot dpatch patch
  • celestia-gnome
  • chkrootkit
  • configure-debian
  • devhelp
  • dosbox
  • flashplugin-nonfree
  • gkrellm gkrellm-volume gkrellmwireless
  • glade libglade2-dev libgtk2.0-dev autoconf automake1.4
  • gnumeric
  • gqview libjpeg-progs
  • gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg gstreamer0.10-pitfdll
  • gvim vim-gtk
  • i810switch
  • leafpad
  • libimage-exiftool-perl
  • libthai0 libthai-dev pango-libthai
  • mplayer-nogui
  • mrxvt
  • nvidia-glx
  • quarry
  • synergy
  • tetex-extra
  • vlc
  • xine-ui libxine-extracodecs

Opera

นอกจากต้องลง lesstif2 แล้วก็จะต้องลง xlibs ด้วย ใน Dapper จะไม่มี xlibs แล้วให้ใช้ของ Breezy แทน

LAMP

ถ้าติดตั้งด้วยแผ่น Server จะมีเมนูสำหรับติดตั้ง LAMP ได้เลย .. แต่ถ้าใช้แผ่นอื่นแล้วจะติดตั้งเพิ่มก็แค่

$ apt-get install php5-mysql mysql-server-5.0

ที่เหลือ apt จะหามาให้เอง

PDF Printer

หลายขั้นตอนหน่อย เริ่มจากติดตั้ง CUPS-PDF

$ sudo apt-get install cups-pdf

กำหนดสิทธิของไบนารีเป็น u+s

$ sudo chmod u+s /usr/lib/cups/backend/cups-pdf

Add printer -> Local -> PDF Printer

Driver Generic -> color postscript printer, rev3a

ไดรเวอร์จะบันทึกเป็นไฟล์ไว้ใน $HOME/PDF ถ้าอยากให้ไปอยู่ที่อื่นก็แก้ใน /etc/cups/cups-pdf.conf บรรทัด Out ได้

เวลาสั่งพิมพ์ไม่ต้องเลือก print to file ไดรเวอร์จะบันทึกเป็นไฟล์ให้เอง

Java 5.0 JRE

ติดตั้งก่อน

$ sudo apt-get install sun-java5-plugin sun-java5-fonts
  • Firefox ควรจะทำงานได้หลังจากเปิดโปรแกรมขึ้นมาใหม่
  • Opera ต้องตั้งค่านิดหน่อย Tools -> Preferences -> Advanced -> Content
    • Enable java – checked
    • Java options -> set path เป็น /usr/lib/jvm/java-1.5.0-sun-1.5.0.06/jre/lib/i386/

Scanning AP and Orinoco-based WIFI

WiFi ที่ใช้ชิป Orinoco/Hermes หลังจาก monitor mode ได้ ก็ทำ scanning หา access point ได้พักนึงแล้ว (น่าจะราวๆ kernel >= 2.6.14 หรือ 2.6.15) โดยใช้คำสั่ง

# iwlist eth1 scanning
eth1      Scan completed :
          Cell 01 - Address: 00:80:C8:AD:1A:8D
                    ESSID:"CoE_Office"
                    Mode:Master
                    Frequency:2.437 GHz (Channel 6)
                    Signal level:-36 dBm  Noise level:-92 dBm
                    Encryption key:off
          Cell 02 - Address: 00:0B:0E:1D:82:00
                    ESSID:"kku-wifi"
                    Mode:Master
                    Frequency:2.462 GHz (Channel 11)
                    Signal level:-63 dBm  Noise level:-85 dBm
                    Encryption key:off
          Cell 03 - Address: 00:0B:0E:1D:82:02
                    ESSID:"kku-wifi-s"
                    Mode:Master
                    Frequency:2.462 GHz (Channel 11)
                    Signal level:-63 dBm  Noise level:-85 dBm
                    Encryption key:on
...

ก่อนจะ scan อาจจะต้อง

# iwconfig eth1 essid off

ซะก่อน .. ไม่งั้นอาจจะ scan ไม่เจอ หรือเจอแค่ตัวที่ associate อยู่ตัวเดียว

QEMU Virtualization

Full virtualization

ในที่สุด QEMU ก็ทำ full virtualization เสียที เร็วขึ้นเป็นกองเลย .. โหลด โหลด qemu >= 0.8.1 + kqemu >= 1.3.0pre7 มาก่อน จากนั้นก็มา build กัน สำหรับบน debian/ubuntu ลง build-essential + gcc 3.x + libsdl-dev ไว้ก่อน ขาดเหลืออะไรก็หามาใส่ให้ครบๆ ละกัน จากนั้นก็

tar -xzf  qemu-0.8.1.tar.gz
cd qemu-0.8.1
./configure --cc=gcc-3.4
make
sudo make install

ใส่ออปชันนิดหน่อย ให้ใช้ gcc 3.x คอมไพล์ เพราะ QEMU คอมไพล์กับ gcc 4 แล้วมีปัญหา (QEMU จะเตือนถ้าพยายามใช้ gcc 4.x)

เสร็จเรียบร้อย ทีนี้ก็เป็นคิวของ kqemu .. อ่อมันเป็นเคอร์เนลมอดูล อาจจะต้องลง kernel-header ด้วยนะ

tar -xzf kqemu-1.3.0pre7.tar.gz
cd kqemu-1.3.0pre7
./configure
make
sudo make install

อ่อ ไม่ต้องแปลกใจว่าทำไมไม่ใช้ --cc=gcc-3.x เพราะ keqmu จะคอมไพล์เป็นเคอร์เนลมอดูล เวลาจะคอมไพล์ควรจะใช้ gcc ตัวเดียวกับเคอร์เนล ไม่ใช่ตัวเดียวกับ qemu .. ทีนี้ก็

$ sudo modprobe kqemu major=0

อาจจะต้อง chmod เล็กน้อย

$ sudo chmod 666 /dev/kqemu

ทีนี้ก็ใช้ virtualization ได้แล้ว โดยใส่ -kernel-kqemu

$ qemu -kernel-kqemu -hda winxp.img

แน่นอนพอเป็น virtualization host OS กับ guest OS จะต้องรันบนแพล็ตฟอร์มเดียวกัน และตอนนี้ QEMU virtualization ไม่ได้สนับสนุน OS ทุกตัว โดยเฉพาะตัวเก่าๆ .. ที่ลองใช้งานผ่าน virtualization ได้ก็มี Windows 2000/XP, Ubuntu 5.10, Fedora Core 2, FreeBSD 4.11 OS ที่ใหม่กว่านี้น่าจะใช้ virtualization ได้ทุกตัว

ทดสอบหยาบๆ บูต OS หลายๆ ตัวบน peorth (Pentium III Mobile 1 GHz) เทียบระหว่างใช้ kqemu เฉยๆ (native memory management) กับ virtualization ก็ได้ผลตามตาราง (หน่วยเป็นวินาที)

Guest OS kqemu virtualization
Windows 2000 63 39
Windows XP 100+ 40
Ubuntu 5.10 204 80
FreeBSD 4.11 10 8

มีข้อสังเกตว่าเวลารัน qemu ปกติจะเห็น CPUID เป็น Pentium II ส่วน virtualization จะเห็น CPUID เป็น CPU ของเครื่องเลย .. ที่พบอีกอย่างคือผลของการปรับ real-time clock frequency .. qemu แนะนำว่าให้ใช้เคอร์เนล 2.6 หรือตั้ง max-user-freq = 1024 พอลองตั้งดูปรากฏว่าลินุกซ์กับบีเอสดีทำงานเร็วขึ้น ในขณะที่ Windows ช้าลงไปมาก โดยเฉพาะ Windows 2000 นั่นแทบบูตไม่ขึ้น และในทางตรงข้าม ถ้าใช้ max-user-freq เป็นค่า default (64) ลินุกซ์ช้าลงเล็กน้อย ส่วน Windows ทำงานเร็วกว่าเดิมเยอะจนเห็นได้ชัด … YMMV

Overlay Image

QEMU ทำ overlay image ได้ด้วยนะ .. หมายความว่าใช้ image ตัวนึงเป็น base ขณะทำงานถ้ามีการบันทึกข้อมูลที่ต่างไปจาก base จะบันทึกเก็บลง overlay image แทน เหมาะมากสำหรับใครที่ต้องการทดลองอะไรแผลงๆ (e.g. penetration test, virus/malware test) เพราะ base image จะคงเดิมไปตลอด ถ้าใช้จนระบบเละเทะก็ลบ overlay image ทิ้งแล้วสร้างใหม่ก็จะได้ระบบเฟรชๆ กลับมาโดยไม่ต้องติดตั้งกันใหม่ หรือจะทำ overlay image หลายๆ สำเนาจะได้จำลองเครื่องหลายๆ เครื่องพร้อมกันโดยไม่ต้องใช้ image โตๆ ก็ได้ .. แจ่มแมวมั่กๆ :D … วิธีสร้าง overlay image ก็ไม่มีอะไรยาก

$ qemu-img create -b winxp.img -f qcow winxp.ovl

ทีนี้เวลาทำงานก็โหลด overlay image แทน

$ qemu -kernel-kqemu -hda winxp.ovl

Networking

เมื่อเทียบกับเวอร์ชัน 0.7 กว่าๆ แล้ว QEMU รุ่นปัจจุบันจัดการระบบเครือข่ายได้ง่ายขึ้นและหลากหลายขึ้นเยอะ .. โดยปริยาย QEMU จะจำลอง DHCP, DNS, SMB server ให้ในตัวพร้อมกับ Firewall/NAT ให้เรียบร้อย guest OS บูตมาก็ใช้งานอินเทอร์เน็ตได้เลย โดย QEMU กำหนดให้ Firewall/NAT/DHCP ใช้ไอพีแอดเดรส 10.0.2.2 ส่วน DNS กับ SMB ใช้ไอพีแอดเดรส 10.0.2.3 และ 10.0.2.4 ตามลำดับ

กรณีที่ต้องการให้ host OS สามารถสื่อสารกับ guest OS ก็มี TAP interface เชื่อมได้

$ sudo modprobe tun
$ sudo chmod 666 /dev/net/tun
$ qemu -kernel-kqemu -net nic -net tap -hda freebsd6.ovl

บรรทัดแรกโหลดเคอร์เนลมอดูล tun สำหรับอินเทอร์เฟซ TUN/TAP จากนั้นก็ตั้ง permission เพื่อให้ user ใช้งาน TUN/TAP ได้ สุดท้าย เรียก qemu โดยใช้ -net nic (emulate NIC) และ -net tap .. อินเทอร์เฟซ tap0 บน host OS จะเชื่อมอยู่บน VLAN เดียวกันกับ emulated NIC ใน guest OS ตั้ง IP ให้อยู่ในเครือข่ายเดียวกันก็ติดต่อกันได้ .. QEMU ใช้สคริปต์ /etc/qemu-ifup คอนฟิก tap0 โหลดสคริปต์ได้จาก linux-test-x.x.x.tar.gz ถ้าไม่อยากโหลดไฟล์ใหญ่ๆ จะเขียนสคริปต์เองก็ได้

#!/bin/sh
sudo /sbin/ifconfig $1 192.168.0.1

สคริปต์นี้จะสร้างอินเทอร์เฟซ tapN และกำหนดไอพีแอดเดรส เป็น 192.168.0.1/24 ส่วนใน guest OS ตั้งไอพีแอดเดรสเป็น 192.168.0.x/24 ไอพีแอดเดรส 192.168.0.1 และ .2 ก็จะรับส่งข้อมูลหากันได้ .. เรื่อง network ของ QEMU ค่อนข้างยาว ถ้ามีโอกาสไว้ค่อยลงรายละเอียดกัน

ทิปเล็กน้อย

เวลาติดตั้ง Windows 2000 บน qemu ต้องใส่ออปชัน -win2k-hack ไปด้วย และถ้าจะติดตั้ง Windows 2000 หรือ XP ห้ามใช้ -kernel-kqemu ตอนที่ติดตั้งเพราะมันจะ BSOD (ติดตั้งให้เสร็จแล้วค่อยใช้ได้) ทั้ง Windows 2000 และ XP ขณะติดตั้งให้ขยับเมาส์ไปๆ มาๆ เรื่อยๆ หรือถ้ามีหน้าต่างแสดงผลก็ให้ลาก ไปๆ มาๆ ไม่งั้นเวลาติดตั้งไปเรื่อยๆ สักพักมันจะนิ่งไปเลย ไม่แฮงค์ ไม่แครช ไม่กินซีพียู หน้าจออัปเดตเรื่อยๆ แต่ไม่ติดตั้งต่อซะงั้น (ประหลาด :P) ..

ถ้าขี้เกียจ chmod 666 /dev/kqemu ทุกครั้ง เดิมใน Ubuntu จะเพิ่ม rule ใน /etc/udev/permission.d/ ตอนนี้มันไม่มีแล้ว ให้สร้างไฟล์ /etc/udev/rules.d/50-kqemu.rules แทน ตามนี้

# kqemu
KERNEL="kqemu", NAME="%k", MODE="0666"

ทีนี้เวลา modprobe kqemu udev จะตั้ง permission เป็น 666 ให้อัตโนมัติ ไม่ต้อง chmod เอง

QEMU เฉพาะเวอร์ชัน 0.8.1 ที่ทดสอบก็เร็วกว่า 0.7 ที่เคยใช้พอสมควรแล้ว พอทำ full virtualization เข้าไปอีกก็ทำงานได้เร็วใกล้ native มากขึ้นไปอีก น่าใช้ขึ้นอีกเยอะ :)

V-Gear TalkCam

ที่บ้านมี v-gear talkcam อยู่ตัวนึง เลยเอามาลองใช้กับลินุกซ์ซักหน่อย .. เสียบสาย USB ปุ๊บ .. เงียบ .. สงสัยต้องออกแรงสักหน่อย เริ่มจาก lsusb ก็เห็นว่า

Bus 001 Device 003: ID 0ac8:0302 Z-Star Microelectronics Corp. ...

เอา ID ไปกูเกิ้ล ตามด้วยคำว่า linux .. เจอแวบๆ ว่าใช้ spca5xx ได้ อะฮ้า โหลดเลยครับ.. spca5xx คอมไพล์เป็นเคอร์เนลมอดูลได้เลย ลง kernel-header น่าจะพอ ไม่ต้องลงเคอร์เนลซอร์สมาแพตช์

เอาล่ะ ลงมือได้

$ tar -xzf spca5xx-20060501.tar.gz
$ make
$ sudo make install

เรียบร้อยแล้วก็ทดลองใช้งานกัน

$ sudo modprobe spca5xx

ไฟ V-Gear TalkCam ติดแล้ว … เปิด ekiga คลิกที่กล้อง ภาพก็ปรากฏ :D .. ใครจะซื้อกล้องรุ่นนี้มาใช้ก็อุ่นใจได้ละ :)