Theppitak's blog

My personal blog.

31 สิงหาคม 2547

Anti-Spam

ถ้าจำกันได้ เมื่อประมาณ 10 ปีที่แล้ว ช่วงที่อินเทอร์เน็ตบูมใหม่ๆ ในสยามประเทศ เราจะได้รับ forward mail ประเภทว่า “อย่าเปิดเมลที่มีหัวข้อ ... เพราะมันมีไวรัส และสามารถทำลายข้อมูลในฮาร์ดดิสก์ของคุณ ขอให้ส่งต่อเพื่อเตือนคนรู้จักด้วย” แล้วก็จะหัวร่อ เพราะรู้ๆ กันอยู่ ว่าเมลมันเป็นแค่ข้อความล้วนๆ ไม่ใช่โปรแกรมที่จะสามารถสร้างพิษสงอะไรได้ อีกทั้งเว็บที่รวบรวม internet hoax ทั้งหลาย ก็ขึ้นทำเนียบ hoax ชนิดนี้ไว้เรียบร้อย พร้อมคำอธิบายคล้ายๆ กันนี้ โดยรวมอยู่กับ hoax อื่นๆ เช่น เด็กเป็นมะเร็ง ต้องการเงินค่ารักษาด่วน เศรษฐีคนหนึ่งตั้งเป้าไว้ว่า ถ้าเมลฉบับนี้ถูกส่งถึงผู้รับครบตามเป้า ก็จะออกค่ารักษาให้ ฯลฯ

แต่ดู พ.ศ. นี้สิ ไวรัสในเมลกลายเป็นเรื่องปกติ ใครกันนะ ที่ทำให้ฝันของ spammer พวกนี้เป็นจริง?

ไม่ต้องมีโปรแกรมที่ชอบทำตัว “ฉลาดๆ” จนกลายเป็นเครื่องมือแพร่ไวรัสเหล่านั้น ลำพังเรื่อง spam mail อย่างเดียว ก็เป็นปัญหาโลกแตกอยู่แล้ว ยิ่งฝ่ายป้องกัน spam พัฒนาเทคนิคในการตรวจจับให้ดีเท่าไร ฝ่าย spammer ก็ยิ่งพัฒนาเทคนิคใหม่ๆ เพื่อจะหลบเลี่ยง เอาไปเอามา CPU ของ server ก็ถูกใช้งานหนักขึ้นเรื่อยๆ เพื่อไล่จับพวกก่อกวนเหล่านี้ แบนด์วิดธ์ก็ถูกผลาญทิ้งกับเรื่องไม่เป็นเรื่อง อีกทั้งบางที ผู้ใช้ปกติที่ไม่รู้อิโหน่อิเหน่ ก็ต้องพลอยเดือดร้อน เมื่อเมลดีถูกเหมารวมว่าเป็น spam

ผมไม่รู้ ว่า spammer ใช้เทคนิคอะไรบ้าง แต่ดูเหมือนว่าผู้ใช้ TOT อย่างผม จะมีปัญหาเรื่องเมลอยู่เนืองๆ เช่น ถ้าใช้ SMTP ของ TOT ก็มีบางครั้งเจอ blacklist เด้งกลับ หรือถ้าใช้ local MTA ส่งโดยตรง ก็เจอปัญหา IP not fully qualified ทั้งหมดนี้ ก็เข้าใจอยู่ว่าเป็นวิธีป้องกัน spam แต่เน็ตฟรีอย่าง TOT คงเป็นแหล่งที่เหมาะสำหรับ spammer ผู้ใช้ปกติเลยต้องพลอยติดร่างแหไปด้วย

มาประกาศสงครามกับ spammer กันไหม?

ผมยังไม่รู้จักเครื่องมือดีๆ สักเท่าไร (เป็น admin มือใหม่) เท่าที่รู้มา เรียงตามลำดับความก้าวร้าวก็:

  • โยน spam ลงถัง โดยติดตั้ง spam filter เป็นวิธีตั้งรับอย่างเดียว spam mail จะผ่าน MTA เข้ามาในระบบได้ แต่จะถูก spam filter ตรวจพบและโยนลงถังขยะ แต่ spammer ซึ่งไม่ถูก reject ก็รู้แล้วว่า address นี้ใช้การได้ สามารถ spam มาได้อีก แม้ spam filter จะช่วยให้ผู้ใช้เทขยะได้ง่าย แต่ก็นับว่า server ต้องเปลือง CPU สำหรับตรวจเมลทุกฉบับเหมือนกัน

    spam filter ที่เป็นที่นิยมก็คงไม่พ้น SpamAssassin (ใครต่อใครก็แนะนำแต่ตัวนี้ให้ผม) ใช้เทคนิคหลายอย่างร่วมกัน ทั้งการวิเคราะห์หัวเมล, เนื้อหา, ตรวจสอบ blacklist, train ด้วยสถิติ (Bayesian), ใช้ distributed blacklist อย่าง Razor หรือ Pyzor IBM developerWorks มี บทความ แนะนำ spamassassin ด้วย

    นอกจากนี้ ยังมี Bayesian filter ใน debian อีกหลายตัว เช่น bogofilter, spamprobe, spamoracle

  • ไม่รับ spam โดยใช้เทคนิคที่เรียกว่า Greylisting ซึ่งผู้เขียนคุยว่าได้ผลถึง 97% โดยไม่กิน CPU ของ server มากเหมือนการใช้ filter วิธีการคือ ให้ MTA เด้งเมลที่มาจาก sender IP + envelope sender + envelope recipient ชุดที่ไม่เคยรู้จักไปก่อนในลักษณะ temporary failure เป็นระยะเวลาที่กำหนด ซึ่งถ้าเป็นเมลจริงที่ส่งจาก MTA ตาม spec ของ SMTP จะพยายามส่งใหม่ และมาถึงในที่สุด แต่ถ้ามาจากโปรแกรม spam หรือไวรัส เกือบทั้งหมดจะไม่พยายามใหม่ แล้วก็หายไปในที่สุด ไม่หลุดมาถึง filter หรือ mail box เลย (แต่วิธีนี้ อ่านดูแล้ว อาจป้องกันกรณีการลักใช้ mail relay ที่ maintain ไม่ดีไม่ได้ รวมทั้งอาจ block เมลที่ส่งจาก local MTA ของคนที่ต่อ TOT ที่ได้ dynamic IP จำกัดระยะเวลาด้วย) สำหรับ spam ที่หลุดรอดมาจาก greylisting ได้นั้น ผู้เขียนบอกว่า จะมีลักษณะเหมาะที่ spam filter อื่นจะตรวจจับได้ง่าย เช่น การหน่วงเวลาทำให้ขึ้น blacklist ได้ทัน หรือเป็น spam ที่มาจาก IP หน้าเดิมๆ เห็นปุ๊บก็จำได้ ฯลฯ

  • แกล้งโปรแกรมเก็บแอดเดรส ที่ชอบมากวาดเอา e-mail address ตามเว็บต่างๆ ด้วยการสร้างเว็บมั่วๆ ที่เต็มไปด้วย e-mail address ที่ดูเหมือนจริง แต่ไม่มีอยู่จริง เป็นขยะก่อกวนฐานข้อมูลของ spammer เล่นๆ หรือถ้ารู้ address ของ spammer ก็อาจใส่ลงไป เพื่อให้ spammer spam กันเองก็ได้

    โปรแกรมในแนวนี้ ได้แก่ sugarplum ซึ่งจะ redirect URL ไปยัง CGI ซึ่งสร้างเว็บแบบสุ่มอัตโนมัติด้วย dictionary และอุดมไปด้วย e-mail ปลอม แต่ทั้งนี้ ข้อควรระวังคือ ควรสร้างไฟล์ robots.txt เพื่อกัน search engine ดีๆ ไม่ให้มาเปลืองเก็บ index ในเว็บยาเบื่อนี้ด้วย

  • แกล้งโปรแกรม spam โดยตรง ด้วยเทคนิคที่เรียกว่า teergrube ซึ่งจะหน่วงเวลา MTA ให้ช้า ถ้าพบว่าเป็น spammer ทำให้ประสิทธิภาพของการ spam ลดลง ใน debian จะมี package ที่ชื่อ sa-exim ที่จะ config ให้ exim4 ใช้ spamassaassin แต่เนิ่นๆ ตั้งแต่ขั้นการเชื่อมต่อ SMTP และ reject spam ก่อนหลุดเข้ามายัง mail box ของผู้ใช้ คล้ายกับที่ greylisting ทำ แต่ด้วยกฎที่ซับซ้อนกว่า บวกด้วยตัวเลือกที่สามารถ teergrube ผู้ส่งได้ด้วย

    บางคนอาจตั้ง mail server ไว้ให้ teergrube แล้วเอา address ไปปล่อยไว้ตามเว็บ หรือโพสต์ต่างๆ โดยมีข้อความกำกับว่าอย่าส่งมา แต่โปรแกรมเก็บแอดเดรสมันไม่สนหรอก spam แหลก ก็เจอ teergrube

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

แต่ดูๆ แล้ว ผู้ใช้ TOT จะไม่ผ่านในหลายๆ เทคนิค คงต้องทำใจ ก็ใช้ของถูกอะ (ไม่ฟรีนะ ค่าโทรเดือนที่แล้วของผมเกิน 900 อีกแน่ะ แพงกว่าอัตราต่ำสุดของ unlimited ADSL เลยแหละ)

ส่วนโปรแกรมกรองไวรัสสำหรับ client ที่เป็น Windows ทั้งหลาย ไว้หาอีกที ที่มีรายชื่อตอนนี้ก็ amavis-ng, clamav, messagewall, sanitizer ใครมีอะไรแนะนำก็ขอขอบคุณครับ ☺

28 สิงหาคม 2547

รถโฆษณา (3) - Micro-globalization

ความจริงแล้ว การเปลี่ยนแปลงแบบรวมศูนย์แล้วกระจายกลับ (ที่พูดถึงใน blog ก่อน) มันได้สิ่งที่ต่างจากเดิม ซึ่งอันที่จริง มันก็เป็นภาคย่อยๆ ของกระแสโลกาภิวัตน์ แต่อยู่ในขนาดที่เล็กลง

