Category Archives: Lab

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 .. ใครจะซื้อกล้องรุ่นนี้มาใช้ก็อุ่นใจได้ละ :)

BIND 9 on FreeBSD 4.x

BIND 9 ?

ที่จริงก็ไม่ได้อยากอัปเกรดเท่าไหร่ แต่ทางศูนย์คอมพิวเตอร์เขาขอมา เลยจัดให้ :P .. จะว่าไปแล้ว BIND 9 ก็น่าสนใจตรงที่มันใช้ rndc + chroot ได้ และมีความปลอดภัยสูงขึ้น .. ถ้าเป็น FreeBSD >= 5.3 เข้าใจว่ามี BIND 9 มาให้เลย ส่วน FreeBSD 4.x และ 5.x < 5.3 นี่ต้องติดตั้งจาก ports เอา

เริ่มติดตั้ง

# cd /usr/ports/dns/bind9
# make
# make install

เซ็ตอัป rndc

rndc ใช้ irq มาทำเป็น entropy pool ยิ่งอุปกรณ์มีข้อมูลเข้า/ออก random มากๆ ยิ่งดี เขาแนะนำให้ใช้ irq ของ keyboard, mouse, disk, หรือ network interface cards .. ผมไม่ค่อยแนะนำให้ใช้ keyboard/mouse เท่าไหร่ เพราะพวกเซิร์ฟเวอร์หลายๆ ตัวไม่ได้ต่อไว้ด้วยซ้ำ ข้อมูลอาจจะไม่ random อย่างที่ต้องการ .. เลือก disk หรือ network interface cards น่าจะดีกว่า

# grep -i irq /var/run/dmesg.boot

เพิ่ม irq เป็น entropy pool ของ rndc

# rndcontrol -s 12
# rndcontrol -s 14

ถ้าจะให้ใช้ได้ตั้งแต่ boot ก็แก้ /etc/rc.conf เพิ่ม

rand_irqs="12 14"

จากนั้นก็สร้าง config ของ rndc

cd /usr/local/etc
rndc-confgen > rndc.conf

แล้วก็สร้าง key

rndc-confgen -a

จะได้ไฟล์ rndc.key แล้วก็แก้ rndc.conf อีกนิดหน่อย เพื่อเอา key ใน rndc.key มาใส่

vi /usr/local/etc/rndc.conf

options {
     default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
};

server 127.0.0.1 {
    key "rndc-key";
}

ก๊อป key “rndc-key” {…} จาก /usr/local/etc/rndc.key มาใส่ใน /usr/local/etc/rndc.conf เป็นอันเสร็จเรื่องของ rndc

เซ็ตอัพ BIND 9

ถ้าใช้ BIND 8 มาก่อน เอา config และ zone files ของ BIND 8 มาแก้นิดๆ หน่อยๆ แล้วใช้กับ BIND 9 เลยก็ได้ ดังนั้น ก๊อปปี้ named.conf ของ BIND 8 มาไว้ที่ /usr/local/etc/named.conf แล้วก็แก้อีกนิด เพื่อเอา rndc มาใช้

include "/usr/local/etc/rndc.key";

controls {
    inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key" };
};

และใน options { … } เพิ่ม pid-file ” … ” กับ dump-file ” … ” เข้าไปด้วย

options {
    ...
    directory "/path/to/namedb"
    pid-file "/path/to/namedb/named.pid"
    dump-file "/var/tmp/named_dump.db"
    ...
};

เสร็จแล้ว อย่าลืมเช็ค zone {… } กับ zone file ให้ตรงกัน

แก้ไฟล์เสร็จก็ เปลี่ยน owner/groups ของไฟล์เป็น uid ที่จะรัน named .. ปกติจะใช้ user bind รัน named ก็

chown -R bind:bind /path/to/namedb
chmod 750 /path/to/namedb

เช็ค named.conf

named-checkconf /usr/local/etc/named.conf

ทดสอบ

/usr/local/sbin/named -c /usr/local/etc/named.conf -u bind -g

ถ้า named รันได้โดยไม่มี error/warning ก็เป็นอันเรียบร้อย … สุดท้ายก็แก้ /etc/rc.conf

