(Kernel < 2.6.9 RC2) + (Xorg >= 6.8) + i830 + DRI = Kernel Oops !

หลังอัปเกรดเป็น Xorg 6.8/6.8.1 พบว่า FPS ของ glxgears ลดลงไปเกือบครึ่ง ทีแรกเข้าใจว่าเป็นเพราะ Xorg มันช้าเอง .. แต่พอมาเห็น syslog ถึงได้รู้ว่าไดรเวอร์ DRM ของ i830 ในเคอร์เนลมันมีปัญหา เวลาจะโหลดทำงานจะเกิด Oops! .. พอ i830 DRM มันโหลดไม่ได้ Direct Rendering เลยไม่ทำงาน ..

อาการก็จะประมาณนี้

Sep 19 12:05:51 peorth kernel: [drm:i830_dma_initialize] *ERROR* can not find dma buffer map!
Sep 19 12:05:51 peorth kernel: [drm:i830_irq_emit] *ERROR* i830_irq_emit called without lock held
Sep 19 12:05:51 peorth kernel: mtrr: 0x98000000,0x8000000 overlaps existing 0x98000000,0x200000
Sep 19 12:05:51 peorth kernel: Unable to handle kernel paging request at virtual address f000e2d3
Sep 19 12:05:51 peorth kernel:  printing eip:
Sep 19 12:05:51 peorth kernel: b023b091
Sep 19 12:05:51 peorth kernel: *pde = 00000000
Sep 19 12:05:51 peorth kernel: Oops: 0000 [#1]
Sep 19 12:05:51 peorth kernel: Modules linked in: ipv6 ohci1394 ieee1394 usbhid yenta_socket uhci_hcd usbcore snd_intel8x0 snd_ac97_codec snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore orinoco_cs ds pcmcia_core orinoco hermes e100 sg scsi_mod
Sep 19 12:05:51 peorth kernel: CPU:    0
Sep 19 12:05:51 peorth kernel: EIP:    0060:[]    Not tainted
Sep 19 12:05:51 peorth kernel: EFLAGS: 00013296   (2.6.8.1-ck6)
Sep 19 12:05:51 peorth kernel: EIP is at i830_kernel_lost_context+0x11/0x70
Sep 19 12:05:51 peorth kernel: eax: f000e2c3   ebx: 00000000   ecx: 00000010   edx: bf15cc10
Sep 19 12:05:51 peorth kernel: esi: b03f76a0   edi: bedbe000   ebp: b03f7820   esp: bedbeed0
Sep 19 12:05:51 peorth kernel: ds: 007b   es: 007b   ss: 0068
Sep 19 12:05:51 peorth kernel: Process X (pid: 1027, threadinfo=bedbe000 task=bf15cc10)
Sep 19 12:05:51 peorth kernel: Stack: 00000000 b023d207 b03f76a0 affff718 00003286 00000000 b03f76a0 b02372e3
Sep 19 12:05:51 peorth kernel:        b03f76a0 b03f7d0c b03f7d14 b014d8c0 bedbef14 08806bf0 00000000 00000001
Sep 19 12:05:51 peorth kernel:        0000000a 00000000 bf15cc10 b01163f0 00000000 00000000 beeb7d80 bf2d01e8
Sep 19 12:05:51 peorth kernel: Call Trace:
Sep 19 12:05:51 peorth kernel:  [] i830_dma_quiescent+0x17/0xb0
Sep 19 12:05:51 peorth kernel:  [] i830_lock+0x203/0x2b0
Sep 19 12:05:51 peorth cups-config-daemon: cups-config-daemon startup succeeded
Sep 19 12:05:51 peorth kernel:  [] do_sync_read+0x80/0xb0
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] default_wake_function+0x0/0x20
Sep 19 12:05:51 peorth kernel:  [] i830_ioctl+0xe4/0x160
Sep 19 12:05:51 peorth kernel:  [] sys_ioctl+0xc9/0x240
Sep 19 12:05:51 peorth kernel:  [] sysenter_past_esp+0x52/0x71
Sep 19 12:05:51 peorth kernel: Code: 8b 40 10 8b 90 34 20 00 00 81 e2 fc ff 1f 0
0 89 51 14 8b 43

และถ้าดูด้วย glxinfo หรือ xdriinfo โปรแกรมก็จะรายงานว่า direct rendering มันไม่ทำงาน

ทางแก้ เท่าที่หาเจอเวลานี้ มีสองทาง