ในระดับโลก การปฏิวัติอุตสาหกรรมทำให้เกิดทุนนิยม (หรือกลับกันหว่า?) ในช่วงแรก ทุนนิยมทำให้เกิดการแข่งขัน แต่พอทุนนิยมเติบโตจนอิ่มตัว ก็เกิด self-organization ในลักษณะที่ทุนไปกระจุกเป็นหย่อมๆ ใครทุนหนาอยู่รอด ใครทุนน้อยก็ถูกกลืนกิน จนสุดท้าย คนอยู่รอดก็โตจนเป็นธุรกิจข้ามชาติ บริษัทยักษ์ใหญ่ต้องเริ่มคิดในแนวครอบจักรวาลมากขึ้น เพื่อรองรับลูกค้าทั่วโลก ในขณะเดียวกัน ใครบางคนก็พูดถึงการปฏิวัติครั้งที่สาม คือการปฏิวัติ ICT ทำให้โลกเคลื่อนเข้าสู่ยุคใหม่ ที่สามารถกระจายการบริการไปสู่ภูมิภาคต่างๆ ได้สะดวกยิ่งขึ้น ไม่ต้องกระจุกรวมอยู่แต่ในตัวเมืองเหมือนยุคอุตสาหกรรม

ผมชอบเปรียบเทียบเรื่องนี้กับอุตสาหกรรมซอฟต์แวร์ ที่ก็ผ่านยุคทั้งสามนี้มาเหมือนกัน ยุคแรกๆ มีซอฟต์แวร์ท้องถิ่นเกิดขึ้นมากมาย แฮกเกอร์ผลิตงานออกมาเป็นงานอดิเรก วารสารคอมพิวเตอร์นำเสนอเรื่องเทคนิคในระดับลึกกันอย่างสนุกสนาน แต่ภาพรวมของทั้งโลกก็คือ แต่ละท้องถิ่นต่างคนต่างทำซอฟต์แวร์ป้อนท้องถิ่นตัวเอง เหมือนยุคเกษตรกรรม ต่อมาบริษัทยักษ์ใหญ่เริ่มครองตลาด การผลิตซอฟต์แวร์เริ่มรวมศูนย์เป็นจุดๆ แฮกเกอร์ที่เคยเขียนโปรแกรมอย่าง CU Writer, ราชวิถีเวิร์ด ฯลฯ หมดแรงแข่ง ต้องปรับเปลี่ยนเป็นช่วยพัฒนาแอพพลิเคชันบนนั้น โดยต้องรวมตัวกันเป็นบริษัท แต่ก็ไม่มีใครทำอะไรได้มาก อาจจะเทียบเคียงได้กับยุคอุตสาหกรรม ที่ผู้คนในภูมิภาคที่เคยทำไร่ทำนาก็เริ่มสู้ไม่ไหว ต้องเลิกทำแล้วอพยพเข้าโรงงาน รอจนบริษัทเหล่านั้นเริ่มเกิดพุทธิปัญญาเกี่ยวกับคำว่า “internationalization” จึงเริ่มผนวกแนวคิดเรื่องท้องถิ่นเข้ากับอุตสาหกรรม แล้วเอามารับใช้กระแสโลกาภิวัตน์ นั่นแหละ ถึงเริ่มมีการกระจายความสนใจกลับมาที่ภูมิภาคต่างๆ ด้วยการศึกษาภาษาเขียนต่างๆ ในโลกอย่างเอาจริงเอาจัง แต่ก็ด้วยมาตรฐานของศูนย์กลาง ไม่ใช่ของภูมิภาคอีกต่อไป

หรือถ้ามองสังคมระดับประเทศก็ไม่ต่างกันมาก การพัฒนาต่างๆ ได้ระดมคนจากส่วนภูมิภาคเข้าไปทำงานให้กับส่วนกลาง โดยความสำคัญของท้องถิ่นถูกลดลงไป จนถึงจุดเปลี่ยนล่าสุด ที่ส่วนกลางเริ่มมองมาที่ท้องถิ่นอีกครั้ง แต่ก็ด้วยการผสมผสานกับมาตรฐานกลางที่กำหนดขึ้นแล้ว ก็ไม่แน่ ว่าต่อไป รายการทีวีอาจจะมีการ “localize” ตามภูมิภาคในรูปแบบต่างๆ ซึ่งความจริงก็มีไปเยอะแล้ว อย่าง มาสเตอร์คีย์ 4 ภาค หรือ DVD 4 ภาค หรือเห็นชัดๆ เลยก็ “แฟนจ๋า” ของป้าเบิร์ด แต่อาจจะมีมากกว่านั้น เช่น มีการแบ่งช่วงรายการที่เป็นของท้องถิ่นโดยเฉพาะ เป็นช่วงที่ทั้ง 4 ภาคจะรับสัญญาณต่างกัน ซึ่งอาจจะทำได้โดยตั้งสถานีท้องถิ่นไปเลย (เหมือนของกรมประชาสัมพันธ์สมัยก่อน) แล้วส่วนกลางก็ผลิตรายการป้อนให้เป็นแพกเกจ สถานีท้องถิ่นก็เลือกรับสัญญาณมาถ่ายทอดโดยตรง สลับกับรายการที่จัดขึ้นเอง ฯลฯ ผมว่า การกระจายความเจริญกลับ มันน่าจะเป็นแบบนี้แหละ คือสนับสนุนให้ท้องถิ่นทำเอง เหมือนยุคก่อนที่จะเปลี่ยนมาเป็นบริโภคนิยมอย่างทุกวันนี้

รถโฆษณา (2)

รถโฆษณา คงเป็นช่องทางกระจายข่าวช่องทางเดียวที่ทรงประสิทธิภาพที่สุด สำหรับต่างจังหวัด ถัดจากนั้นก็คงเป็นการแจกใบปลิว และติดป้ายตามเสาไฟฟ้า บางทีก็มีโฆษณาจากจังหวัดข้างเคียงมาด้วย

อีกทางหนึ่งที่เป็นไปได้คือวิทยุ ผมเองไม่ค่อยได้ฟังวิทยุ แต่พบว่า ตามออฟฟิศต่างๆ มักจะเปิดวิทยุให้คนทำงานฟังไปด้วย แต่ถ้าเป็นที่ที่คนพลุกพล่าน หรือเป็นร้านอาหาร ก็จะเปิดทีวีแทน

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

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

อาจเรียกได้ว่า การรวมศูนย์ทีวีส่วนภูมิภาคทั้งหมด เข้าเป็นช่อง 11 ช่องเดียวของกรมประชาสัมพันธ์ ได้ทำให้ชุมชนท้องถิ่นต่างๆ สลายตัวไป ทำให้กรุงเทพฯ กลายเป็นศูนย์กลางของทุกสิ่งทุกอย่างอย่างแท้จริง สิ่งที่จะกลายเป็น “กระแส” เป็น “talk of the town” ของท้องถิ่นเอง ถูกกำหนดจากส่วนกลางเพียงอย่างเดียว บวกกับความเปราะบางของคนอีสาน ที่มักถูกกีดกันออกจากคนส่วนอื่นๆ ของประเทศในหลายๆ เรื่องอยู่แล้ว (โดยเฉพาะวัฒนธรรม ภาษาพูด) เมื่อทีวีที่เป็นศูนย์กลางข่าวสารและความเคลื่อนไหวสูญหายไป คนอีสานก็ยิ่งกระจัดพลัดพราย โดยแหล่งที่จะมุ่งสู่ ก็ไม่ใช่ที่ไหน นอกจากกรุงเทพฯ ถ้าไม่นับคนที่ข้ามช็อต ไปต่างประเทศไปเลย แต่ไม่ว่าจะอย่างไร ผลลัพธ์ก็คือ ค่านิยมละทิ้งถิ่นฐาน ไปแสวงหา “ความสำเร็จ” ในที่อื่น ความเคลื่อนไหวที่คงอยู่ในท้องถิ่น ก็กลับไปอาศัยวิธีโบราณ เช่นการพูดคุยปากต่อปาก การแจกใบปลิว หรือใช้รถโฆษณา เทศกาลท้องถิ่นอย่างงานไหม งานตลาด หรือลอยกระทงออกพรรษา จากเดิมที่เป็นงานยิ่งใหญ่ ทุกวันนี้จัดแบบตามมีตามเกิด จำได้ว่ามีปีหนึ่งระหว่างอยู่กรุงเทพฯ เกิดคิดถึงบ้าน อยากกลับมาเที่ยวงานไหม พอมาเห็นสภาพคนโหรงเหรงแล้ว มันเศร้าๆ บอกไม่ถูก (เศร้าด้วย ที่ตัวเองก็เป็นส่วนหนึ่งของความเปลี่ยนแปลง)

มันเป็นผลของการรวมศูนย์ ทำให้ความเจริญในส่วนกลางถูกเติมเต็ม โดยสูบทรัพยากรจากส่วนภูมิภาค (คงปฏิเสธไม่ได้ ว่าถ้าเอาคนอีสานออกจากกรุงเทพฯ ให้หมด กรุงเทพฯ คงไม่เหลืออะไรมาก) ขณะเดียวกัน ก็ไปสร้างปัญหาความแออัด อาชญากรรมในเมืองหลวง

การกระจายความเจริญ ดูจะเป็นคำตอบที่ชัดเจน และรัฐก็ดูจะยึดเป็นนโยบายหลัก สำหรับผม อย่างน้อยก็ชอบแนวคิด OTOP ละ ถึงมันจะเน้นขายของ แต่มันก็ทำให้วัฒนธรรมท้องถิ่นได้รับการเหลียวแลมากขึ้น แต่ในเรื่องอื่นๆ ของการกระจายความเจริญ ก็มีความแหลมคมให้ระมัดระวังอยู่เหมือนกัน เพราะต่อไปนี้ กลุ่มทุนต่างๆ จะหันมามองภาคอีสานมากขึ้น อย่างห้างใหญ่ๆ ที่มาลง ก็กระทบธุรกิจท้องถิ่นไม่น้อย (ล่าสุดคือตึกคอม รับ ICT City) สำหรับบางคน มันกลายเป็นว่า คนที่ตั้งหลักสู้ในท้องถิ่นในช่วงที่ผ่านมา จะต้องถูกเกลี่ยทับด้วยธุรกิจจากส่วนกลาง กลายเป็นว่า ส่วนกลางมีอิทธิพลต่อท้องถิ่นอย่างเบ็ดเสร็จกว่าเดิม ต่อไป จังหวัดหัวเมืองอย่างขอนแก่น ก็คงเป็นแค่สาขาหนึ่งของกรุงเทพฯ ไม่ใช่ขอนแก่นที่เป็นขอนแก่นเองอีกต่อไป

ผมไปช่วยโครงการอย่าง Laonux ผมไม่เคยกล่าวอ้างว่าไป “ทำ” ระบบภาษาลาวให้เขา และผมไม่พยายามจะทำอย่างนั้นด้วย ผมแค่ไป “ช่วยแนะ” ให้เขาทำเองได้ (และร่วมรับผิดชอบนิดๆ หน่อยๆ) เท่านั้น พอเขาเดินไปได้ ผมก็ถอยออกมาช่วยอยู่ห่างๆ ให้เขามีความภาคภูมิกับสิ่งที่เขาทำได้เอง ..ผมอยากให้ “การกระจายความเจริญ” สู่ท้องถิ่นผม เป็นแบบนั้นบ้างจัง อย่างน้อยก็ขอทีวีท้องถิ่นคืนมาบ้าง :-/