vi /etc/rc.conf
named_enable="YES"
named_program="/usr/local/sbin/named"
named_flags="-c /usr/local/etc/named.conf -u bind"

ทีนี้ตอน boot ก็จะรัน BIND 9 แทน BIND 8 .. เสร็จแล้ว :)

ลง MS Windows 2000/XP บน QEMU

มีเหตุต้องใช้ Windows 2000/XP สำหรับเดโมในห้องเรียนพร้อมๆ กับลินุกซ์เลยเอา QEMU มาใช้ .. QEMU เป็นโปรแกรมที่จำลองการทำงานของซีพียูและระบบ ปัจจุบัน QEMU จำลองการทำงานของคอมพิวเตอร์ x86 กับ PowerPC ได้ทั้งระบบ และจำลองซีพียูได้สารพัด ทั้ง x86, x86-64, PowerPC, ARM และ SPARC .. เพราะเป็นการจำลองการทำงานย่อมช้ากว่าระบบจริงๆ อยู่แล้ว แม้จะจำลอง x86 บน x86 จริงๆ ก็ตาม แต่ก็ทนๆ เอา เพราะใช้เป็นครั้งคราวเท่านั้น

ติดตั้ง QEMU

Debian/Ubuntu ติดตั้งผ่าน APT ได้เลย ..

# apt-get install qemu

การทำงานของ QEMU นับถึงเวอร์ชัน 0.7.0 จะใช้ดิสก์อิมเมจในการจำลองเป็นฮาร์ดดิสก์ของระบบ ดังนั้นขอให้มีที่ว่างๆ ในพาร์ทิชันมากพอที่จะใช้เป็นดิสก์อิมเมจก็ใช้งานได้ โดยไม่ต้องแบ่งพาร์ทิชันกันใหม่ .. หาพื้นที่ว่างๆ ให้มากพอจะติดตั้ง Windows 2000 … Windows 2000 ติดตั้ง default ใช้พื้นที่ราวๆ 600-700 MB + เผื่อติดตั้งซอฟต์แวร์อื่นๆ อีกนิดหน่อย ก็สัก 1.5 – 2 GB น่าจะพอ สั่งสร้างดิสก์อิมเมจโดยสั่ง

$ qemu-img create disk.img 2G

คำสั่งนี้จะสร้างดิสก์อิมเมจสำหรับทำงานเสมือนเป็นฮาร์ดดิสก์ขนาด 2 GB .. ทีนี้เริ่มติดตั้ง Windows 2000 ได้โดยใส่แผ่นติดตั้งของ Windows 2000 ไว้ใน CDROM แล้วสั่ง

$ qemu -hda disk.img -cdrom /dev/cdrom -boot d

คำสั่งนี้เป็นการสั่ง qemu ให้จำลองคอมพิวเตอร์ x86 ทั้งระบบโดย

-hda disk.img เป็นการบอกให้ QEMU ใช้ไฟล์ disk.img เป็น Primary Master IDE disk หรือ ไดรว์ C:

-cdrom /dev/cdrom เป็นการบอกให้ QEMU จำลอง CDROM โดยใช้ /dev/cdrom CDROM จะเป็น Secondary Master หรือ ไดรว์ D: เสมอ

-boot d เป็นการสั่งให้ boot จาก CDROM

ทีนี้ QEMU ก็จะเริ่มต้นจำลองระบบ x86 แล้วก็ boot จาก CDROM ขั้นตอนที่เหลือก็จะเหมือนกับการติดตั้ง Windows 2000 ทั่วๆ ไป

First Boot !

หลังจากติดตั้งเสร็จแล้ว ทีนี้เราก็สามารถสั่ง

$ qemu -hda disk.img -cdrom /dev/cdrom -boot c

เพื่อบูต Windows 2000 ที่ติดตั้งไปตะกี้ .. ถ้าไม่จำเป็นต้องใช้ CDROM ก็ไม่จำเป็นต้องใส่ออปชัน -cdrom /dev/cdrom ก็ได้