ติดตั้งเคอร์เนล >= 2.6.9 RC2 ซึ่งรวมไดรเวอร์ตัวใหม่เข้าไปแล้ว ไดรเวอร์ใหม่นี้ชื่อ i915 รองรับกราฟิกชิปของอินเทล ตระกูล 830 845G 852GM 855GM 865G 915G เป็นไดรเวอร์ที่ใช้กับ Xorg >= 6.8 และ XFree86 > 4.4 .. ส่วน Xorg < 6.8 และ XFree86

More on Timing belt

.. ได้คำตอบแล้วว่า สายพานไทม์มิ่งอันที่ เปลี่ยนกับศูนย์มิตซูฯ ตอนแสนกิโลและขาดไปเมื่อวาน ไม่ไช่อะไหล่แท้ของศูนย์ฯ .. เวรแล้วมั้ยล่ะ .. เรื่องนี้สอนให้รู้ว่า ต่อให้เป็นศูนย์ฯ ของรถยี่ห้อนั้นๆ ก็ใช่ว่าจะไว้ใจได้ … เซ็งจริงๆ … วันนี้เลยใช้รถอีกคัน ขับมากรุงเทพฯ .. กลับช้ากว่ากำหนดการเดิมหนึ่งวัน ตารางงานเลยอัดแน่นเข้าไปอีก ..

อ่อ ไหนๆ ก็ไหนๆ พูดถึงคำว่า ‘กำหนดการ’ ซักหน่อย หลายๆ คนมักจะไปใช้คำว่า ‘หมายกำหนดการ’ แทนโดยไม่รู้ว่า ‘หมายกำหนดการ’ เป็นคำราชาศัพท์ ใช้ในความหมายของลำดับขั้นตอนในราชพิธี .. พิธีการของสามัญชนให้ใช้ ‘กำหนดการ’ เฉยๆ เน้อะ ..

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

ลองกูเกิ้ลดู จะรู้ว่าคนไทยใช้สองคำนี้ผิดมากขนาดไหน :P

GNOME 2.8 / Timing Belt

ข่าวใหญ่ประจำวัน สำหรับวันนี้คงไม่พ้น GNOME 2.8 .. อยากใช้แต่ยังไงตอนนี้ก็คงต้องรอ emerge หรือไม่ก็รอ MrChoke .. (เห็นว่ากำลังทำเลย :D)

บ่ายๆ ขับรถกลับไปกรุงเทพฯ .. เกือบถึงเมืองพลก็ได้ยินเสียง แป๊ก .. แล้วรถก็ดับ ..จอดเปิดฝากระโปรงรถดูก็ไม่เห็นสิ่งผิดปกติ .. ซึ่งเป็นลางไม่ดี เพราะแสดงว่าปัญหาอยู่ข้างใน .. พอดีว่าตำรวจทางหลวงผ่านมาเลยลากรถไปที่อู่ในตัวอำเภอพล .. ถึงอู่่ ช่างเปิดฝาครอบสายพานไทม์มิ่งดูเป็นรายการแรก แล้วก็เห็นว่ามันขาด.. อา ซวยแล้ว .. ไอ้สายพานไทม์มิ่งหรือสายพานราวลิ้นนี่เป็นที่เลื่องลือว่าขาดแล้วเป็นเรื่องใหญ่มากๆ ถึงขนาดยกเครื่องใหม่เลยก็มีให้เห็นกันนักต่อนัก .. สายพานไทม์มิ่งเป็นตัวเชื่อมระหว่างแคร็งก์ชาฟต์ที่เป็นตัวส่งกำลังกับแคมชาฟต์ที่ทำหน้าที่หมุนเปิด/ปิดวาล์วไอดีและไอเสียให้ถูกต้องตามจังหวะ หากสายพานขาดขณะรถวิ่งจะมีโอกาสสูงที่วาล์วจะเปิดค้างไว้ พอลูกสูบเคลื่อนที่ขึ้นมันก็จะตีวาล์ว เสียน้อยหน่อยก็ก้านวาล์วคด หนักกว่านั้นก็อาจจะเป็นกระเดื่องหัก แคมชาฟต์คด ลูกสูบเสียหาย เกียร์ธรรมดาลูกสูบอาจจะบดจนพังได้ทั้งเครื่อง ยิ่งวิ่งเร็ว ยิ่งมีโอกาสเสียหายมาก .. ปัจจุบันรถส่วนใหญ่ (รวมทั้งรถผมด้วย) จะมีกำหนดเปลี่ยนสายพานไทม์มิ่งทุกหนึ่งแสนกิโลเมตร ไม่ว่าจะเสียหายหรือไม่ถึงอายุเมื่อไหร่ก็ต้องเปลี่ยน ดีกว่าไปขาดกลางทาง .. ตอนรถวิ่งครบแสนผมก็เข้าศูนย์เปลี่ยนไปแล้ว .. วันนี้ที่ขาด ODO อยู่ที่แสนเจ็ดกว่าๆ ..ไม่น่าขาดได้เลย .. ก็นับว่าโชคดีที่เป็นรถเกียร์ออโต้ กำลังวิ่งที่ราวๆ 120 พอสายพานขาด เกียร์จะเปลี่ยนเข้าเกียร์ว่างและเครื่องจะดับอัตโนมัติ จากนั้นสตาร์ทให้ตายยังไงก็ไม่ติด .. ความเสียหายที่เกิดกับรถผมก็เลยแค่ก้านวาล์วไอเสียคดทั้งสี่ก้าน .. เฮ่อ (T_T)

