Category Archives: Blog

A Seagate Momentus

หลังจากเอา Seagate Momentus 60 GB 5400.2 มาใช้บนลินุกซ์ สักพักก็เห็นอาการแปลกๆ ตั้งแต่วันแรกๆ คือไฟฮาร์ดดิสก์จะติดเกือบตลอดเวลาแม้ว่าไม่ได้อ่านหรือเขียนอะไร .. หาสาเหตุอยู่นานเหมือนกัน ตอนแรกนึกว่า gam ทำงาน แต่ก็ไม่ใช่ ลอง kill process ทิ้งทีละตัวก็ไม่หาย จนนึกว่าเป็นที่ฮาร์ดแวร์เองหรือเปล่า ก็ไม่ใช่อีก เพราะบนวินโดว์สมันไม่เป็น มันเกิดเฉพาะกับลินุกซ์ และเป็นกับเคอร์เนลทุกตัวที่มีอยู่ในเครื่อง .. เลยค่อยๆ ทดสอบ combination ของ hdparm ดู แล้วก็เจอว่า ถ้า disable APM (-B 255) ตามด้วย check IDE power status (-C) แล้วอาการจะหายเป็นปลิดทิ้ง (- -‘) … สาเหตุมาจากอะไรก็ไม่แน่ใจเท่าไหร่ แต่ disable APM ไปก็ไม่เดือดร้อนอะไร ค่าที่เซ็ตก็ไม่ได้อันตรายกับข้อมูลหรือดิสก์ ไฟสถานะก็ติดเฉพาะตอนอ่านเขียนจริงๆ เหมือนปกติิ .. อืมม .. ปล่อยเลยตามเลยไปละกัน ยังไงก็ประกันห้าปี… ลอล

HDD & ADSL again !

วันเสาร์ที่ผ่านมาฝนตกหนักๆๆ จนทำให้ ADSL ใช้งานไม่ได้ .. โทรไป call center บอกอาการไปเขาก็สงสัยว่าจะเป็นกะสายสัญญาณ ซึ่งต้องรอวันจันทร์ถึงจะมีช่างเข้าไปเช็ค จ๋อยซะ .. ต้องกลับมาซบ TOT Online เป็นการชั่วคราว

วันอาทิตย์ ไปเดินๆ หาซื้อฮาร์ดดิสก์ตัวใหม่ กะว่าจะเอา Seagate Momentus 60 GB 5400 RPM ประกัน 5 ปี .. ราคาที่สืบมาคือราวๆ ห้าพัน+ .. เดินผ่านร้านแรกแปะไว้ 5500 อืม พอกัดฟันซื้อไหว (เดือนนี้จนอีกแล้ว กลับมาทำงานเก็บเงินไม่ได้ซักเดือน มีเรื่องจ่ายตลอดสิน่า !) .. ไปกด ATM กลับมา กะว่าเดินดูซักรอบ ถ้าไม่มีร้านอื่นก็คงเอาราคา 5500 นี่แหละ .. ก็ไปเจอร้านนึง รุ่นเดียวกันเป๊ะๆ เขาบอกราคา 4500 .. เหวอ ! .. ห่างกันไม่กี่สิบสิบก้าวลดไปพันนึงแน่ะ .. รุ่นนี้ ยี่ห้อนี้ ร้านอื่นก็ไม่มีขายด้วย ก็เลยตัดสินใจซื้อ ต่อราคาได้อีกนิดหน่อย :D .. บ่ายวันอาทิตย์เลยเข้าสูตร ลง Win XP + Chantra ตามด้วย Breezy Preview ทดสอบดู อืม .. GNOME 2.12 เรียบง่าย น่าใช้ ไม่รู้สึกช้า (เพราะ cairo) อย่างที่กลัวๆ ไว้ .. แต่เจอปัญหากับโจทย์เก่า อาการเดิม คือ Evolution ไม่แสดง address book กับ calendar เก่า อิมพอร์ตก็เพี้ยนๆ แถมลบข้อมูลไม่ออกอีกต่ะหาก .. นั่ง hack พักนึง ไม่ค่อยได้เรื่องก็ลาล่ะครับ กลับไปใช้ Hoary + Kitty เหมือนเดิม .. ไว้รอตัวจริงค่อยว่ากันอีกที ช่วงใช้ Breezy Preview ประมาณหกชั่วโมง มี update เกือบสิบ packages … ขยันกันจริงๆ :P