27 สิงหาคม 2547

รถโฆษณา (1)

สิ่งที่คู่กันกับถนนในเมืองตามต่างจังหวัด ก็คงเป็นรถโฆษณา มีมาให้เห็นทุกวันตั้งแต่เด็ก ห่างหายไปหลายปีที่ไปอยู่กรุงเทพฯ กลับมาตอนนี้ รถโฆษณาก็ยังมีเหมือนเดิม ทั้งโฆษณาภาพยนตร์ ห้างสรรพสินค้าจะลดราคา เทศบาลจะเปิดตลาดใหม่ ฯลฯ

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

ท่ามกลางความวุ่นวายเหล่านี้ ผมมีวิธีการของผม ที่จะแสวงหาความสงบ ผมมักจะปลีกตัวจากมลภาวะทางเสียงเหล่านั้น มานั่งอ่านหนังสือในห้อง ผมไม่ถกเถียงอะไรกับคนอื่น เพราะมันสิ้นเปลืองพลังงานมากเกินไป ผมคุ้นเคยที่จะแยกเสียงแปดหลอดที่ราวกับจะตะเบ็งแข่งเสียงรถเหล่านั้น รวมไปกับ noise บนถนน แล้วอยู่ในโลกของตัวเอง มีความสุขกับสิ่งที่ตัวเองทำโดยลำพัง

บางที คำอธิบายที่ผมไม่ได้บอกอาจารย์ท่านนั้นไป อาจเป็นแค่คำอธิบายง่ายๆ ว่า “ผมพูดน้อย เพราะที่บ้านผมเสียงดังเกินกว่าจะได้ยินเสียงผม และผมพูดค่อย เพราะผมชอบพูดกับตัวเองครับ”

และโดยนิสัยเช่นนี้ ผมจึงมักจะใช้เสียงเมื่อโกรธเท่านั้น (เวลาที่ผมจำเป็นต้องใช้เสียงในโอกาสต่างๆ น้ำเสียงจึงมักคล้ายคนโกรธ เพราะไม่คุ้นเคยกับการใช้เสียงโดยไม่โกรธ) แต่ถ้าโกรธมากๆ (ซึ่งนานๆ จะมีสักครั้ง) ผมก็จะเงียบไปเลย แล้วแปรเปลี่ยนเป็นการปฏิบัติแทน

แต่ถ้าเป็นเรื่องการเขียนล่ะก็ ผมรู้สึกเป็นอิสระจากปัจจัยต่างๆ ดังกล่าว ดังนั้น ถ้าเลือกได้ระหว่างพูดกับเขียน ผมมักจะเลือกการเขียนเสมอๆ

พอมาประสานกับโลกอินเทอร์เน็ต ก็เข้าแก๊กเปี๊ยบ: “You can be an engineer if you have more friends on-line than in real life.” เคยเจอใน joke แล้วสะดุ้งเหมือนกันนะเนี่ย ที่พบว่าตัวเองเขียนเมลมากกว่าคุยกับมนุษย์โดยตรง

ว่าจะเขียนถึงรถโฆษณาในอีกประเด็นหนึ่ง แต่เปลี่ยนเรื่องไปเสียแล้ว ไว้เขียนแยกต่างหากอีกตอนละกัน :-P

25 สิงหาคม 2547

Browse Happy

ไปเจอ browsehappy.com จาก /. รวมพลคนเบื่อ IE ครับ อ่าน ข่าวฉาวโฉ่ของ IE แล้วก็แปลกใจ โอ้โห โลกใบนั้นมันเลวร้ายขนาดนี้เลยหรือ? (ไม่รู้ครับ พอดีไม่ได้ใช้ IE มาเป็นชาติแล้ว ครั้งล่าสุดที่เปิดเห็นจะเป็นตอนทดสอบ squid proxy ที่โรงเรียน จนเห็น blog แหวะๆ ของตัวเองบนนั้น) นี่ขนาดไม่ได้ใช้ Windows แค่ได้รับผลกระทบจาก virus mail จาก Outlook อย่างเดียว มันก็ย่ำแย่พอแล้วนะ ^_^!

24 สิงหาคม 2547

The choice for Webmail

วันนี้ทดลองใช้ webmail ทั้ง 5 ตัวที่ลงไว้อย่างคร่าวๆ เพื่อดู feature ต่างๆ โดยพยายามเลือกดู feature ที่จำเป็นก่อน พอสรุปได้ว่าอย่างนี้:

webmail backend แปลไทย tis-620 folder filter take address from mail theme auto reply
squirrelmail IMAP Y Y IMAP P* P* Y -
imp IMAP Y Y broken del. only - - -
ilohamail IMAP - - IMAP - Y Y -
sqwebmail Maildir - - IMAP - - - -
openwebmail mbox Y Y own Y Y Y Y

เป็นอย่างที่เด่นสินว่าไว้ imp มีปัญหาในหลายๆ จุด เช่น สร้าง folder แล้ว แต่มองไม่เห็น folder รวมทั้ง filter ก็สั่งย้ายเมลเข้า folder ไม่ได้ด้วย จุดนี้ยังหาสาเหตุไม่พบ แต่การมีปัญหากับ feature สำคัญอย่างนี้ ก็ทำให้ต้องตัดตัวเลือก imp ออกไปหนึ่งตัว

ส่วน sqwebmail ซึ่งอ่าน Maildir โดยตรงโดยไม่ผ่าน IMAP นั้น เป็นสิ่งที่อยากได้ที่สุด แต่ความอัปลักษณ์ของ interface และ feature ที่จำกัดจำเขี่ย ทำให้ต้องตัดตัวเลือกนี้ออกไปเช่นกัน

ถ้าไม่นับความสามารถเรื่องภาษาไทยแล้ว ilohamail นับว่าน่าสนใจมาก เพราะอุดช่องโหว่ของ imp ไปมากมาย ถ้าเพิ่มภาษาไทยได้ ก็จะสูสีกับ squirrelmail ทีเดียว ส่วนเรื่องหน้าจอ login ที่มีช่องกรอกมากเกินไปนั้น คิดว่าแก้ไขได้ ก็เลือกตัวนี้ไว้เป็นอันดับรองๆ ถ้ามีเวลาทำภาษาไทยก็อาจจะได้คะแนนเพิ่ม

squirrelmail มาแรงเรื่องภาษาไทยและการรองรับรหัส TIS-620 แต่สิ่งที่ขาดไปก็คือ mail filter ที่ใช้คัดแยกจดหมาย และการสั่งเพิ่ม address จาก mail โดยตรง เรื่องของ filter นั้น ความจริงไม่ใช่หน้าที่ของ webmail แต่อยู่ที่ mail delivery (courier-maildrop หรือ procmail) แต่เวลา deploy ผ่าน webmail อย่างนี้ ผู้ใช้ไม่มีโอกาสเข้าไปเซ็ต filter เอง ก็น่าจะจำเป็นต้องมี web interface ช่วย เดี๋ยวไว้คิดอีกทีว่าจะแก้ยังไง แต่ ณ จุดนี้ นับว่า squirrelmail น่าใช้มากๆ

openwebmail นี่แหละ webmail ตัวจริง มีครบแทบทุกอย่างที่อยากให้มี แถมอ่าน mail box โดยตรงโดยไม่ผ่าน IMAP ยิ่งทำให้ประสิทธิภาพดีขึ้น เหลืออยู่สองอย่าง คือความ compatible กับ IMAP อย่างที่ sqwebmail มี และการสนับสนุน Maildir

ในที่นี้ มีความต้องการเฉพาะอยู่อย่างหนึ่ง คืออยากให้ใช้ IMAP หรือ POP3 ผ่าน MUA ตามใจ user ได้ โดยสามารถใช้ web interface ได้ด้วย (คาดว่า ผู้ใช้น่าจะใช้ MUA เป็นหลัก แล้วใช้ webmail ตอนที่เดินทางไปที่อื่น) ในแง่นี้ การอ่านเฉพาะรูปแบบ mbox ของ openwebmail อาจจะพอแก้ไขได้ โดยเซ็ต MTA ให้กลับมาใช้ mail spool เหมือนเดิม แต่เรื่องการจัดการ folder เองเนี่ย ทำให้ MUA อื่นเข้ามา access folder ของ openwebmail ไม่ได้ ก็เป็นตัวเลือกที่น่าหนักใจไม่น้อย แต่ถ้าจะเปิดบริการ webmail เป็นหลักอย่างเดียว โดยไม่สนใจ IMAP ล่ะก็ openwebmail คงเป็นตัวเลือกอันดับหนึ่งไปแล้ว

งานนี้ก็เลยดูเหมือนไม่มีทางเลือกที่ดีที่สุด (อุดมคติก็คือ อ่าน mail box โดยตรงโดยยังคง IMAP compatible เหมือน sqwebmail แต่ความสามารถเพียบพร้อมเหมือน openwebmail) จากเงื่อนไขต่างๆ ก็คงต้องเป็น squirrelmail เสียแล้วแหละ โดยมี ilohamail เป็นอันดับสอง แต่ต้องหาเวลาเพิ่มภาษาไทยก่อน

*Update: เพิ่งมาพบทีหลัง ว่า squirrelmail ทำเรื่องเหล่านี้ได้เหมือนกัน ถ้าเซ็ต plug-in เอา ..สรุปว่า squirrelmail มีทุกอย่างที่ต้องการล่ะ (auto reply นั่น ไม่คอขาดบาดตาย)

23 สิงหาคม 2547

Webmail

เมื่อวานลองนั่งเซ็ตเว็บเมลเล่นๆ หลังจากที่เซ็ต DNS และ exim4 ให้รับ-ส่งเมลได้ตามปกติไปแล้ว ได้ผ่านคอร์ส webmail ของ อ.ต่าย ก็รู้สึกว่าขั้นตอนการติดตั้งไม่ได้มากมายอะไร ในชั้น ลง postfix เป็น MTA ตามด้วย uw-imapd เพื่อให้บริการ IMAP แล้วลง squirrelmail ต่อ เซ็ตนิดเซ็ตหน่อยก็ได้แล้ว (นับว่าประสบความสำเร็จนะเนี่ย ที่ทำให้เรื่องที่ผมเคยคิดว่ายุ่งยาก ดูง่ายดายขนาดนี้)