Swap .. or not ?

วันนี้แวะเอาแผ่นซีดีไปฝากพี่เทพที่บ้าน นั่งคุยกันสารพัดเรื่อง นานทีเดียว .. :)

เรื่องนึงที่คุยกันคือเรื่อง swap ในลินุกซ์ .. มีกรณีแปลกๆ ที่่ผ่านตา คือ มีคนเอาหน่วยความจำมาทำเป็น RAM disk แล้วเอามาใช้เป็น swap บนเคอร์เนล 2.4 .. อ่านเรื่องเต็มๆ ได้ที่ http://kerneltrap.org/node/view/3660 .. คอมเมนต์ยาวมาก ผู้เขียนบทความพยายามอธิบายว่าการใช้หน่วยความจำมาทำเป็น swap ดีกว่า การ swap ลงดิสก์ (ซึ่งก็แหงๆ ล่ะ) .. และการทดสอบโดยผู้เขียนเองได้ผลว่าใช้หน่วยความจำทำ swap ดีกว่า ไม่มี swap เลย .. อันนี้ดูไม่น่าเป็นไปได้ แต่ก็ไม่มีอะไรชี้ชัด ตามคนต่างคอมเมนต์ตามสมมติฐานซะมากกว่า .. สรุป .. ไม่มีคำตอบ .. ลองกันเอาเอง

ผู้ใช้หลายๆ คน ‘เชื่อ’ ว่าเคอร์เนลออกแบบมาโดยคาดหวังว่ามี swap ทำงานเสมอ ดังนั้นการปิด swap อาจจะส่งผลที่ไม่ดีนัก นักพัฒนาเคอร์เนลแนะนำว่าควรเปิด swap ให้ทำงานไม่ว่าระบบจะมีหน่วยความจำมากขนาดไหนก็ตาม .. เรื่องนี้มีคนค้านจำนวนไม่น้อยโดยยกประสบการณ์มาเป็นตัวอย่างว่า ถ้าหน่วยความจำมีเยอะจริงๆ ไม่เปิดใช้ swap ก็ไม่มีปัญหาอะไร (หรือมีแต่ไม่เจอ) … หากหน่วยความจำไม่เยอะจริง และไม่มี swap เมื่อถึงจุดที่หน่วยความจำไม่พอ เคอร์เนลจะตัดสินใจ kill แอพพลิเคชันบางตัวออกไป เพื่อให้ระบบทำงานต่อไปได้ ..

ขนาดของ swap เดิมเชื่อกันว่าควรจะตั้งไว้ประมาณ 2 x หน่วยความจำ .. ที่อ่านๆ เจอ เรื่องนี้มีที่มาอยู่หลายทาง หนึ่งในนั้นคือ มาจากขนาด swap ของระบบยูนิกซ์สมัยแรกๆ .. และอีกหนึ่งมาจากเหตุที่เคอร์เนลรุ่นแรกๆ ทำงานได้ไม่ดี ถ้าขนาด swap เล็กเกินไป .. ปัจจุบัน swap ไม่จำเป็นต้องเป็นสองเท่าของหน่วยความจำ สำหรับเดส์กท็อป หน่วยความจำ 256 – 512 MB ตั้ง swap ไว้ซัก 512 MB ก็น่าจะเกินพอแล้ว มากกว่านี้ก็เปลืองเนื้อที่เปล่าๆ ยิ่งถ้าหน่วยความจำเยอะกว่านี้ swap ก็จำเป็นน้อยลง .. อีกอย่างนึงคือ ขนาดของ swap มีลิมิตที่ kswapd ซึ่งตอนนี้ ยังทำงานเป็น 32-bit .. ขนาด swap สูงสุดอยู่ที่ 2 GB/โพรเซส .. หากจะตั้ง swap เกิน 2 GB ก็ได้ แต่ kswapd จะอ้างอิงได้แค่ 2 GB แรก