ลองดู System Properties/Hardware กับ Device Manager ก็ได้รายละเอียดออกมาประมาณนี้

CPU: x86 Family 6 Model 3 Stepping 3 ~ Pentium II 233 MHz
Chipset: Intel 441FX
Bus: PCI
Display: Cirrus Logic 5446
Disk: IDE
CDROM: IDE
NIC: RealTek 8029 Ethernet NE2000 Compatible

มี NICs ก็ย่อมจะใช้งานเครือข่ายได้ :)

Networking

QEMU จำลองการเชื่อมต่อเครือข่ายโดยใช้ Tunnel Inteface เชื่อมเข้ากับ NICs ที่จำลองขึ้นมา ถ้าจะให้ Windows 2000 หรือ OS อะไรก็ตามบน QEMU ใช้งานเครือข่ายได้ ก็ต้องทำให้ลินุกซ์สนับสนุน TUN/TAP ก่อน เคอร์เนลส่วนใหญ่จะคอมไพล์ให้ TUN/TAP เป็น modules ไว้อยู่แล้ว ก็จะสามารถสั่ง

# modprobe tun

แล้วลอง

$ ifconfig tun0

ถ้า ifconfig แสดงข้อมูลของอินเทอร์เฟซ tun0 ขึ้นมาก็ถือว่าใช้งาน tunnel ได้แล้ว อย่างไรก็ตาม ถ้าต้องการใช้ QEMU ด้วย non-root accout อาจจะต้องแก้ group / permission ของ /dev/net/tun สักหน่อย เพื่อให้ผู้ใช้ใน group users สามารถอ่านเขียนผ่าน TUN ได้

# chgrp users /dev/net/tun
# chmod 660 /dev/net/tun

อาจจะมีบางกรณีที่ ifconfig tun0 แล้วได้ error ขึ้นมา แม้จะเป็น root แล้วก็ไม่สามารถใช้งาน /dev/net/tun ได้ แบบนี้ก็มีทางแก้โดยใช้โปรแกรม tunctl ซึ่งเป็นหนึ่งในชุด utilities ของ UML (User-Mode Linux นะ ไม่ใช่ Unified Modeling Language) ..

# apt-get install uml-utilities

ทุกครั้งที่จะใช้ tunnel ก็ใช้ tunctl ในการควบคุมการใช้งาน เช่น

# tunctl -u 'user' -t tun

คำสั่งนี้จะสร้างอินเทอร์เฟซ tun0 และกำหนด owner เป็นให้เป็น username ‘user’ ลอง ifconfig tun0 อีกที หนนี้ไม่ควรจะเกิด error แล้ว (ถ้ายังเกิดอีกก็ตัวใครตัวมัน)

หลังจากมีอินเทอร์เฟซ tun0 แล้วทีนี้ก็ลองรัน QEMU อีกที QEMU มันควรจะรายงานว่า Connected to host network interface: tun0 ถ้าได้ตามนี้ก็เป็นอันว่า OS ใน QEMU จะพร้อมเชื่อมออกอินเทอร์เน็ตได้แล้ว ให้ตั้ง IP ของ OS ใน QEMU ให้อยู่ในเครือข่ายเดียวกับ tun0, e.g. 172.20.0.2 และตั้ง gateway ไปที่ IP ของ tun0

ขั้นสุดท้ายก็คือทำ NAT โดยใช้สี่คาถาหากิน

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP
# iptables -A FORWARD -i eth0 -m state --state NEW,INVALID -j DROP
# echo 1 > /proc/sys/net/ipv4/ip_forward

OS ใน QEMU ก็จะใช้งานอินเทอร์เน็ตได้ :)

เร่งการทำงานด้วย KQEMU