แต่ว่า ก่อนหน้านี้ เคยค้น debian archive เจอ imap server หลายตัว นอกเหนือจาก uw-imapd ก็มี courier แล้วก็ cyrus ยังเลือกไม่ถูก แต่โดยส่วนตัวจะคุ้นกับ uw-imapd มากกว่า เพื่อเป็นการทดสอบไอเดีย ก็เลยใช้ uw-imapd ไปก่อน

พอมาถึง webmail interface ปรากฏว่ามีตัวเลือกให้มากมาย เท่าที่เจอใน debian archive ก็มี

  • squirrelmail (php4)
  • sqwebmail (จาก courier)
  • postman (ของ U. of Valencia เป็น C/C++ CGI สามารถ connect ได้ทั้ง IMAP และ NNTP สนับสนุนหลายภาษา)
  • openwebmail (perl)
  • imp3 (จาก horde project ใช้ php4)
  • ilohamail (fork จาก imp3 พัฒนาเพิ่มเติมมากมาย)

ก็เลยเริ่มทดลองทีละตัว

  • postman เลือกตัวนี้ก่อนเพราะเล็กสุด และเห็นเป็น C/C++ CGI น่าจะเร็วดี พอลงแล้ว ระบบ debconf ยังไม่ติดตั้งอะไรให้ แต่มีไฟล์ตัวอย่างให้ copy ก็จัดการเอามาแก้ หน้าเว็บใช้ HTML4 กับ Javascript อีกนิดหน่อย มี MOTD แต่พยายามเซ็ตให้มันเลือกหน้าภาษาไทยไม่สำเร็จ บวกกับพอ login ก็มีปัญหาเรื่องการ authenticate IMAP กับ uw-imapd อีก เลยข้ามตัวนี้ไปก่อน
  • squirrelmail ตัวนี้น่าจะเซ็ตง่าย แต่พอถึงตอน authenticate IMAP กลับมีปัญหากับ uw-imapd อีก ความจริงตัวนี้ดูน่าใช้ แต่ผมเซ็ต uw-imapd ไม่เป็นเอง อย่างไรก็ดี ความที่อยากทำขั้นแรกให้ผ่านก่อน ก็เลยข้ามตัวนี้ไปอีก
  • imp3 ตัวนี้ ติดตั้งแล้ว ทำ alias ใน apache และ apache-ssl อีกนิดหน่อย ก็เริ่มใช้ได้เลย (จิ๊ก config บางส่วนเพื่อ detect HTTPS มาจาก squirrelmail) และดูเหมือนจะคุยกับ uw-imapd รู้เรื่องเลยด้วย และที่สำคัญ มีคำแปลภาษาไทยแล้วด้วย! ดูจาก credit ผู้แปลมากจากมหาวิทยาลัยราชภัฏราชนครินทร์ ขอคารวะขอบคุณมา ณ ที่นี้ ทดลองใช้ดูแล้ว interface ก็สวยดี ฟังก์ชันครบครัน

จบเมื่อวาน ก็เลยได้ webmail ที่ใช้ได้ โดยใช้ exim4 + uw-imapd + imp3 แต่ถ้าคิดจะให้บริการผู้ใช้จำนวนมาก อาจต้องคิดเรื่องการ scale ให้ดี ก็เลยเข้ามาปรึกษาเพื่อนๆ ที่ #tlwg ปรากฏว่า ได้คำอธิบายละเอียดเรื่อง courier กับ cyrus จาก suchness ทำให้เข้าใจขึ้นเยอะ และหลายคนก็แนะนำให้ใช้ postfix + courier ซึ่งจากเหตุผลเกี่ยวกับการใช้ Maildir ที่มีประสิทธิภาพกว่า mbox ตามแบบฉบับ ก็เลยตกลงใจว่า ควรเลิกใช้ uw-imapd แล้วหันมาเลือกใช้ courier หรือ cyrus โดยดูจากความยากง่ายในการ config ก็คิดว่า courier น่าจะเหมาะ

วันนี้เลยมาถอด uw-imapd ออกเสีย แล้วใช้ courier-imap แทน แต่ทั้งนี้ ก็ต้องเซ็ต exim4 ให้คัดแยกเมลลง Maildir แทน mbox spool ด้วย ตรงนี้ต้องแก้ config file ตรงๆ เพราะ debconf ของ debian ยังไม่มีตัวเลือกให้ โดยไปแก้ไฟล์ /etc/exim4/exim4.conf.template ตรงบรรทัด:

LOCAL_DELIVERY=mail_spool
ให้เป็น
LOCAL_DELIVERY=maildir_home
แล้วสั่ง
# dpkg-reconfigure exim4-config
เป็นอันเสร็จพิธี จากนั้นก็ทดลองส่งเมลหาตัวเอง ก็พบไฟล์ใหม่ใน ~/Maildir/new จากนั้น ตรวจสอบ config ด้วย courier-webadmin รอบหนึ่ง แล้วใช้ mutt จากเครื่องอื่นเปิด imaps mail box ก็ใช้ได้เลย รวมทั้ง webmail ผ่าน imp3 ก็ใช้ได้ด้วย

ทีนี้ มีปัญหาหนึ่งเกี่ยวกับการเลือก webmail ที่คุยกันใน #tlwg คือ imp3 มัน connect IMAP ช้า วันนี้ก็เลยลอง ilohamail อีกตัว ซึ่งโฆษณาไว้ว่า ทำ IMAP cache ด้วย ลองใช้ดูก็พบว่า interface คล้าย imp3 มากๆ จะต่างกันก็ในรายละเอียดเล็กน้อยเท่านั้น แต่เงื่อนไขหนึ่งที่ทำให้ชะลอ ilohamail ไปก่อน ก็เพราะ login interface มันมีช่องต้องกรอกมากเกินไป เกรง user จะงง แถมไม่มีคำแปลภาษาไทยด้วย ก็เลยกลับมาหา imp3 ตามเดิม แต่ทำ IMAP cache ด้วย IMAP Proxy แทน ซึ่งจะช่วยคง IMAP connection ไว้หลังจากที่ webmail เสร็จการติดต่อในแต่ละครั้ง พอเข้ามาครั้งใหม่ก็ request ต่อได้เลย โดยไม่ต้อง login ใหม่ทุกครั้งไป ก็น่าจะแก้ปัญหาได้แล้วน่ะ

สรุป webmail config ในวันนี้คือ exim4 (Maildir) + courier + imapproxy + imp3

อีกแบบหนึ่งที่น่าสนใจ คือใช้ sqwebmail ที่มากับ courier เพราะ webmail ตัวนี้ ไม่ได้ติดต่อ mail box ผ่าน IMAP แต่อ่าน Maildir โดยตรง ทำให้รวดเร็วยิ่งขึ้น ทดลองใช้ดู ฟังก์ชันต่างๆ ก็ครบครันดี มีปฏิทินให้ด้วย ติดอยู่ที่ หน้าตายังต้องปรับปรุง ผู้ใช้ใหม่ยังเดาปุ่มต่างๆ ได้ยาก และข้อความยังไม่เป็นภาษาไทย ความจริงถ้าไม่ติดเรื่อง interface นี้ ลง courier ทั้งเซ็ตก็ดูจะครบวงจร

ว่าแล้วก็กลับไปลอง squirrelmail อีกครั้ง หลังจากลง courier แล้ว คราวนี้เข้าใช้งานได้สมบูรณ์ สามารถปรับแต่งอะไรๆ ได้ง่าย ฟังก์ชันก็ครบดี สมกับเป็น webmail ที่มี rating สูง ไม่แน่ อาจจะใช้แทน imp3 แต่ตอนนี้ ลงไว้เปรียบเทียบกันก่อน

สำหรับ postman นั้น คงไม่กลับไปลองอีก เพราะ customize ยาก หลายอย่างดูจะออกแบบไว้ใช้กับมหาวิทยาลัยเขาโดยเฉพาะ

ตอนนี้ก็เหลือ openwebmail สินะ ที่ยังไม่ได้ลอง

Update: ลอง openwebmail แล้ว เกือบจะเป็นคำตอบสำหรับ sqwebmail ได้เลยแหละ เพราะ openwebmail อ่านเมลจาก mail box โดยตรง ไม่ผ่าน IMAP, มี feature ครบครัน, มีภาษาไทย ขาดอย่างเดียวคือ ไม่สนับสนุน Maildir อ่านแต่ mbox ครับท่านผู้ชม (เข้าไปเช็กที่เว็บ พบว่ามี unofficial patch สำหรับ Maildir อยู่.. แต่ขี้เกียจ build เองง่ะ)

22 สิงหาคม 2547

Hero

เซ็งจากเว็บหนังโรงเมื่อวานที่ทะลึ่งใช้ PowerPoint ทำเว็บให้ดูได้แต่ IE เลยหาหนังแผ่นดูแทน เห็นมีคนพูดถึงเรื่อง Hero กัน เลยลองงัดมาเปิดดูกับพ่อกับแม่ ปรากฏว่าดูแล้วเซ็งครับ อารมณ์เดียวกับตอนดู Crouching Tiger Hidden Dragon เลย พอหนังจีนกำลังภายในไปทำในคอนเซปต์ฮอลลีวู้ดแล้ว มันขาดๆ เกินๆ ชอบกล ทั้งเฝือกับฉากบู๊ที่เล่นสลิงยังกะหนังซูเปอร์แมน ทั้งเอียนกับการเอาอารมณ์จอมยุทธมา show off อย่างไร้กาลเทศะ แต่สำหรับโครงเรื่องก็นับว่าชวนติดตามดี ก็รู้ทั้งรู้แหละ ว่าสุดท้ายจิ๋นซีก็ไม่ถูกฆ่า เพียงแต่สนใจตอนคลายปมว่าจะหักเหยังไง แค่นี้ก็ชวนติดตามได้ทั้งเรื่อง แต่กว่าจะจบก็ทรมานกับฉากเฝือๆ ไปหลายฉาก ส่วนการใช้สีแสดงอารมณ์ก็ดู art ดี

เรื่องหนึ่งที่น่าสนใจ คือเคล็ดวิชาต่างๆ ที่แฝงอยู่ในตัวหนังสือจีนยุคก่อน ที่ถูกทำลายไปด้วยการรวมอักษรจีนให้เป็นหนึ่งของจิ๋นซีฮ่องเต้ อาจเป็นตัวแทนของความหลากหลายทางวัฒนธรรมท้องถิ่น ที่ถูกกลืนหายไปเพื่อแลกกับมาตรฐานภาษากลาง