สำหรับเคอร์เนล 2.6 มีการเปลี่ยนแปลง VM ไปจาก 2.4 ค่อนข้างมาก สามารถปรับแต่งการทำงานของ VM ให้เหมาะกับภาระงานของเครื่องนั้นๆ ได้ระดับนึง กระนั้นก็ยังไม่ถือว่าสมบูรณ์แบบ (เช่นเดียวกับโอเอสอื่นๆ ที่สนับสนุน VM/swapping ทุกๆ ตัว) .. ระยะหลังเลยเริ่มมีเสียงว่า เคอร์เนลอาจจะต้องทำ VM ไว้ใช้สำหรับงานต่างๆ กัน เช่น การใช้เป็นเดสก์ท็อป ทั่วไปแล้วมีหน่วยความจำ 128 – 512 MB การใช้งานแอพพลิเคชันหลากหลาย เปลี่ยนแปลงตลอดเวลา และต้องการการตอบสนองที่ดี – สลับหน้าจอแอพพลิเคชันได้เร็วขึ้น 1 วินาทีมีความหมายมากกว่าคอมไพล์เคอร์เนลได้เร็วขึ้น 1 นาที – VM สำหรับเดสก์ท็อปอาจจะต้องทำงานแบบนึง ในขณะที่ เซิร์ฟเวอร์ ตามทฤษฎีมีหน่วยความจำที่มากกว่า มีแอพพลิเคชันที่อยู่ในหน่วยความจำค่อนข้างแน่นอน ไม่ค่อยมีการเปลี่ยนแปลง VM ก็อาจจะต้องทำงานอีกแบบ ..

จะว่าไป .. หลังๆ มีแพตช์/kernel tree ที่ปรับแต่งสำหรับเดสก์ท็อปหรือเซิร์ฟเวอร์โดยเฉพาะอยู่เหมือนกัน .. :)

skuld.kitty.in.th

เมื่อวานขับรถกลับบ้าน .. 420 กิโลเมตร เติมน้ำมันที่กรุงเทพ 500 บาท ไฟเตือนน้ำมันหมดสว่างตั้งแต่เมืองพล (~70 ก.ม. ก่อนถึงขอนแก่น) .. มาเติมอีกทีที่ขอนแก่น น้ำมันเกือบเกลี้ยงถัง .. เบนซิน 95 อยู่ขอนแก่น ลิตรละ 22 บาทกว่า (T_T)

ที่บ้าน .. ลูกๆ ห้าตัวไม่ได้อาบน้ำหลายวันเพราะฝนตก แดดไม่ค่อยมี หมาที่บ้านถ้าแดดไม่ออกแล้วอาบน้ำมันจะเป็นหวัด … ป๊อกกี้น้ำหนักไม่ลดเลย น้องสาวบอกว่าถ้ากลับมาคราวหน้า น้ำหนักไม่ลดจะไม่ให้ตังค์ไปซื้อขนม .. อดแน่เอ็ง (- -‘)

วันนี้แวะเข้ามาจัดการ skuld.kitty.in.th ที่สัปดาห์ก่อนมันดับไปแล้วบูตไม่ขึ้น .. ปรากฏว่าเป็นเพราะแบ่งพาร์ทิชันใหม่ แล้วลืมตั้ง bootable flag .. พอรีบูตมันก็เลยไม่ไปไหน (- -‘) .. แต่ไหนๆ ก็ไหนๆ .. อัปเดตระบบซะหน่อย .. freebsd-update ทีนึง .. portupgrade ทีนึง .. rsync repository + web อีกทีนึง .. แก้ DNS records .. เปลี่ยน heatsink + พัดลมให้อีก .. สรุปตอนนี้ skuld.kitty.in.th ก็รันบนเครื่องตัวเองเหมือนเดิมแล้ว :D

Kernel 2.6.8 again / How THNIC serves .TH

First, new software releases: X11 R 6.8.0, gcc 3.4.2, and cdrtool 2.01

It seems that the new kernel (>= 2.6.8) still breaks user applications. The thing is that they tightened security of some of the commands within the kernel. Programs that were able to run by suid may not run properly unless you run it as root. AFAIK, these programs include cdrecords, k3b, and some dvd tools. I had reported the problem and solution for cdrecord some days ago, it was not it. Some people need to patch k3b too. The patch was suggested by Linus himself. MrChoke reported that k3b patched would allow root to write CD/DVD, non-root users still do not get any luck. So, for the next release of TLE, which is expected to use kernel >= 2.6.8, you may need to be root to burn CD/DVD.