วันจันทร์ ติดต่อเพื่อนที่ call center ให้เช็ค ADSL ให้ ปรากฏว่า data comm ปกติ ก็เหลือแต่เรื่องสายสัญญาณ .. เพื่อนก็เลยส่งช่างมาเช็คสายที่บ้าน .. ช่างตรวจดูแล้ว ทุกอย่างปกติ .. สงสัย ADSL router จะเจ๊งแล้วแหละ ! .. ซวยจริงตู T_T

วันอังคาร ช่างเขาถือ notebook มาพร้อม ADSL modem มาทดสอบก็ปรากฏว่าใช้งานได้ .. สรุป คงจะเป็นที่ ADSL router จริงๆ .. บ่ายแก่ๆ เลยเอาไปเคลมที่ King Intelligent Tech. (distributor ของ Surecom) สาขาขอนแก่น .. 15 นาที ได้ตัวใหม่กลับมา King เจ๋งจริงๆ ไม่เรื่องมาก เหมือน (ตู๊ดๆๆ – โดนดูดเสียง) … เย็นๆ ADSL ที่บ้านใช้งานได้เหมือนเดิมแล้ว โหะๆๆ .. :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 .. เสร็จแล้ว :)

Chantra

ได้แผ่นติดตั้ง Chantra มา เมื่อครั้งไปขอสัมภาษณ์ประธานบอร์ดบริหาร SIPA ประกอบกับฮาร์ดดิสก์เจ๊งไป ก็เลยได้โอกาสเอามาติดตั้งใช้บนวินโดว์สเอ็กซ์พี ..

Chantra รวบรวมโปรแกรมที่ใช้งานบนวินโดว์ส ทุกตัวเป็นโอเพ่นซอร์ส ดังนั้นไม่ต้องกังวลเรื่องละเมิดลิขสิทธิ์ autorun จะพาเข้าเมนูการเลือกโปรแกรมติดตั้ง เขาจัดหมวดหมู่ของโปรแกรมไว้แล้ว พร้อมคำอธิบายโปรแกรมต่างๆ ว่าไว้ใช้ทำอะไร มีสกรีนช็อตให้ดู และมีพวกส่วนเสริม (e.g. ปลั๊กอิน, extensions) ที่น่าใช้รวมไว้ด้วย ที่สั่งติดตั้งไปก็มี OO.o2, Thai Firefox Community Edition, Gaim, VLC และ PuTTY

  • OO.o2 เป็นซอฟต์แวร์สำนักงาน ดูจะน่าใช้ดี ยังไม่ได้ลองอะไรมาก แต่เรื่องตัดคำไทยก็เหมือนจะทำงานได้ถูกต้อง
  • Thai Firefox Community Edition – เว็บเบราว์เซอร์ ตัดคำไทยไม่มีปัญหา (แต่ที่น่ารำคาญสำหรับผม คือ UI ภาษาไทย :P)
  • Gaim – โปรแกรม IM ยังไม่ค่อยดีเท่าไหร่ สุดท้ายก็ได้ถอดออก แล้วใช้ Miranda IM แทน (เป็น Open Source เหมือนกัน)
  • VLC – โปรแกรมเล่นไฟล์มัลติมีเดีย รองรับไฟล์สารพัดแบบ เจ๋งสุด .. Windows Media Player เทียบไม่ติด
  • PuTTY – เป็น SSH2 Client จิ๋วแต่แจ๋ว มีครบทั้ง ssh sftp scp