許柏基 ไม่ใช่ชื่อญี่ปุ่นที่ไป gen มานะครับ (เห็น blog คนแถวนี้ฮิตกัน) แต่เป็นชื่อจีนของผม คุณลุงทวด (ลุงของพ่อ) ตั้งให้ เป็นอักษรจีนมาตรฐานกลางก็จริง แต่ผมไม่รู้คำอ่านภาษาจีนกลางหรอก รู้แต่สำเนียงแต้จิ๋ว เหอๆ (นอกเรื่องไปโน่น)

Update: แก้ตัวสะกดชื่อจีน เดิมใช้ตัว 桕 ซึ่งเป็นคนละตัวกับ 柏 ในชื่อ

21 สิงหาคม 2547

PowerPoint Web!

สุดสัปดาห์ ว่าจะเข้าไปดูหนัง จะเช็กรอบหนังดูเสียหน่อย จาก เว็บไซต์ของห้างชื่อดัง ในจังหวัดขอนแก่น ก็ต้องแปลกใจ เมื่อเว็บที่เคยเข้าได้มาก่อน ปรากฏข้อความว่า

งานนำเสนอนี้มีเนื้อหาที่เบราเซอร์ของคุณอาจจะไม่สามารถแสดงได้อย่างถูกต้อง งานนำเสนอนี้ถูกปรับให้เหมาะสมกับ Microsoft Internet Explorer รุ่นล่าสุด

If you would like to proceed anyway, click here.

view source ดูก็พบว่าใช้ Power Point ทำเว็บ! พอคลิกเข้าไป ก็ว่างเปล่า เดี๋ยวนี้คนทำเว็บเข้าไม่ใส่ใจมาตรฐาน HTML กันแล้ว?

นี่เป็นเพียงตัวอย่างหนึ่งในหลายๆ ตัวอย่างของผลที่เกิดจากการที่ซอฟต์แวร์จากบริษัทหนึ่ง ผูกขาดตลาดมากเกินไป ผมไม่ได้คิดเกลียดชัง proprietary software อะไร ผมเชื่อว่า proprietary กับ opensource ไม่ใช่ศัตรูกัน (ผมไม่ใช่สาวกที่สุดโต่งของ free software สักเท่าไร) แต่ไม่ชอบ proprietary ที่ผูกขาดตลาดมากเกินไป จนผู้ใช้ทำอะไรก็ถูกไปหมด ในฐานะที่เป็นเสียงข้างมาก ในแง่นี้ ประชาธิปไตยหรือเสรีนิยม ก็ไม่ต่างอะไรกับการใช้กำลังข่มขู่คนกลุ่มน้อย โดยไม่สนใจความถูกต้องอะไรเลย

หมดอารมณ์ดูหนัง ได้ blog บ่นมาหนึ่ง blog แทน :-P

วิ่ง

หนึ่งอาทิตย์ผ่านไปอย่างรวดเร็ว งด blog ไปหลายวันเพราะวิ่งไปมาสองที่ กลับถึงบ้านก็พบว่ามีเรื่องวุ่นๆ รออยู่ สุดสัปดาห์นี้ว่าจะพัก ก็บังเอิญท่านแม่ไปธุระข้างนอก ฝากบ้านให้ดูแลอีกหนึ่งวัน (เลือกกับการออกไปธุระแทนท่าน ซึ่งคิดแล้วว่าจะให้ได้อย่างใจท่านคงยาก เลยเลือกเฝ้าบ้านให้แทน)

เริ่มจากงานยืนพื้น คือพาชุมนุมลินุกซ์เซ็ตเครื่องต่อ คราวที่แล้วลง Debian เสร็จ แต่ปรากฏว่าเวลาไม่พอจะเซ็ตเมนูของ boot loader ทำให้อาจารย์วิชาอื่นที่ใช้เครื่องสอนบ่นว่าเข้า Windows ไม่ได้ (บังเอิญเพิ่งได้เข้าไปเมื่อวันพุธ เลยเพิ่งได้ยินเสียงบ่นผ่านอาจารย์ห้องคอมพ์) อาทิตย์นี้เลยพาเด็กเซ็ต grub หลังจากอธิบายหลักการคร่าวๆ แล้วเว้นส่วนปรับสีไว้ให้เด็กสร้างสรรค์เอง เป็นอันว่าอาจารย์แผนกอื่นใช้เครื่องได้ละ

วันต่อมาเป็นชุมนุมระดับประถม ว่าจะเอาหนัง Revolution OS ที่ อ.กิตติ์ เขียนมาให้ มาฉายให้เด็กดู (โดยกะว่าจะ pause แล้วพากย์ไทยให้ฟัง) แต่บังเอิญติดขัดสถานที่ ต้องย้ายออกมาจากที่ประจำ ประกอบกับ totem ทำพิษ ทำ palette เพี้ยน ลองเปลี่ยนเป็น vlc ก็ยังเพี้ยน ทีแรกนึกว่าแผ่นเจ๊งเสียแล้ว แต่ตอนนั้นไม่มีเวลาเช็กมาก ก็เลยยกเลิก (มาพบทีหลังว่าแผ่นไม่ได้เจ๊ง แต่เป็นผลจากการใช้ totem) แล้วเปลี่ยนมาใช้แผนสอง คือใช้ live CD ที่เขียนมา บูตให้เด็กเล่น แต่ด้วยความที่ไม่ได้คิดว่าจะต้องใช้ เลยเขียนมาไม่พอ ต้องลง X Window + GNOME เพิ่มเติมในบางเครื่อง (เครื่องที่ชุมนุมมัธยมเซ็ตไว้นั้น มีแต่ base system) แต่เด็กก็คือเด็ก แต่ละคนเล่นซนกันไปตามเรื่อง ไม่สนใจคนสอนเท่าไร ยิ่งออกมานอกสถานที่ เสียงพูดของคนสอนยิ่งกระจายหายไป ไม่เหมือนอยู่ในห้อง ก็เลยต้องตะเบ็งแข่งกับเด็ก (แต่คิดในทางกลับกัน ตอนอยู่ในห้อง เสียงเด็กก็กักเก็บอยู่ในห้อง กลายเป็น noise ที่ดังเซ็งแซ่เหมือนกัน) จบวันนั้นเหนื่อยเอามากๆ

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

โรงเรียนประถมของผมเป็นโรงเรียนชายล้วน ไม่รู้ว่าเป็นเพราะเหตุนี้หรือเปล่า ที่ทำให้เด็กซนเป็นพิเศษ เพราะจากที่เคยคุยกับเพื่อนที่เรียนโรงเรียนหญิงล้วน พฤติกรรมเด็กก็แก่นแก้วไม่เบาเหมือนกัน

กลับมาถึงอีกเรื่องหนึ่งที่วิ่งไปมา คือที่ มข มีอบรมเรื่อง ลินุกซ์เซิร์ฟเวอร์ ก็เลยแสดงความประสงค์ขอเข้าไปฟังด้วย เพื่อเพิ่มเติมความรู้ด้านเซิร์ฟเวอร์ แต่เนื่องจากต้องวิ่งไปมา เลยข้ามเรื่องสำคัญไปหลายเรื่องอยู่ (โชคดีที่เคยเซ็ตมาบ้างแล้ว) อย่างไรก็ดี ก็ได้ keyword หลายคำมาค้นคว้าต่อละ งานนี้ อ.ต่าย ยังกรุณาแบ่งเวลาช่วงนึงให้ผมบรรยายด้วย เป็น bonus track แด่ admin ว่าด้วยเรื่องการเซ็ตภาษาไทย ☺ ทำให้ได้โอกาสปรับเนื้อหาในหน้า Thai HOWTO ด้วย

อบรมคราวนี้ มีผู้เรียนหนาตาตั้งแต่ต้นจนจบ เพราะคราวนี้คิดตังค์ ไม่ได้ฟรีเหมือนปีที่แล้ว มีผู้เรียนมาจากจังหวัดต่างๆ ในภาคอีสาน รวมทั้งจากกรุงเทพฯ ด้วย เพราะค่าเรียนถูก มีที่พักใกล้ที่เรียน และได้ยินแว่วๆ ว่าติดใจอาหารที่โรงอาหารใกล้ๆ ด้วยนะ เหอๆ อาหารอะไรคิดเอาเอง ;-)

อ.ต่าย เล่าให้ฟังตอนกินข้าวว่า มข มีหลายคณะแล้วที่เปลี่ยนมาใช้ลินุกซ์เป็นเซิร์ฟเวอร์ เพื่อเลี่ยงปัญหาไวรัส ทั้งคณะแพทย์ วิศวฯ และอีกหลายคณะที่ผมจำมาไม่หมด แต่วิทยาคอมพ์ยังใช้ Windows อยู่นะ อ้าว.. อยากได้ admin จากชุมนุมลินุกซ์โรงเรียนเก่าผมไหมครับ เหอๆ (โม้ไปนั่น) นอกจากนี้ อ.ต่าย ยังออกไปอบรมลินุกซ์ที่ต่างจังหวัดในอีสานอีกด้วย เช่นที่ มหาวิทยาลัยราชภัฏสกลนคร เวิร์กจริงๆ แบบนี้ E-san LUG มีโอกาสเติบโตทัน ICT City แหงๆ สู้ๆ

/me กลับมาเถียงกับแม่ต่อ แม่ยังเชียร์ตาบิลขวัญใจแกไม่เลิก หลังๆ ต้องเริ่มเบรกแกตอนที่แกจะประณามลูกชายต่อหน้าญาติคนอื่น -_-!

15 สิงหาคม 2547

เด็กกับรางรถไฟ

ได้ forward mail ฉบับหนึ่งจากเพื่อนเมื่อราว 2-3 เดือนก่อน เนื้อหาว่าอย่างนี้:

มีเด็กกลุ่มหนึ่งเล่นกันใกล้รางรถไฟ 2 ราง รางหนึ่งอยู่ในระหว่างการใช้งาน ในขณะที่อีกรางหนึ่งไม่ได้ใช้งานแล้ว

มีเพียงเด็กคนเดียวเท่านั้นที่เล่นบนรางที่ไม่ได้ใช้งาน ส่วนเด็กที่เหลือนั่งเล่นอยู่บนรางที่ยังใช้งานอยู่

เมื่อรถไฟแล่นมา คุณอยู่ใกล้ๆ ที่สับรางรถไฟ คุณสามารถเปลี่ยนทางรถไฟไปยังรางที่ไม่ได้ใช้งานเพื่อช่วยชีวิตเด็กส่วนใหญ่ แต่นั่นหมายถึงการเสียสละชีวิตของเด็กคนที่เล่นอยู่บนรางที่ไม่ได้ใช้งาน

หรือคุณเลือกจะปล่อยให้รถไฟวิ่งทางเดิม? ลองหยุดคิดสักนิด มีทางเลือกใดที่เราสามารถตัดสินใจได้