Man, there are so many patches released to workaround the problem of kernel >= 2.6.8 and cdrecord (and k3b). Some of them just comment out parts of the code. It works, but the side effect is that it unlocks some limitations and would allow you to overwrite the firmware of your CD/DVD burner – gotta be careful ! This is why, as a package maintainer, I do not accept any patch easily. I want to know how the patch solve the problem. For this particular case, it tooks me days to read those patches, review, decide which ones should apply, and test them before actually build the binary packages.

me: I am using kernel 2.6.8.1-ck4. The kernel allows to burn CDs by just suid, without applying any patches to user programs (i.e., k3b, and cdrecord). The ck4 (and the later 2.6.8.1 ck tree) modifies SCSI command filters inside the kernel. Of course, this modification sacrifices levels of kernel security. I think it is, more or less, as secure as 2.6.7. It should be okay at least for desktop installation.

(เอ่อ .. ช่วงนี้กำลังเขียนธีสิส คิดอะไรเป็นภาษาอังกฤษจนลืมตัว พิมพ์ blog มาครึ่งนึงเป็นภาษาอังกฤษหมด .. เลยตามเลยละกัน .. – -‘)

For kitty.in.th, I’m still on building the backup site. My repository has been transferred to two servers: Belldandy in Ratchaburi, and Skuld at Khonkaen. A name server has been setup at each site. DNS records have been written so that the query to Ratchaburi would get answers of IP of Belldandy, and the query to Khonkaen would get those of Skuld. I expect Belldandy to primarily serve services of kitty.in.th. If she is off for one hour (TTL of the domain), all traffic to kitty.in.th would be redirected to her younger sister, Skuld, at Khonkaen automatically. Cool eh ? :)

Anyway, after set this up, I’ve seen quite a number of users had been redirected to Skuld even Belldandy was still up and fully operational. I think this is about DNS, so I asked Parkpoom, the manager of THNIC, about how the network of name servers of THNIC actually works. He explained that for a single .th domain, you need at least two name servers – logically labeled as primary and secondary name server. The RFC suggested that queries will go to ALL servers in round-robin fashion. However, he said the ISC/BIND software would check RTT to all name servers of the domain, and let the smallest RTT one to answer the query. So, it does not mean that the primary name server will always answer the queries, the secondary servers(s) may answer the queries too. In other words, the concept of primary/secondary name server is NOT for selecting the server to answer a query. (note: the primary/secondary thing is to synchronize DNS records among those servers of the domain).

So, I gotta reconfigure the name servers again. Skuld should be a secondary name server, providing the same DNS records as the primary. And if Belldandy is off, Skuld will be reconfigured to answer different DNS records so that traffic to kitty.in.th will be redirected to Khonkaen.

Damage Report !

หลังจากกลับมากจากราชบุรีได้วันเดียว เครื่องยืมที่เอาฮาร์ดดิสก์ไปฝากก็ออกอาการงอแงอีก จนในที่สุดประมาณเที่ยงๆ ของวันอาทิตย์เครื่องก็ freeze .. แล้วก็บูตไม่ขึ้นอีกเลย .. ปล่อยมันไปก่อน .. คิดว่ายังไงก็มีเครื่องสำรองที่ขอนแก่น ..

พอเข้าไปเตรียมระบบของเครื่องสำรอง .. ข่าวร้ายที่สองตามมาติดๆ เครื่องสำรองที่ขอนแก่น (skuld.kitty.in.th) ไม่ทำงาน ไม่รู้ดับ หรือโดนปลดสายแลน หรือ ฯลฯ .. อันนี้ยิ่งทำอะไรไม่ได้หนักไปใหญ่เพราะเครื่องนี้อยู่ในห้องทำงาน มีผมถือกุญแจคนเดียว .. นั่งคิดอยู่พักนึง ก็นึกได้ว่าเหลือเซิร์ฟเวอร์ที่ขอนแก่นอีกเครื่องที่เปิดไว้เป็น Secondary DNS อยู่ และกำลังจะทำเป็น mirror ของ TLE ไว้ที่ขอนแก่น .. เลยใส่ IP ของ skuld เป็น alias แล้วฝากเว็บของ kitty ไว้ชั่วคราว พร้อมกับโอน repository ทั้งหมดของ kitty ไปไว้ด้วย (ยังไงก็จะ mirror TLE อยู่แล้วนิ) .. ระหว่างโอนไฟล์ ก็เมลไป THNIC เปลี่ยน primary/secondary DNS ของ kitty.in.th ไปด้วย .. กะว่าไหนๆ ก็ไหนๆ revise ระบบใหม่เลยก็ดี วิกฤติพอจะพลิกเป็นโอกาสได้แล้วนิ .. บ่ายๆ เย็นๆ เว็บและ repository ก็โอนไปขอนแก่นเรียบร้อย .. รอ portupgrade อย่างเดียวก็ใช้งานได้แล้ว