Chantra ยังมีซอฟต์แวร์อื่นๆ อีกหลายตัว รองรับทั้งการใช้งานในสำนักงาน ใช้อินเทอร์เน็ต และเพื่อความบันเทิง เรียกว่าทดแทนซอฟต์แวร์เชิงพาณิชย์ทั้งหลายที่ต้องหาซื้อมาราคาแพงๆ (หรือถูกๆ เถื่อนๆ) ได้สบาย

ดาวน์โหลดแผ่นติดตั้ง Chantra ได้ที่ ftp://thaiopensource.org/software/chantra/chantra-1.0.iso

HDD & ADSL

เอาข่าวร้ายก่อน ประมาณต้นปีที่แล้ว HDD 20 GB ของ peorth เจ๊งไป .. เลยได้ซื้อ HDD 40 GB มาใช้แทน ช่วงที่ส่งเคลม มันดูไม่งอแงจนกระทั่งเมื่อวานมันก็เริ่มมีอาการอ่านไม่ค่อยได้ อาการใกล้เคียงกับเมื่อครั้งที่ 20 GB เจ๊ง .. เลยสำรองข้อมูลไว้สองสำเนา แล้วเอา 20 GB ที่เคลมมาใช้แทนไปก่อนเพราะต้องรีบทำงาน .. ส่วน 40 GB เสียไว้มีโอกาสเข้า กทม. ค่อยไปเคลม (โตชิบ้า ประกันสามปี) .. ยังดีที่สำรองข้อมูลไว้ที่เครื่อง belldandy บ้าง เลยไม่เสียหายมากเหมือนครั้งก่อนๆ … เที่ยวนี้จะซื้อซีเกทประกันห้าปีมาใช้ดูมั่ง มันคงไม่ได้รักษาข้อมูลได้ดีกว่าเท่าไหร่ แต่อย่างน้อยก็ได้ประกันยาวๆ

ข่าวดี – ADSL ที่มีปัญหามาตั้งแต่ติดตั้ง เพื่อนฝูงที่ call center ช่วยตามเรื่องให้ แล้วก็พบว่าที่ขอติดตั้งไปตั้งแต่เดือนก่อนมันยังไม่ active (- -‘) วันนี้ทดสอบกะทาง call center อยู่สิบนาทีก็ออนไลน์ได้สำเร็จ :D .. โหะๆ ต่อไปก็ไม่ต้องแช่อยู่ที่ทำงานดึกๆ ดื่นๆ แล้ว .. ต้องขอบคุณเพื่อน และน้องๆ ที่ช่วยจัดการให้

ตอนนี้ที่บ้านใช้ Wireless ADSL Router ของ Surecom รุ่น 9410SX-g = ADSL 2/2+ กับ 4-port 10/100 + 802.11b/g มี web-based config .. อืมม ดูแล้วข้างในน่าจะเป็นลินุกซ์ เลยลอง ssh เข้าไป ก็เข้าได้ แถม CLI สั่งออกไปเชลล์ได้เลย ประเดิมกันที่

# cat /proc/version
Linux version 2.4.17_mvl21-malta-mips_fp_le ([email protected]) (gcc ve
rsion 2.95.3 20010315 (release/MontaVista)) #1 Fri Mar 18 11:00:12 EST 2005

ฮา .. 2.4.17 MontaVista เจ้าเดียวกับที่ทำให้ Motorola นี่เอง .. ต่อๆๆ

# cat /proc/cpuinfo
processor               : 0
cpu model               : MIPS 4KEc V4.8
BogoMIPS                : 149.91
wait instruction        : no
microsecond timers      : yes
extra interrupt vector  : yes
hardware watchpoint     : yes
VCED exceptions         : not available
VCEI exceptions         : not available

โหะ …CPU เป็น MIPS R4000 Series … หน่วยความจำก็

# free
              total         used         free       shared      buffers
  Mem:        14432        13680          752            0         1756
 Swap:            0            0            0
Total:        14432        13680          752

Linux Kernel 2.6.13