คุณต้องทำการตัดสินใจก่อนที่จะอ่านต่อไป รถไฟไม่สามารถหยุดรอให้คุณไตร่ตรองได้

คนส่วนมากอาจเลือกที่จะเปลี่ยนทางรถไฟ และยอมสละชีวิตของเด็กคนนั้น ผมคิดว่า คุณก็อาจจะคิดเช่นเดียวกัน

แน่นอน ตอนแรกผมก็คิดเช่นนี้เพราะการช่วยชีวิตเด็กส่วนมาก ด้วยการเสียสละชีวิตเด็กหนึ่งคนนั้นดูสมเหตุผลทั้งทางศีลธรรมและความรู้สึก

แต่คุณเคยคิดบ้างไหมว่าเด็กที่เลือกเล่นบนรางที่ไม่ได้ใช้งานแล้ว ที่จริงเขาได้ตัดสินใจถูกต้อง ที่จะเล่นในสถานที่ที่ปลอดภัยแล้วต่างหาก แต่ทว่า เขากลับต้องเสียสละชีวิตให้กับเพื่อนที่ไม่ใส่ใจ และเลือกที่จะเล่นในที่อันตราย

สถานการณ์เช่นนี้เกิดขึ้นรอบตัวเราทุกวัน ในสถานที่ทำงาน ย่านชุมชน การเมืองโดยเฉพาะในสังคมประชาธิปไตย

คนกลุ่มน้อยมักจะถูกเสียสละให้กับผลประโยชน์ของคนหมู่มาก แม้ว่าคนกลุ่มน้อยจะฉลาด มองการณ์ไกล และคนหมู่มากจะโง่เง่า ไม่ใส่ใจก็ตาม

เด็กคนที่เลือกที่จะไม่เล่นบนรางที่อยู่ในการใช้งานตามเพื่อนๆ ของเขา และคงไม่มีใครเสียน้ำตาให้หากเขาต้องสละชีวิตก็ตาม

เพื่อนที่ส่งต่อเรื่องนี้มาบอกว่า เขาจะไม่พยายามเปลี่ยนเส้นทางรถไฟ เพราะเขาเชื่อว่าเด็กที่เล่นอยู่บนรางที่อยู่ในการใช้งานย่อมรู้ดีว่า รางนั้นยังอยู่ในระหว่างการใช้งาน และพวกเขาควรจะหลบออกมาเมื่อพวกเขาได้ยินเสียงหวูดรถไฟ

ถ้าทางรถไฟถูกเปลี่ยน เด็กหนึ่งคนนั้นต้องตายอย่างแน่นอน เพราะเขาไม่เคยคิดว่ารถไฟจะเปลี่ยนมาใช้เส้นทางนั้น

นอกจากนั้น รางที่ไม่ได้ถูกใช้งานอาจเป็นเพราะรางนั้นไม่ปลอดภัย ถ้ารถไฟถูกเปลี่ยนเส้น ทางมาที่รางนี้ เราทำให้ชีวิตของผู้โดยสารทั้งหมดตกอยู่ในอันตราย

ในขณะที่คุณพยายามช่วยชีวิตเด็กจำนวนหนึ่งโดยการสละชีวิตเด็กหนึ่งคน อาจกลายเป็นการสังเวยชีวิตผู้คนนับร้อยก็เป็นได้

เรารู้ว่าชีวิตเต็มไปด้วยการตัดสินใจอันยากลำบาก บางครั้งเราอาจลืมไปว่า การตัดสินใจอันรวดเร็วใช่จะเป็นสิ่งที่ถูกต้องเสมอไป

จำไว้ว่า สิ่งที่ถูกต้องไม่จำเป็นต้องเป็นสิ่งที่นิยมปฏิบัติ และสิ่งที่เป็นที่นิยม ไม่จำเป็นต้องถูกต้องเสมอไป

ทุกๆ คนสามารถทำสิ่งผิดพลาดได้ และนั่นคือเหตุผลที่เขาใส่ยางลบไว้ที่ปลายของดินสอ

แหลมคมไม่เบา.. ผมเลือกที่จะไม่เปลี่ยนรางแฮะ ส่วนที่มาของเรื่อง ใครเป็นผู้เขียน ใน forward mail ไม่ได้ระบุไว้ (ตามเคย)

Sid Live CD: OK

วันหยุดอย่างเมื่อวานนี้ ก็ต้องละจากเครื่องมาพบญาติสนิทมิตรสหายนิดหน่อย ตกเย็นสลบไปอีกงีบ ก่อนฟื้นขึ้นมาทำ sid live CD ต่อ

ย้อนไปเมื่อคืนวันศุกร์ แก้ไขปัญหาเรื่อง RAM ได้แล้ว โดยแก้ config ให้ห้ามโหลดไดเรกทอรีบางไดเรกทอรีเข้า RAM disk ทำให้หดขนาด RAM disk ลงเหลือชุดละ 8 MB ได้ (bootcd จะทำ RAM disk สองชุด ชุดแรกสำหรับ /etc /home /root และอีกชุดสำหรับ /var) บวกกับห้ามโหลดบางไดเรกทอรีใต้ /var/lib ที่เก็บไฟล์ข้อมูลจากการ config ของ debian เช่น mozilla-firefox ก็สามารถคง configuration ไว้ได้

คืนวันเสาร์เลยพยายามแก้ปัญหาค่า default ของ gnome panel ที่มันไม่โหลด default applet ให้เลย ไล่ไฟล์ ~/.xsession-errors ดูก็พบว่า มันหาค่า panel-default-setup.entries สำหรับ gconf ไม่เจอ → ไล่ดู debian package ต่างๆ พบว่าการใช้ dh_gconf กันขนานใหญ่ในช่วงเร็วๆ นี้ มันแอบย้ายข้อมูล gconf schema จาก /etc/gconf ไปที่ /usr/share/gconf โดยที่ไฟล์ /etc/gconf/2/path ยังไม่ยอม include directory ใหม่ → สร้างไฟล์ /etc/gconf/2/local.path ให้มันอ้างถึง /usr/share/gconf ด้วย แล้วตัดแผ่นใหม่ จบคืนวันเสาร์ ยังทำอะไรไม่ได้มาก

วันอาทิตย์ เลยมานั่งแกะต่อ ปรากฏว่า ไม่ว่าจะเซ็ตยังไง gnome panel ก็ยังไม่โหลด default applet ให้ ก็เลยใช้วิธี ล็อกอินเข้าในระบบชั่วคราว แล้วตั้ง config ทุกอย่างให้พร้อมเตรียมไว้เลย (+ เซ็ต theme และฟอนต์) บวกกับเซ็ต gdm ให้ auto login ไปซะ จากนั้น ก็ลงเกมเพิ่มอีกนิดหน่อย ในที่ว่างที่เหลือ ก่อนตัดแผ่นใหม่อีกครั้ง เป็นอันเสร็จการปรุง sid live CD ระดับนึงละ แต่คงต้องปรับแต่งตรงโน้่นตรงนี้อีกหน่อย

13 สิงหาคม 2547

Next project: Sid Live CD

เมื่อวันพุธที่ผ่านมา ประเดิมแผ่น sid installer CD ที่เพิ่งเสร็จ ด้วยการปั๊มให้ชุมนุมลินุกซ์ของโรงเรียนเก่าใช้ติดตั้ง (มีคนมือพองไปสองสามราย เอิ๊กๆ) ต้องเท้าความนิดนึงถึงเรื่องชุมนุมลินุกซ์ เรื่องของเรื่องคือ ผ.อ. โรงเรียนเก่า (ประถม) ของผม มีดำริจะตั้งชุมนุมลินุกซ์ขึ้นในโรงเรียน โดยมอบหมายให้ผมเป็นวิทยากร ชุมนุมฯ ตั้งขึ้นในสองระดับ คือชั้นประถมและมัธยม เมื่ออาทิตย์ที่แล้ว ไปเกริ่นแนะนำให้เด็กประถมรุ่นน้องฟังนิดหน่อย ว่าลินุกซ์คืออะไร มีคำที่ควรรู้อะไรบ้างถ้าจะเล่นลินุกซ์ อาทิตย์นี้ ได้เจอกลุ่มมัธยมเป็นครั้งแรก ก็เริ่มประเดิมครั้งแรก โดยให้เซ็ตเครื่องไว้ใช้ (และจะได้ให้น้องประถมใช้ด้วย) เดี๋ยวครั้งหน้าค่อยเริ่มแนะนำโปรแกรมต่างๆ

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

จากที่เคยคุยในห้อง #tlwg ไป ว่ากำลังหาโอกาสลองทำ live CD เพราะไหนๆ ผมก็ทำระบบ APT + installer CD ส่วนตัวมาถึงขั้นนี้แล้ว ทำ live CD ต่ออีกนิดจะเป็นไรไป ก็เลยติดตั้ง bootcd ที่ใช้ทำ live CD snapshot จากระบบที่ติดตั้งไว้ แล้วดำเนินการเป็นขั้นๆ

  • เนื่องจากไม่มี partition ว่างให้ใช้ จึงติดตั้งแบบ chroot ด้วย debootstrap
  • ติดตั้งเคอร์เนล 2.6.7-1-386 (debian prebuilt) และ GNOME desktop พื้นฐานผ่าน aptitude
  • ทดลองสั่ง bootcdwrite เพื่อสร้าง iso image แล้วเขียนลง CD-RW รุ่นแรก เอาไปบูตดู ปรากฏว่ามัน mount root partition ไม่ได้ เพราะหา device file ของ harddisk partition ไม่เจอ → มุ่งประเด็นไปที่ initrd ว่าคงขาด
  • ติดตั้ง bootcd-mkinitrd เพิ่ม แล้วสั่ง bootcdmkinitrd ปรากฏว่า ติดตรงที่ มันต้องการให้เคอร์เนลที่ทำงานอยู่ กับเคอร์เนลที่จะ gen ใส่ CD เป็นตัวเดียวกัน → ลง prebuilt kernel เพิ่มในระบบที่บูตจริง แล้วบูตเข้าใหม่ → สร้างแผ่นบูตสำเร็จ ขนาด ISO image ออกมาประมาณ 360 MB ยังมีที่เหลือเฟือ แต่ขอทดสอบให้มันบูตผ่านก่อนค่อยเพิ่ม package จะได้ไม่เสียเวลา gen image และเขียน CD นานเกินไป
  • ทดลองบูตดู คราวนี้มัน mount root ผ่าน เข้า gdm ได้อย่างราบรื่น แต่กินเวลานานพอควร กับการ detect hardware และโหลดไฟล์ต่างๆ จาก CD
  • ปัญหาที่พบคือ เรียกโปรแกรมใหญ่ๆ ไม่ค่อยได้ เพราะ RAM ไม่พอ อย่าง firefox เนี่ย ดูเหมือนโหลดไม่มีวันเสร็จ อย่างนี้เลิกคิดถึง OO.o ไปได้เลย เดี๋ยวคงต้องมานั่งเลือกโปรแกรม + tune config ใหม่