การทำงานของ QEMU ทำงานช้าเอาเรื่องอยู่เหมือนกัน ส่วนนึงเป็นเพราะต้องจำลองการทำงานส่วนการจัดการหน่วยความจำ .. ถ้าถ้าสามารถใช้ชุดคำสั่ง native ในการจัดการหน่วยความจำได้ ก็จะทำให้ QEMU ทำงานได้เร็วขึ้นพอสมควรทีเดียว .. ด้วยเหตุนี้ผู้่พัฒนา QEMU เลยพัฒนา KQEMU เพิ่มขึ้นมาเป็น accelerator สำหรับ QEMU .. KQEMU เป็นเคอร์เนลโมดูลที่ช่วยให้ QEMU ใช้จัดการหน่วยความจำโดยใช้คำสั่ง native ของ x86 จริงๆ โดยไม่ต้องจำลองชุดคำสั่งบน QEMU ผลที่ได้จึงทำให้การจำลองระบบ x86 บนซีพียู x86 ทำงานได้เร็วขึ้น .. ข้อเสียของ KQEMU คือ 1. ต้อง compile QEMU + KQEMU เอง และ 2. ใช้งานกับ x86 ได้เท่านั้น .. วิธีการคือ ดาวน์โหลด ซอร์ส ของ QEMU และ KQEMU มา จากนั้นแตก src ของ QEMU ก่อน แล้วค่อยแตก src ของ KQEMU ภายในไดเรคทอรีของ QEMU

$ tar xzf qemu-0.7.1.tar.gz
$ cd qemu-0.7.1
$ tar xzf ../kqemu-0.7.1.tar.gz

แล้วค่อย

$ ./configure
$ make
$ sudo make install

QEMU จะติดตั้งลงใน /usr/local/* และติดตั้ง kernel modules ลงใน /lib/modules//misc/

การใช้งาน kqemu ก่อนอื่น ต้องสั่งโหลดเคอร์เนลโมดูล as root :

# modprobe kqemu major=0

จะได้ /dev/kqemu โผล่ขึ้นมา .. แก้ permission เป็น 666

# chmod 666 /dev/kqemu

ก็เป็นอันเรียบร้อย ทีนี้ก็เรียกใช้ qemu ตามปกติ โปรแกรมจะเรียกใช้งาน KQEMU ซึ่งควรจะทำงานได้เร็วขึ้น

ถ้าไม่อยากมานั่งแก้ permission ทุกครั้งที่สั่ง modprobe ก็ใช้ udev ช่วยได้ สำหรับ Ubuntu ให้สร้างไฟล์ /etc/udev/permission.d/kqemu.permissions ตามนี้

# kqemu
kqemu:root:root:0666

จะทำให้เวลา modprobe kqemu แล้ว udev จะสร้าง dev เป็น permission 666 อัตโนมัติ

Conclusions

สรุปแล้ว QEMU ก็ช่วยให้ติดตั้ง Windows 2000/XP ได้ตามที่ต้องการ .. บนเครื่อง Athlon XP 2000+ ตอบสนองการสั่งงานได้เร็วใช้ได้ ส่วนบน P-III 1 GHz ช้าไปหน่อย ช้าจนเซอร์วิสบางตัวของ Windows 2000 บางตัวไม่สามารถ startup ได้ในเวลาที่กำหนด ..ในกลุ่มซอฟต์แวร์ที่ใช้วิธี emulation นี้ถือว่า QEMU นี่เร็วสุดแล้วแหละ .. ถ้าต้องการเร็วกว่านี้ก็คงต้องเลือกใช้พวกที่เป็น virtualization อย่าง Win4Lin หรือ VMWare ซึ่งเป็น commercial .. หรือไม่ก็ xen ซึ่งทดสอบกันมาแล้วว่าทำงานแบบ virtualization ได้เร็วกว่า Win4Lin/VMWare ซะอีก แถมยังเป็นโอเพ่นซอร์สด้วย เท่าที่ลองดูก็น่าสนใจทีเดียว จะติดก็ตรงที่มันต้องทำอะไรกับเคอร์เนลเยอะไปหน่อย เลยไม่ค่อยอยากใช้ .. เห็นผ่านๆ ตาแวบๆ ว่า Ubuntu จะเอา Xen เข้าไปรวมด้วย คาดว่าคงได้เห็น stable ประมาณเวอร์ชัน 6.04 (เป็นอย่างเร็ว).. ถึงเวลานั้นค่อยว่ากันอีกที :P