เพิ่งจะรีลีสเมื่อ 2005-08-29 00:03 UTC … make oldconfig จาก 2.6.12.5 ที่ใช้อยู่ มีอะไรใหม่ๆ (เมื่อเทียบกับคอนฟิกเคอร์เนลที่ผมใช้นะ ไม่ใช่ทั้งหมด) ที่น่าสนใจหลายอย่างเลย ..

  • Preemption Model – มีให้เลือกสามอย่างคือ
    • No Force Preemption (PREEMPT_NONE): ไม่มี Kernel Preemption เหมาะสำหรับเซิร์ฟเวอร์
    • Voluntary Preemption (PREEPMT_VOLUNTARY): Ingo Molnar เสนอโมเดลนี้มาพักนึงแล้ว ไอเดียคือเป็น preemtible kernel ที่ยอมให้โค้ดแต่ละส่วนในเคอร์เนลเลือกได้ว่าจะยอมให้ preempt หรือไม่ ซึ่งน่าจะมีผลดีกับเคอร์เนลมากกว่า แต่เพราะโค้ดบางส่วน preempt ไม่ได้ จะทำให้มี latency มากกว่า preemtible kernel ด้วย
    • Preemptible Kernel (PREEMPT): เหมาะกับเดสก์ท็อปที่ต้องการให้มีการตอบสนองที่ดี
  • Timer Frequency: ความถี่สำหรับ Timer Interrupt มีให้เลือกสามความถี่ คือ 100 Hz (HZ_100) 250 Hz (HZ_250) และ 1000 Hz (HZ_1000) ..ยิ่งความถี่สูงก็ยิ่งตอบสนองต่อ interrupt ได้ดี
  • kexec system call (KEXEC): ทำงานคล้ายๆ กับ exec system call แต่ kexec นี้สำหรับเคอร์เนล โดยที่เคอร์เนลที่ทำงานอยู่สามารถโหลดเคอร์เนลใหม่แล้วบูตมาใช้งานได้ทันที (ไม่จำเป็นต้องเป็นเคอร์เนลของลินุกซ์) .. kexec จึงทำให้ระบบบูตเคอร์เนลใหม่ได้โดยไม่ต้องรีเซ็ตฮาร์ดแวร์และเริ่มการทำงานตามรูทีนของ BIOS .. วิธีนี้คาดว่าจะทำให้บูตได้เร็วขึ้นและ (หวังว่าจะ) มีเสถียรภาพที่ดีกว่า
  • /proc/acpi/sleep (ACPI_SLEEP_PROC_SLEEP): อินเทอร์เฟซนี้ deprecated ไปแล้วและถูกแทนที่ด้วย /sys/power/state
  • Load CIS updates from userspace (PCMCIA_LOAD_CIS): โหลด Card Information Structure จากโปรแกรมใน userspace ฟีเจอร์นี้ทำให้เคอร์เนลโหลด firmware ได้อัตโนมัติโดยทำงานร่วมกับ Hotplug แทนที่จะต้องใช้ cardmgr เป็นตัวจัดการ
  • PCMCIA control ioctl (PCMCIA_IOCTL): obsolete ไปแล้วแต่โปรแกรมหลายโปรแกรม e.g. cardmgr, cardctl ยังจำเป็นต้องใช้อยู่ .. อนาคตต้องย้ายไปใช้ pcmciautils ตัวใหม่
  • TCP: advanced congestion control (TCP_CONG_ADVANCED): ลอยไปลอยมาหลายเดือนแล้วเหมือนกัน ทีนี้ก็จะมี TCP Congestion Control ให้เลือกหลายตัวเลย ถ้าไม่เลือก Advanced Congestion Control ก็จะใช้อัลกอริทึม BIC-TCP + Reno
    • TCP Westwood+
    • H-TCP
    • Highspeed TCP
    • TCP Hybla
    • TCP Vegas
  • SCSI media changer support (CHR_DEV_SCH): e.g. SCSI Jukebox CDROM
  • Export all symbols of ieee1394’s API (IEEE1394_EXPORT_FULL_API): เผื่อให้ใช้ไดรเวอร์อื่นนอกเคอร์เนลทรีได้
  • Hardware Monitoring support (HWMON): ย้ายออกมาจาก I2C
  • Hardware Monitoring Chip debugging messages (HWMON_DEBUG_CHIP): สำหรับดีบั๊ก HWMON
  • USB Monitor (USB_MON): สำหรับ monitor USB traffic
  • Ext2 execute in place support (EXT2_FS_XIP): สนับสนุน memory-backed block device ให้ทำงานได้โดยไม่ต้องใช้ page cache (don’t ask !)
  • Inotify file change notification support (INOTIFY): ระบบแจ้งเตือนการเปลี่ยนแปลงของไฟล์ (ใช้กะ Beagle ได้ :D)
  • ไดรเวอร์ใหม่
    • Generic Hotkey (ACPI_HOTKEY)
    • IT821X IDE Controller (BLK_DEV_IT821X)
    • QLogic ISP24xx host adapter family (SCSI_QLA24XX)
    • Fusion MPT ScsiHost drivers for SPI (FUSION_SPI)
    • Fusion MPT ScsiHost drivers for FC (FUSION_FC)
    • SysKonnect GigaEthernet (SKGE)
    • Via unichrome video cards (DRM_VIA)
    • Arc Monochrome LCD board (FB_ARC)
    • RME Hammerfall DSP MADI (SND_HDSPM)
    • ISP116X HCD (USB_ISP116X_HCD)
    • Acecad Flair tablet (USB_ACECAD)
    • TM Touch USB Touchscreen (USB_ITMTOUCH)
    • Keyspan DMR USB remote control (USB_KEYSPAN_REMOTE)
    • USB LD (USB_LD)