ปล. อย่าเพิ่งท้วงว่าทำไมไม่ใช้ Knoppix หรือ Morphix ไปซะ ผมกำลังอยากลองของน่ะ อย่างที่บอก ว่าทำมาถึงขั้นนี้ อยากลองทำเพิ่มอีกนิด และเข้าใจว่า Knoppix/Morphix คงใช้เทคนิคเดียวกันนี่แหละ

10 สิงหาคม 2547

Sid Installer CD, Finally

โหะๆ ทีแรกคิดว่าต้อง hack debian-installer อีกยาว ปรากฏว่า วันนี้แค่ลองเปลี่ยน boot image ของ CD มาเป็น image ที่ใช้เคอร์เนล 2.6.7 แค่นั้นเอง ทุกอย่างผ่านฉลุย การ probe hardware ไม่มีค้าง ไม่ต้องเข้า expert mode หรือใส่ boot param พิเศษอย่างใดทั้งสิ้น แถมโปรแกรมติดตั้งยังทำงานราบรื่นตั้งแต่ต้นจนจบ ต่อไปนี้ก็มีแผ่น debian sid ส่วนตัวไว้แพร่ลัทธิละ เอิ๊กๆ ☺

debian-installer ภาค 2

เมื่อวานพยายามทำแผ่นติดตั้ง debian ต่อ เจอปัญหาหลายอย่างอยู่ ก็ค่อยๆ โกงไปทีละเรื่องจนติดตั้ง base system ได้ในที่สุด

พบปัญหาและแก้เป็นข้อๆ ดังนี้:

  • เปลี่ยนเครื่องมาเป็นเครื่องเปล่า เพื่อจะได้ทดสอบการติดตั้งทั้งกระบวนการ ปัญหาคือ เครื่องใหม่นี้มีปัญหาช่วง detect hardware มันจะค้างไปเลย แม้จะเข้า expert mode ก็ยังควบคุมขั้นตอนไม่ได้ ดู syslog ก็ไม่ให้ข้อมูลอะไร กำลังคิดว่าเจอทางตัน ก็บังเอิญเหลือบไปเห็น boot prompt:
    Press F1 for help, or ENTER to boot: _
    ก็เลยเขกกบาลตัวเองก่อนกด F1 ไล่หา boot param จนพบ param ที่ควบคุมการ detect hardware ได้ ก็เลยลองทีละตัว จนพบว่ามันไปค้างที่ USB โดยสั่ง disable ได้ด้วยคำสั่ง:
    linux debian-installer/probe/usb=false
    จากนั้นก็ผ่านขั้น detect hardware ไปได้
  • ปัญหาถัดมา หลังจาก detect hardware ผ่านแล้ว ก็มาค้างอีก โดยดูใน syslog ก็ไม่พบร่องรอยอีกเช่นเดิม เลยบูตแบบ expert เพื่อจะได้ควบคุมขั้นตอนได้:
    expert debian-installer/probe/usb=false
    พบว่า ถ้าพยายามข้ามขั้น network config ไป มันจะไม่ค้าง จนไปแบ่งพาร์ทิชันได้
  • แต่เมื่อไปถึงขั้น install base system มันจะพยายามเลือก mirror ซึ่งต้องกลับมา config network ก่อน แล้วก็จะค้าง ตรงนี้พบว่าขาดโมดูล load-cdrom ไป ทำให้ไม่มีวิธีโหลดจาก CD → เพิ่มเข้าไปแล้วตัดแผ่นใหม่ → คราวนี้สามารถข้ามการ config network ได้แล้ว (แต่ถ้าบูตแบบปกติก็ยังค้างอยู่ดี ..ช่างมันก่อน)
  • เจอปัญหาถัดมา คือมันบอกว่า “cannot install” เพราะไม่ได้ mount CD หรือเลือก mirror ไว้ อ้าว.. ก็งงสิ CD ก็ mount อยู่เห็นๆ → ไล่ script ของ base-installer ดู ก็พบว่า มันพยายามตรวจสอบไฟล์ /cdrom/.disk/base_installable ซึ่งเราไม่มี → ไล่ Makefile ของ debian-cd อีกจนพบว่า มันจะสร้างไฟล์นี้ก็ต่อเมื่อแผ่นแรกมี package ที่ debootstrap ต้องการครบ → จัดการสร้าง task ของ debian-cd โดย dump มาจาก debootstrap:
    # echo "#include <debian-installer>" > tasks/mine
    # debootstrap --arch i386 --print-debs sid | tr ' ' '\n' | sed -e '/^$/d' >> tasks/mine
    แล้วตัดแผ่นใหม่
  • ทดลองใหม่อีกครั้ง ปรากฏว่ามันยังไม่ยอม install ให้อีก แต่ error message เปลี่ยนไป ฟ้องว่าไม่มี rule /usr/lib/debootstrap/scripts/unknown → ไม่ค่อยแปลกใจ เพราะตอนแกะ script ของ base-installer ในขั้นที่แล้ว ก็เหลือบเห็นแล้ว ว่ามันตรวจสอบ Codename ในไฟล์ Release → ไปแก้ไฟล์ Release ใน submirror ให้เป็น sid เอาดื้อๆ เลย แล้วตัดแผ่นใหม่อีกครั้ง → คราวนี้ผ่านตลอดจนจบกระบวนการ ไชโย! ☺ (แต่ต้องจำไว้ว่า ก่อนตัดแผ่นทุกครั้งต้องมาแก้ไฟล์นี้ก่อน เพราะ apt-move มันเขียนทับ)

สรุปว่าเป็นวันที่แก้ปัญหาได้สนุกสนานดี จบเมื่อคืน ใช้ CD ติดตั้ง sid ลงเครื่องเปล่าได้ โดยไม่ต้องสลับไปที่ shell เลย นับว่าทำให้ลดเวลาติดตั้ง debian ในเครื่องใหม่ได้มากทีเดียว แต่ข้อแม้คือ ต้องเข้า expert mode แล้วต้องรู้วิธีสั่งนิดหน่อย ถ้าคิดจะปั๊มแผ่นให้คนอื่นใช้ด้วย ยังต้อง hack โปรแกรมติดตั้งต่ออีก

08 สิงหาคม 2547

debian-installer

เผลอแผลบเดียว ไม่ได้ blog ไปเสียเกือบอาทิตย์ ก็ไปสะสางธุระหลายเรื่องอยู่ ตอนนี้มีกิจวัตรเพิ่มอีกอย่าง คือคอย remote เข้าไปเช็กเซิร์ฟเวอร์บ่อยๆ ถ้าเน็ตล่มก็จะได้ recover รวมทั้งไป update package ต่างๆ เสมอๆ นอกจากนั้นก็มีงานอื่นเพิ่มอีกนิดหน่อย ไว้วันหลังค่อย blog

ช่วง 3-4 วันที่ผ่านมา พยายามจะทำแผ่น debian CD ที่ตัดออกมาให้ใช้ติดตั้งได้จริง จากที่เดิมใช้เป็นแค่แผ่น upgrade เท่านั้น ความจริงแล้ว ถ้าใครมี full mirror tree ก็จะสามารถทำแผ่นติดตั้งได้ด้วย debian-cd ได้เลย แต่ปัญหาของผมคือ ไม่ได้มี full mirror ก็เลยต้องพยายามเฟ้นเอาเฉพาะไฟล์ที่จำเป็นมาจาก full mirror

เมื่อสมัยก่อนที่จะมี sarge นั้น ผมตัดแผ่น sid โดยอาศัย boot image ของ woody ซึ่งเคอร์เนลและ libc เก่ามากเมื่อเทียบกับ sid ทำให้ใช้ installer ของ woody โดยตรงไม่ได้ เวลาติดตั้งต้องเริ่มแตก package พื้นฐานทีละอันจนสามารถเรียก debootstrap ได้ และก็ยังไม่มีเวลาไปค้น ว่าต้องดาวน์โหลดอะไรมาเพิ่มบ้าง คราวนี้ ได้โอกาสก็กระโดดมาจับ sarge เลย ซึ่งใน sarge จะมี debian-installer ซึ่งพัฒนาขึ้นใหม่ หลังจากที่ debian โดนว่าว่าไม่เป็นมิตรกับมือใหม่ จากเดิมที่ทุกอย่างเป็นเมนูที่สามารถเลือกวิธีการในขั้นตอนต่างๆ ได้ตามใจชอบ ก็กลายมาเป็นระบบที่อัตโนมัติมากขึ้น (แต่โดยส่วนตัว ผมก็ว่าของเดิมมันก็ไม่ได้ใช้ยากตรงไหนนะ ดีเสียอีกที่ยืดหยุ่น สั่งการได้เต็มที่ โดยมีเมนูให้เลือก ไม่ต้องจดจำอะไรมาก ทั้งที่ debian ไม่ได้ออกแบบมาให้ต้องเจอโปรแกรมติดตั้งบ่อย [คือเป็น continuous upgrade ไม่ใช่ quantum upgrade เหมือน distro ที่ใช้ CD เป็นหลัก โดยเฉพาะในสมัยที่ยังไม่มี apt-rpm, urpmi หรือ yum กัน] แต่กลับมาเจอทีไรก็ยังเดาขั้นตอนได้ แต่ผมอาจจะมองโลกด้วยแว่นคนละแบบกับคนอื่นก็ได้)

อย่างไรก็ตาม แผ่น CD ติดตั้งที่จะพยายามทำครั้งนี้ จะใช้ sarge installer เพื่อติดตั้ง sid จากที่ค้นเอกสารในเน็ต ก็ได้ความว่า debian-installer ใหม่นี้ ออกแบบมาให้ modular สามารถเพิ่ม-ลดฟังก์ชันได้ และมีการใช้ udeb ที่เป็น deb package แบบย่อส่วน ที่ไม่ได้ทำตาม debian policy ทั้งหมด (เช่น ไม่มีเอกสาร ไม่มี man page) แต่เน้นให้มีขนาดเล็กเพื่อใช้กับ installer (นัยว่า ตัว u ใน udeb นั้น หมายถึง micro (µ) นั่นเอง) เมื่อบูตแผ่นติดตั้ง debian นั้น ระบบใน boot image จะสร้าง ram disk ที่ใช้เริ่ม installer โดยจะให้ผู้ใช้เซ็ตค่าภาษา ประเทศ แป้นพิมพ์ แล้ว detect hardware เพื่อ mount CD และโหลด debian-installer จาก CD ซึ่งอยู่ในรูป udeb โดยอาศัย udpkg ติดตั้ง udeb ทั้งหลายลง ram disk จากนั้นก็เรียก debian-installer จาก ram disk ขึ้นมาทำหน้าที่ต่อไป