ตกดึก .. ทางราชบุรีก็บอกมาว่า เครื่องยืมที่ราชบุรี ก็บูตได้แล้ว (อุวะ .. – -‘) เข้าไปเช็คไม่เจอร่องรอยอะไรแปลกๆ เลยนอกจากทางโน้นบอกมาว่าฮาร์ดดิสก์ทำงานเสียงดัง เป็นช่วงสั้นๆ ไม่กี่วิ .. เช็ค log ก็ยังไม่เจอรายงานข้อผิดพลาดในการทำงาน .. ก็เลยใช้ไปเรื่อยๆ .. เว็บทำงานได้ปกติดี ใช้งานได้หลายชั่วโมงเลย แต่พอเข้าหลังบ้านของเว็บ .. หน้าเว็บแสดงเป็นขยะออกมาให้ดู ไม่รู้มันส่งอะไรมา .. เช็ค log อีกที คราวนี้ error ขึ้นมาบาน ประมาณโพรเซส httpd พยายามอ่านข้อมูลจากพาร์ทิชันข้อมูลแล้วล้มเหลว .. คงเป็นปัญหาที่ดิสก์ Seagate 20 GB ที่เมานท์เป็นพาร์ทิชันข้อมูล เลยพยายามจะ unmount เพื่อ fsck ถ้าผ่านจะได้โอนข้อมูลมาเก็บไว้ที่ดิสก์อีกตัว (Quantum 8 GB – เหลือว่าง 5 GB) ที่เมาท์เป็น / อยู่ .. lsof เช็ค .. ไม่มีโพรเซสไหนอ้างอิงถึงพาร์ทิชัน .. สั่ง umount .. เคาะ Enter .. เครื่องก็ freeze ไปเลย .. บูตใหม่ก็ไม่ยอมเมานท์แล้ว อาการเพียบขนาดนี้ เลยตัดใจถอดสายแพกับสายไฟออกจากดิสก์ที่เจ๊ง .. ยังไงก็ยังเหลือที่ในดิสก์อีกตัวมากพอทำงานต่อได้ .. ช่วงกลางวัน วันนี้คงพยายามทำให้เว็บทำงานให้ได้ก่อน .. ส่วน repository คืนนี้ดึกๆ ถึงจะโอนไปไว้ที่ราชบุรี ..

ก็ยังดีที่เซิร์ฟเวอร์ทั้งหมดวางไว้ตั้งแต่แรกแล้วว่ามีไว้บริการจริงๆ ไม่ได้เก็บข้อมูลสำคัญอะไรเลย ถึงจะเจ๊งก็ไม่ถึงกับล้มละลายทางข้อมูล .. kitty repository ตอนนี้มี online ถึง 5 สำเนาแล้ว … จะล่มหมดก็ให้มันรู้ไป

.. แสดงว่าที่มันมีปัญหาตั้งแต่แรกก็คงเป็นที่ดิสก์นี่ล่ะมั๊ง .. (- -‘)

Guest House Ratchaburi

พุธ-พฤหัสที่ผ่านมา มีเพื่อนจะไปราชบุรีเพื่อถ่ายรูปสำหรับประชาสัมพันธ์เกสต์เฮาส์ราชบุรี (เจ้าของเดียวกับ ISP ที่ฝาก belldandy ไว้) เลยได้ติดรถแวะไปดูเครื่องที่เอามาใช้แทนด้วย (Gateway 2000 G6-266 P-II 266 MHz 192 MB RAM – HDD ตัวเดิม 8 + 20 GB) .. ไหนๆ ก็ไหนๆ ไปถ่ายรูปที่เกสต์เฮาส์ด้วยเลยก็แล้วกัน .. ปลายปีนี้กีฬาแห่งชาติจัดที่ราชบุรี ใครผ่านก็แวะไปพักได้ รับรองว่าสะอาดและสะดวกสบายกว่าโรงแรมอื่นๆ ในตัวจังหวัด และแน่นอนว่ามีอินเทอร์เน็ตให้ใช้ทุกห้อง :)

