Many things happened

win32 codecs loading problem: ที่ผ่านมาลินุกซ์บางเครื่องไม่สามารถใช้งาน win32 codecs ได้ไม่ว่าจะผ่านทาง mplayer หรือ xine .. เรื่องนี้เคยเกิดกับผมเหมือนกัน เป็นๆ หายๆ อยู่พักนึง ก็เลยพยายามกูเกิ้ลจนพบว่า ปัญหานี้เกิดจาก combination ของ prelink + exec-shield + โปรแกรมที่ใช้งาน win32 codecs .. อธิบายนิดฟีเจอร์ exec-shield เพิ่มเข้าไปในเคอร์เนลเมื่อปีที่แล้ว (โดย Ingo Molnar @ Red Hat) exec-shield จะ remap address เวลาโหลดไลบรารีเป็นการป้องกัน buffer/stack/pointer overflow attack .. เดิม address remapping ทำโดยการสุ่มพื้นที่เวลาโหลดไลบรารี .. ภายหลัง Red Hat ก็เอาฟีเจอร์ prelink มาใช้งาน การสุ่มพื้นที่เลยเปลี่ยนไปทำตอน full prelink ซึ่งปกติจะทำงานทุกสองสัปดาห์ (อันนี้เองที่เป็นสาเหตุว่าทำไมมันเป็นๆ หายๆ) .. โอเค ร่ายมายาว ประเด็นคือ dll ใน win32codecs หลายๆ ตัวจำเป็นต้องโหลดลงพื้นที่ๆ กำหนดไว้เท่านั้น (e.g., 0x400000) ถ้า exec-shield/prelink เลือกโหลดไลบรารีบางตัวในพื้นที่ไปแล้ว ก็จะไม่สามารถโหลด win32codecs ได้ ผลก็จะกลายเป็น segmentation fault .. วิธีแก้ คือ ยกเลิกการใช้ exec-shield แล้วทำ full prelink โดย

แก้ไฟล์ /etc/sysconfig/prelink จาก

PRELINK_OPTS=-mR

เป็น

PRELINK_OPTS="-mR --no-exec-shield"

** สังเกตดีๆ อย่าลืมใส่ double quote

สร้างไฟล์ เป็นแฟล็กสำหรับ force full prelink

touch /var/lib/misc/prelink.force

สั่ง prelink

/etc/cron.daily/prelink

รอพักนึง

set executable stack flag สำหรับโปรแกรมที่ใช้ win32codecs i.e., mplayer, xine

execstack -s /usr/bin/mplayer
execstack -s /usr/bin/xine

ขั้นตอนนี้เท่าที่ลอง บางครั้งก็ไม่ต้องทำ YMMV ..

ข้อเสียของวิธีนี้คือ มีความเสี่ยงกับ overflow attack มากกว่าระบบปกติ .. tradeoff กันเอาเองเน้อะ (ref: http://mplayerhq.hu/DOCS/HTML/en/faq.html )

cdrecord กับ kernel 2.6.8.1: ใช้งานร่วมกันแล้วมีปัญหา cdrecord ไม่สามารถส่งคำสั่งผ่านเคอร์เนลไปเขียนซีดีได้ .. workaround คือถอยกลับไปใช้ 2.6.7 หรือใช้ cdrecord as root (me: setuid เอาก็ไม่ได้) .. fix ใช้แพตช์ (ตามหาใน LKML เอาเอง :p) หรือไม่ก็รอ mm-patch หรือเคอร์เนลตัวถัดไป .. OT: สำหรับคนที่อยู่กับ LKML มานานพอสมควร เห็นหัวข้อ cdrecord มาพร้อมกับ kernel คงพอเดาได้ว่าจะเกิดอะไรขึ้น .. Joerg Schilling (คนเขียน cdrecord) เป็นโปรแกรมเมอร์ที่เก่ง แต่พี่แกไม่ฟังใครเลย เอาแต่ใจเป็นที่สุด .. ครั้งนี้ก็เช่นกัน ต่อความยาวสาวความยืดกับ Jens Axboe (@ SuSE – kernel hacker – I/O) เรื่องเดิมๆ อีกแล้ว .. ลอล

Keyboard ของ peorth เจ๊ง: ยกไปเซอร์วิสที่ Zeer รังสิต คราวที่แล้วไปเคลมฮาร์ดดิสก์พนักงาน Acer Service ที่ Zeer พูดจาแย่มาก ผมเดินออกมาเลย รวย ไม่เคลมก็ได้ ไม่ง้อหรอกเว้ย .. เที่ยวนี้ดีขึ้น เลยเอาดิสก์ไปเคลมด้วยเลย นึกว่าจะได้ “สู้ว๊อย” ซะแล้ว .. ลอล .. anyway, อะไหล่ไม่มี เลยเอาเครื่องกลับมาใช้งานก่อน ..

kernel 2.6.8.1: มีผลของ make oldconfig (จาก 2.6.7-mm5) อีกเครื่องนึงมาเพิ่มเติม

  • Message Signaling Interrupts (MSI and MSI-X)
  • Sensor: Analog Device ADM1025 and compatible
  • Sensor: Analog Device ADM1031 and compatible
  • Sensor: National Semiconductor LM77