อื่นๆ เท่าที่รู้ก็มี orinoco driver เพิ่ม monitor mode แล้ว :D .. ต่อไป WLAN card ที่ใช้ชิพ Hermes/Orinoco ก็จะเข้าโหมด monitor ได้โดยสั่ง iwconfig mode monitor … ฮุๆๆ ทีนี้ก็ wardrive ได้สบาย :P

LaTeX-to-PDF

วันนี้ได้สร้าง PDF จาก LaTeX บน Ubuntu .. ปรากฏว่าเอกสาร PDF มันดูเละๆ เหมือนจะเป็นฟอนต์แบบบิตแม็พแตกๆ .. เลยลองกูเกิ้ลดูก็เจอว่า LaTeX ใช้ฟอนต์แบบบิตแม็พ (Type 3) โดยปริยาย ซึ่งทำให้ฟอนต์ในเอกสาร PDF มันออกไม่คม ขนาดไฟล์โต แถมยังทำให้ evince สร้าง thumbnail ได้ช้ามากๆ .. วิธีที่ดีกว่าคือบังคับให้ใช้ฟอนต์แบบ outline (Type 1) แทน วิธีการก็เหมือนกับการสร้าง PDF ปกติ แค่เพิ่มออปชันในการสั่งงานอีกนิดหน่อย

แปลง tex เป็น dvi

$ latex file.tex

แปลง dvi เป็น ps .. อันนี้ต้องใส่ออปชัน -Pcmz เพื่อให้ dvips ใช้ Type 1 แทน

$ dvips -Pcmz -o file.ps file.dvi

สุดท้าย แปลง ps เป็น pdf

$ ps2pdf file.ps

ทีนี้ evince ควรจะ render PDF ได้เร็วขึ้น ตัวหนังสือก็น่าจะดูคม ไม่แตกเป็นหยักๆ และถ้าดู Document Properties จาก Arobat Reader จะเห็นว่าเอกสาร PDF ใช้ฟอนต์เป็น Type 1 :)

อ่อ .. สำหรับ Ubuntu รู้สึกว่าจะต้องลง tetex-extra ด้วยเน้อะ :P

Background Music