ดังนั้น เพื่อจะให้แผ่นที่ตัดจาก submirror ที่สร้างจาก apt-move สามารถติดตั้งได้ จึงต้องดาวน์โหลด udeb ทั้งหลายมาเพิ่ม โดยเพิ่มรายการต่อไปนี้ใน sources.list (เปลี่ยน mirror ใกล้บ้านได้ตามสะดวก):

deb ftp://ftp.debian.org/debian sid main/debian-installer

แล้วก็ดูดแพกเกจ base-installer มาลง (ผมลักไก่ใช้สคริปต์ apt-off ที่เคยเขียนไว้):

echo -n > status.null
./apt-off -s status.null suck install base-installer

และอาจจะต้องดูด udeb อื่นๆ ต่อไปนี้มาให้ครบ:

  • libc6-udeb
  • libdebconfclient0-udeb
  • libdebian-installer4-udeb
  • discover-udeb
  • libexpat1-udeb
  • libparted1.6-udeb
  • partman
  • kernel modules ต่างๆ สำหรับ kernel-image-{version}-1-386-di
  • ... (คิดว่ายังไม่หมด เพราะแผ่นที่ได้ ยังติดตั้งได้ไม่จบกระบวนการ ถ้าจะเอาชัวร์ๆ ก็ โหลดมาให้หมดตามรายการใน main/debian-installer/binary-i386/Packages)

สังเกตว่า ตอนที่ดูด base-installer นั้น udeb บางตัวจะถูก override โดย deb ที่สมบูรณ์ ซึ่งถ้าจะให้ใช้กับ debian-installer ได้ ต้องเป็น udeb เท่านั้น จึงต้องดูดแยกต่างหาก

จากนั้น สั่ง apt-move sync แล้ว generate ไฟล์ Packages เพิ่มเติมสำหรับ debian-installer udeb โดยสร้างไฟล์ config ที่ root ของ mirror ตามที่บอกใน เอกสาร แล้วสั่ง

apt-ftparchive generate config

(พบว่า apt-move จะสร้างไฟล์ Packages ให้เฉพาะ deb package เท่านั้น ไม่สนใจ udeb ก็เลยต้องสร้างเองต่างหาก ด้วยวิธีนี้)

จากนั้น ก็ generate iso image ด้วย debian-cd ตามปกติ อาจจะ hack นิดหน่อยด้วยการสร้าง symlink บางแห่งของ sid ให้ชี้ไปที่ sarge ซึ่ง script สำหรับทำแผ่นบูตของ sarge จะไปโหลด boot image จาก daily image อยู่แล้ว (เพื่อความรวดเร็ว ผมก็จัดการ hack script ให้มันโหลดจาก local copy ซะ ☺)

มีอีกวิธีหนึ่ง นอกเหนือจากการใช้ debian-cd คือการ hack จาก iso ที่ work แล้ว แบบนั้นดูแล้วน่าจะใช้ได้เลยเหมือนกัน แต่ยังไม่ได้ลอง

03 สิงหาคม 2547

GNOME Updates

ช่วงนี้มี gnome update ชุกพอสมควร เพราะใกล้กำหนด release เลยมีการ resolve bug + release เวอร์ชันใหม่กันคึกคัก

  • Matthias commit patch และ resolve GNOME Bug #119891 (การลบอักขระทีละตัวด้วย backspace ใน GtkEntry และ GtkTextView) แล้วใน HEAD ซึ่งหมายความว่าจะเริ่มมีผลใน GTK+ 2.6 แต่ GTK+ 2.6 จะออกล่าช้ากว่า GNOME 2.8
  • Pango 1.4.1 ออกแล้ว ทำให้ patch ที่เสนอไว้ใน GNOME Bug #141931 ที่แก้ไขเรื่องการ crash ขณะเรียก language engine มีผล และทำให้ pango-libthai สามารถตัดคำใน GNOME 2.6 ได้อีกครั้ง (หลังจากที่ได้ใน GNOME 2.4 ก่อนเกิด bug) นอกจากนี้ patch เกี่ยวกับการสนับสนุน OpenType font ก็มีผลแล้วเช่นกัน
  • พร้อมกันนี้ Pango 1.5.2 ที่มุ่งสู่ 1.6 สำหรับ GNOME 2.8 ก็ออกแล้วเช่นกัน (แน่นอนว่า patch ที่กล่าวถึงทั้งหมดใน 1.4.1 ถูกรวมไว้แล้ว)

APT Management

หลังจากที่เซ็ตระบบเน็ตเวิร์กในบ้านให้กลับมาอยู่ในสภาพปกติ (wireless LAN + ipmasq ผ่าน TOT 56K) แล้ว ก็ทยอยเซ็ต service อื่นต่อ จนมาถึงเรื่องการจัดการ debian package

โจทย์คือ ตอนนี้มี debian 3 เครื่อง แต่ bandwidth ที่ใช้ upgrade package ต่างๆ ต่ำมาก และต่อได้ครั้งละ 2 ชั่วโมงเท่านั้น จึงพยายามใช้ bandwidth ให้คุ้มที่สุดในการ update package ต่างๆ แผนการณ์ที่วางไว้แต่ต้นคือ ใช้ apt-proxy แต่ในระหว่างที่เน็ตเวิร์กไม่สมบูรณ์ ก็ใช้วิธีนี้มาโดยตลอด:

  • การดูด package อาศัย script apt-off ที่เขียนขึ้นเอง เพื่อที่เครื่องต่างๆ จะสามารถฝากดูดกันได้ผ่าน thumb drive หรือเอาไปฝากดูดในเครื่องชาวบ้านที่ bandwidth สูงกว่าได้ อิอิ (สำหรับ script นี้ เพิ่งมาพบภายหลัง ว่ามี package apt-zip สำเร็จรูปให้ แถมสามารถใช้ฝากดูดในเครื่องที่ไม่ใช่ debian ได้ด้วย แต่ไหนๆ ก็ใช้ script ตัวเองมาจนติด ก็เลยใช้ต่อไป)
  • จาก archives ที่ดูดมา ใช้ apt-move ย้าย package เข้า mirror tree เก็บไว้ mirror นี้จะเป็น subset ของ full debian mirror โดยมี package เท่าที่ใช้ ถ้าตั้งไว้ให้ move เข้า ftp area ก็จะกลายเป็น source สำหรับ apt-get ได้
  • จาก mirror นี้ เมื่อดูด package พื้นฐานต่างๆ มาเพิ่มให้ครบ (โดยเฉพาะ package ที่ไม่มีการ upgrade เป็นเวลานาน ซึ่งทำให้ไม่มีใน archive ที่ดูดๆ มาหลังการติดตั้งครั้งแรก) รวมทั้ง boot image ต่างๆ ด้วย ก็สามารถใช้ debian-cd สร้างแผ่นติดตั้ง debian ได้ เอาไว้ใช้ติดตั้งหรือ upgrade ที่เครื่องใดๆ ก็ได้ตามต้องการ โดยมี package เฉพาะเท่าที่ใช้เท่านั้น (ปัจจุบันยังไม่เต็ม 2 แผ่น CD)

แต่พอเน็ตเวิร์กกลับมาต่อกันครบเหมือนเดิม ก็จัดการทดลองตั้ง apt-proxy ในเครื่องที่กำหนดไว้เป็น file server พบว่า apt-proxy รุ่นนี้ ถูกเขียนขึ้นมาใหม่หมดด้วย python มี daemon รันต่างหาก แต่วิธีการใช้งานยังเหมือนเดิม ใช้ไปๆ ก็พบปัญหาบางประการ:

  • ไฟล์ที่ดาวน์โหลดไม่สมบูรณ์ เมื่อต่อเน็ตใหม่ มันจะไม่ resume บางครั้งเริ่มใหม่ บางครั้งมีอาการค้าง ต้องไป restart apt-proxy เพื่อเริ่มดาวน์โหลดใหม่
  • ไม่ยอม cache package บางตัว ลองตรวจ debian bug ก็พบ Bug #260951 รายงานว่า apt-proxy ไม่ยอม cache package ขนาดใหญ่ (อ้าว.. นั่นน่ะต้องการให้ cache มากที่สุดเลยนะ)

อันที่จริงก็อยากจะช่วยเขาจับแมลงเพื่อปรับปรุงให้ดีขึ้นอยู่หรอก แต่กับเหตุการณ์เฉพาะหน้าก็ต้องหาวิธีแก้ขัดก่อน ก็เลยใช้วิธีนี้:

  • เขียน script rsync dpkg status file จากเครื่องลูกไปยังเครื่อง file server โดยตั้งชื่อแยกตามชื่อเครื่องลูก
  • ที่ file server เรียก apt-off ดูด package ตาม status file ทั้งหลาย ถ้าจะลง package ใหม่ ก็ ssh มาที่ file server แล้วสั่ง apt-off ดึงเอาก่อน
  • ใช้ apt-move ย้าย archive เข้า ftp
  • จากนั้น ค่อยมา apt-get ที่เครื่องลูกผ่าน mirror ภายใน

ด้วยวิธีนี้ จะทำให้ file server มี package ที่เป็น union set ของ package ที่ใช้ในเครื่องต่างๆ ทั้งหมด ซึ่งทำให้ตัดแผ่น CD ได้โดยมี package ครบเต็ม และการดูด package จาก internet ก็จะเกิดแค่ครั้งเดียวเหมือนที่ apt-proxy (อยากจะ) ทำ แถม resume ได้ด้วย

ความจริง ยังมีอีกวิธีหนึ่งที่ง่ายกว่า คือจัดการ mount archive dir ผ่าน NFS ซะ แบบนี้แชร์กันทันทีโดยไม่ต้องมีขั้นตอนอะไรเพิ่ม แต่ข้อเสียคือ ใช้กับการดูดแพกเกจเพื่อการ upgrade เครื่องลูกค้า ซึ่งไม่ได้ต่อกับเครือข่ายเราไม่ได้ ถ้าใช้วิธี sync status ยังพอสามารถ sync จากเครื่องลูกค้าผ่าน thumb drive ได้อยู่ พอจะเข้าไป upgrade ที่ off-line site ที ก็เผาแผ่น CD-RW ถือเข้าไป

hacker emblem