[nggallery id=23]

Scribus 1.2 ออกแล้วตั้งแต่ราวๆ ปลายสัปดาห์ก่อน มีข่าวว่าสำนักพิมพ์ในต่างประเทศเอามาใช้งานจริงๆ จังๆ กันแล้ว (สูตร: Scribus + Inkscape + GIMP) .. ส่วนภาษาไทยภาษาไทยแสดงผลได้ดีขึ้น วรรณยุกต์ สระบน-ล่างไม่เยื้องเหมือนแต่ก่อนแล้ว ถ้าแก้สระลอยกับตัดคำไทยได้ก็สวยเลย :)

Philips-based Webcam Driver

เมื่อไม่นานมานี้ ลินุสได้ตัดสินใจถอดไดรเวอร์ Philips-based USB webcam ออกจากลินุกซ์ เคอร์เนลเวอร์ชันถัดไปอาจจะไม่สนับสนุนเว็บแคมที่ใช้ชิปของ Philips แล้ว … เรื่องนี้ส่งผลกระทบต่อผู้ใช้เต็มๆ เลยกลายเป็นเรื่องที่วิพากษ์วิจารณ์กันเยอะทีเดียว

เรื่องของเรื่องก็คือไดรเวอร์ตัวนี้มันไม่โอเพ่นซอร์ส หรืออาจจะเรียกว่ากึ่งโอเพ่นซอร์ส .. ไดรเวอร์นี้ประกอบด้วยสองส่วนคือ PWCX ที่เป็นโค้ดของไดรเวอร์ พัฒนาโดย Nemosoft Unv. โค้ดส่วนนี้ไม่ได้โอเพ่นซอร์สเพราะติด NDA (Non-Disclosure Agreement) ทาง Nemosoft จึงจำต้องเผยแพร่เป็นไบนารีเพียงอย่างเดียว เมื่อเปิดเผยไม่ได้ PWCX จึงไม่สามารถอยู่ในเคอร์เนลได้ .. เพื่อแก้ปัญหาเรื่องนี้จึงมีโค้ดส่วน PWC ทำหน้าที่เป็นจุดเชื่อม หรือ ‘hook’ ให้กับ PWCX โดย PWC เผยแพร่ด้วย GPL และอยู่ในเคอร์เนลของลินุกซ์ .. โค้ด PWC เป็นไดรเวอร์ทำงานด้วยตัวมันเองได้ แต่จำกัดมากๆ และในความเป็นจริง PWC ไม่ได้เขียนเป็นไดรเวอร์ แต่ใช้เพื่อเป็น hook โดยเฉพาะ .. การทำ hook สำหรับไดรเวอร์แบบไบนารีในเคอร์เนลถือเป็นเรื่องที่ยอมรับไม่ได้ เพราะทำให้เคอร์เนลไม่ ‘สะอาด’ จริง .. เมื่อเป็นเช่นนั้น Greg Kroah (USB maintainer) จึงตัดโค้ดส่วนของ hook ใน PWC ออก (เน้น: ตัดโค้ดของ hook .. ไม่ใช่ตัด PWC) ทำให้ต่อไป PWC จะไม่สามารถโหลด PWCX มาใช้งานได้ .. Nemosoft เห็นเช่นนั้นก็มีท่าทีที่ไม่พอใจเท่าไหร่นัก จึงตัดสินใจหยุดพัฒนาไดรเวอร์นี้ทั้ง PWC/PWCX และขอให้ถอด PWC ออกจากเคอร์เนล .. และลินุสก็ทำตามประสงค์ของ Nemosoft