ถ้าได้ดูรายการท่องเที่ยว/สารคดี/etc. จะได้ยินเสียงดนตรีประกอบเป็นพวกเพลงบรรเลง jazz มั่ง pop มั่ง บางทีก็ classic .. ถือเป็นเรื่องปกติ .. แต่ระยะหลังๆ ไม่ได้มีแค่ดนตรีจากแผ่นเหมือนก่อนแล้ว อย่างรายการ กบนอกกะลา รู้สึกว่า BGM หลายๆ ตอนมันคุ้นหู เหมือนจะเอามาจากเกมส์ Final Fantasy .. เมื่อคืนนี้ก็เป็นอีกครั้งนึง ถ้าจำไม่ผิดน่าจะมาจาก FF VIII ตอนวางแผนลอบสังหาร Edea .. จำได้ว่าเคยได้ยินรายการนึงก็เอา BGM FF VI มาใช้ และมีอีกรายการนึงก็เอา BGM แถวๆ Prontera Field ของ Ragnarok Online มาใช้ :P … เพลงจากเกมส์มันก็มีเพราะๆ หลายเพลงนะ ก็เลยทำขายเป็นเรื่องเป็นราวซะ .. อย่างตอนนี้ก็มีเพลงประกอบเกมส์ A3 ที่เริ่มได้ยินบ่อย .. อีกหน่อยซื้อเกมส์ อาจจะ bundled + แผ่น Audio CD + แผ่น MV … :P

/me .. มัวแต่เล่นเกมส์ กะ ดูทีวี ..(- -‘)

ลง 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

Packages for Hoary

เพิ่งอัปเดต leafpad กับ backport inkscape มาจาก breezy … 3-4 เดือนที่ผ่านมา backport มาจาก breezy หลายตัวเหมือนกัน เหตุผลก็เพราะ hoary มันไม่ยอมอัปเดตซักที ขี้เกียจรอก็เลย port มา build เองซะ .. ถึงเดือนสิบนี้ พอ 5.10 ออกก็คงไม่จำเป็นต้อง backport ซักระยะนึงล่ะนะ :)

ระยะนี้ network มีปัญหาบ่อยมาก sync ข้อมูลไปไว้ที่ ftp.kitty.in.th ไม่ค่อยได้ … ถ้าจะดาวน์โหลดไฟล์ล่าสุด จะอยู่ที่ ftp://skuld.kitty.in.th นะครับ

Kitty Repository (Ubuntu 5.04 Hoary)

  1. celestia celestia-common celestia-glut celestia-gnome
  2. dcraw
  3. dict-lexitron dict-lexitron-doc
  4. dillo
  5. djview djvulibre-bin djvulibre-plugin djvuserve libdjvulibre-dev libdjvulibre1c2
  6. em-panel-applet
  7. evince
  8. evolution evolution-dev
  9. ffmpeg
  10. figment
  11. gaim gaim-data gaim-dev
  12. gaim-guifications
  13. gaimnosd
  14. gimp gimp-data gimp-helpbrowser gimp-python gimp-svg gimp-ufraw libgimp2.0 libgimp2.0-dev libgimp2.0-doc
  15. gnome-outliner
  16. gruler
  17. image-exiftool-perl
  18. inkscape
  19. launchpad-integration liblaunchpad-integration-dev liblaunchpad-integration0 liblpint-bonobo-dev liblpint-bonobo0 python-launchpad-integration
  20. lcd4linux
  21. leafpad
  22. libavcodeccvs libavcodeccvs-dev
  23. libcairo1 libcairo1-dev
  24. libgc1c2 libgc-dev
  25. libpixman1 libpixman1-dev
  26. libpoppler-dev libpoppler-glib-dev libpoppler-qt-dev libpoppler0c2 libpoppler0c2-glib libpoppler0c2-qt
  27. libpostproc-dev libpostproc0
  28. mencoder-586 mencoder-k6 mencoder-k7 mplayer-386 mplayer-586 mplayer-686 mplayer-doc mplayer-k6 mplayer-k7 mplayer-nogui
  29. nmap nmapfe
  30. pftp
  31. qemu
  32. quarry
  33. rrs
  34. scummvm
  35. stellarium
  36. vym
  37. w3m w3m-img
  38. zsnes