ผลที่ตามมาคือผู้ใช้/แฮกเกอร์หลายคนพากันไม่พอใจการตัดสินใจของลินุส การถอดโค้ดออกจากเคอร์เนลถือเป็นเรื่องใหญ่พอสมควร เพราะมีผลกระทบกับผู้ใช้ ปกติแล้วลินุส หรือ maintainer ทุกคนจะไม่ถอดโค้ดออกจากเคอร์เนลถ้าไม่มีเหตุผลเพียงพอ ถึงแม้นักพัฒนาหยุดพัฒนาโค้ดนั้นไปแล้ว ไม่มีใครสานต่อ โค้ดก็จะยังอยู่ในเคอร์เนล และจะได้รับการดูแลเป็นครั้งคราวโดยลินุส หรือ maintainer ที่รับผิดชอบด้านนั้นๆ เพื่อให้สามารถทำงานภายในเคอร์เนลต่อไปได้ ในกรณี PWC/PWCX ลินุสตัดสินใจถอดออกจากเคอร์เนล เป็นเพราะ

  1. PWC เรียกว่าเป็น hook-only for binary-only driver ซึ่งทำให้เคอร์เนลไม่เสรี/โอเพน
  2. ไม่มีคนรับดูแล PWC ต่อจาก Nemosoft และ
  3. ลินุสถือว่า Nemosoft เป็นเจ้าของโค้ด PWC/PWCX เมื่อเจ้าของไม่ต้องการให้โค้ดอยู่ในเคอร์เนล ก็ถือว่าเป็นเรื่องใหญ่และควรจะให้เกียรติทำตามความต้องการ ถึงแม้ว่าในความเป็นจริงแล้วไม่มีใครเป็นเจ้าของโค้ดนี้ตั้งแต่แปะคำว่า GPL ..

เหตุผลที่ลินุสเน้นย้ำที่สุดคือข้อ 3 นี่แหละ ..

ใครถูกใครผิดก็ไม่รู้เหมือนกัน สำหรับผม เรื่องโอเพนซอร์สมีความสำคัญเหนือกว่าเรื่องเอาใจผู้ใช้เสมอ ไม่ว่าน้ำหนักผู้ใช้จะกดดันขนาดไหน แต่ถ้าทำให้โอเพนซอร์สไม่สะอาดเมื่อไหร่ คำว่า ‘โอเพน’ หรือ ‘ฟรี’ (as in free speech) จะไม่มีความหมายอีกเลย หากหลักการนี้ล้ม ปัญหาจะตามมาหลังจากนั้นอีกเยอะมาก ไม่เพียงเรื่องแนวคิดของโอเพน/ฟรีจะเสียไป แต่ในแง่เทคนิคก็จะเสียไปด้วย การที่มันโอเพน/ฟรีทำให้ลินุกซ์ก้าวไปได้เร็วและมั่นคง เพราะทุกคนเห็นซอร์ส ทุกคนสามารถช่วยกันแก้ไข ทุกคนสามารถช่วยปรับปรุงให้มันดีขึ้นได้ การปกปิดซอร์สทำให้ไม่สามารถคงสภาพการทำงานแบบนี้ได้อีก เสถียรภาพ และความปลอดภัยย่อมลดน้อยลง หากเกิดขึ้นกับเคอร์เนลก็คงไม่ใช่เรื่องดี

ทางออกสำหรับเรื่องนี้ ให้สวยที่สุดคือพัฒนาไดรเวอร์ที่เป็นโอเพนซอร์ส ถ้าทำไม่ได้จริงๆ ก็ย้ายส่วนไบนารีไปอยู่นอกเคอร์เนล หรือทำไดรเวอร์โมดูลที่ไม่ต้องใช้ hook ในเคอร์เนล ..

.. สุดท้ายจะออกมายังไง คงต้องติดตามดูกันต่อไป

PHP 4.3.8 on FreeBSD

เมื่อวานสั่ง portupgrade -a บน belldandy เสร็จแล้ว restart apache ขึ้นมาปรากฏว่า http://kitty.in.th เปลี๊ยนไป๋ .. feed ก็เจ๊งไปด้วย .. งงไปพักนึงก่อนจะหาเจอว่า แพ็กเกจ PHP บน FreeBSD หันมาแยกโมดูลเป็นส่วนๆ แล้ว โดยแยกไปไว้คนละที่กันเลย .. ใน ports ของ FreeBSD ตัวหลักยังเป็น lang/php4 หรือ www/mod_php4 (conflict กัน เลือกลงตัวเดียวพอ) .. จากนั้นต้องการอะไรเพิ่มเติมก็ต้องตามไปติดตั้งเอาเอง เช่น ต้องการเชื่อมกับ MySQL ก็ต้องลง databases/php4-mysql (หรือ php3- / php5- ) จะใช้ iconv ก็ต้องลง converters/php4-iconv หรือ จะใช้ zlib ก็ต้องลง archivers/php4-zlib ..

อืม ภาระเพิ่มขึ้นอีกนิด ถ้ารู้แล้วก็ไม่ใช่เรื่องยากอะไร .. ทำแบบนี้ก็ดีเหมือนกัน จะใช้อะไรก็คอมไพล์ติดตั้งเฉพาะโมดูลนั้นๆ โดยไม่ต้องเสียเวลาคอมไพล์ PHP ใหม่ทั้งหมดหมด จะถอดโมดูลออกก็ง่าย :)