Theppitak's blog

My personal blog.

18 กันยายน 2548

แจก static route ด้วย DHCP

ย้อนกลับมาที่งานที่โรงเรียนอีกครั้ง ช่วงนี้ถูกโทรตามบ่อยหน่อย เพราะกำลังเชื่อมเครือข่ายระหว่างโรงเรียนสองโรงในเครือเดียวกันเข้าด้วยกัน โดยพยายามใช้ทรัพยากรผ่าน LAN ร่วมกัน แต่ต่างฝ่ายต่างมีอินเทอร์เน็ตอยู่แล้ว

ยังไม่รู้แน่ว่าสุดท้ายจะใช้วิธีการไหน อาจจะรวมเป็น network เดียวกัน (โดยเปลี่ยนจาก class C มาเป็น class B หรือ A) หรือแยกเป็น subnet ก็ได้ แต่เมื่อวานก็เข้าไปทดสอบการเชื่อมเครือข่ายแบบแยก subnet โดยให้มี server เครื่องหนึ่งเป็น router โยงสองเครือข่ายเข้าด้วยกัน

ทีนี้ ก็ต้องมาเซ็ต routing ของเครือข่าย ให้ติดต่ออีก subnet ผ่าน router นี้ แต่ยังออก internet ด้วย gateway เดิม ซึ่งจากการทดลองกำหนด IP และ route table แบบ manual บนเครื่องลูกข่ายซึ่งเป็น WinXP และลินุกซ์ ก็สามารถใช้งานได้ทั้งสองทาง

ขั้นต่อไปคือ จะกำหนดจาก DHCP ได้อย่างไร เพราะจะให้ไปสั่งที่เครื่องต่างๆ ทุกเครื่อง ก็ไม่ไหว ลองถามใน #tlwg มีใครบางคนแนะนำว่า ให้ใช้ gateway ตัวเดียวในแต่ละวงก็พอ แล้วกำหนด route table ที่ gateway ให้ส่งต่อไปยัง router ที่ต้องการ แต่ปัญหาก็คือ เราต้องการแยก traffic ของ LAN กับของ internet ออกจากกัน เพราะ traffic ของ LAN จะค่อนข้างคับคั่ง ถ้ามาผ่าน gateway ร่วมกับ internet อาจเกิดการรบกวนกันได้

แต่อ่านคู่มือของ DHCP server ก็ไม่มีที่ไหนกล่าวถึงการแจก routing table มีแต่แจก gateway ได้หลายตัวเท่านั้น หรือว่าจะต้องใช้ gateway เดียวจริงๆ?

แต่ช้าก่อน RFC3442 มีการเพิ่ม classless static route option สำหรับ DHCP โดยอ้างไปถึง option 33 ของ RFC2132 ว่าเป็นการส่ง IP static route แบบ classful (คือ IP address จะ imply netmask ตามคลาส) แต่เนื่องจากไม่มีใครใช้ classful IP สักเท่าไรกันแล้ว option นี้ก็เลยจะถูกแทนที่ด้วย option 121 ตาม RFC3442

ลองไปค้นดูจาก man page ของ dhcp-options(5) ก็พบ option static_routes ที่ว่า โดยมีรูปแบบ argument เป็น sequence ของคู่ net-ip, router เรียงต่อกันไป สามารถกำหนดใน dhcpd.conf ของ DHCP server ได้ว่า:

  option static-routes 192.168.1.0 192.168.0.3;
  option routers  192.168.0.1;

เพื่อระบุให้ใช้ 192.168.0.3 เป็น router ไปยังเครือข่าย 192.168.1.0/24 และให้ 192.168.0.1 เป็น default gateway สำหรับออกอินเทอร์เน็ตได้

แต่.. พอลองดูจริง ก็เป็นตามที่ man page บอก..

                                     ... Since classless IP routing  is
  now  the most widely deployed routing standard, this option is virtu-
  ally useless, and is not implemented  by  any  of  the  popular  DHCP
  clients, for example the Microsoft DHCP client.

คือจะได้ routing แบบ netmask 255.255.255.255 มาเลย ไม่ใช่อ้างทั้งเครือข่ายแบบที่ต้องการ (เท่าที่ search ดู solution ของ *BSD, Red Hat ก็ดูจะทำแบบนี้เหมือนกัน)

เลยต้องมุ่งมาที่ option 121 ของ RFC3442 แทน ซึ่งปรากฏว่า แกะ source ของ dhcp 3.0.3 แล้ว option นี้ยังเป็น "unknown-121" อยู่ คือไม่มี configuration option ให้ใช้!

แต่ google ก็ไม่ทิ้งเรา พาไปจนเจอ blog หนึ่ง ซึ่งเจ้าของเจอปัญหาเดียวกัน แล้วก็มีคนตอบให้ด้วย ก็เลยมาลองซะ..

# MS routes: adds extras to supplement routers option
option ms-classless-static-routes code 249 = array of integer 8;
# RFC3442 routes: overrides routers option
option rfc3442-classless-static-routes code 121 = array of integer 8;

option routers 192.168.0.1;
option ms-classless-static-routes 24, 192,168,1, 192,168,0,3;
option rfc3442-classless-static-routes 24, 192,168,1, 192,168,0,3;

เขา declare option ใช้เอง (โหะๆ เพิ่งรู้ว่าทำได้ด้วย) โดยกำหนด structure ของไบต์ข้อมูลตาม RFC3442 ไบต์แรกเป็นจำนวนบิตของ netmask, ถัดมาเป็น network address ที่ละค่า .0 ต่อท้าย คือในที่นี้ netmask 24 บิต ก็ใช้แค่สามไบต์ แล้วจากนั้นก็ตามด้วย IP ของ router โดยในที่นี้ ได้เพิ่ม vendor option 249 ของ MS ด้วย

ลองไป repair network connection ที่เครื่อง WinXP ลูกข่าย แล้ว "ROUTE PRINT" ดู โหะๆ มาแล้วแฮะ route table ที่ต้องการ!

แต่.. เครื่อง debian ลูกข่ายยังนิ่งเฉย..

เป็นเพราะ DHCP 3.0.3 ยังไม่ implement feature นี้นั่นเอง ก็เลยต้องไปเขียน dhclient-script เพิ่มเติมเอา ให้มันอ่านข้อมูล option 121 มาเซ็ต route table เริ่มจากแก้ /etc/dhcp3/dhclient-enter-hooks.d/debug ให้มันแสดงข้อมูลต่างๆ แล้วค้นหาชื่อตัวแปรที่มันส่งมาให้ จนพบว่า มันมาในชื่อ $new_unknown_121 ว่าแล้วก็นั่งเขียน shell script เพื่อ parse ข้อมูลแล้วสั่ง add route table เอา

..ผ่านจนได้ หุๆๆ (แต่ shell script ยังมั่วมาก เขียนแบบรีบๆ)

12 กันยายน 2548

ดิ้น

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

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

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

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

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

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

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

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

หวังว่าผมจะทำสำเร็จ..

06 กันยายน 2548

GNOME 2.12 Release Notes

GNOME 2.12 จะออกพรุ่งนี้แล้ว (ถ้าตามเวลาบ้านเราก็เป็นคืนพรุ่งนี้ กว่าจะเห็นข่าวก็มะรืน) เสาร์-อาทิตย์ที่ผ่านมา จึงไม่ได้ทำอะไรนอกจากแปล release notes ซึ่งสำหรับข้อความ ก็ใช้เวลาแปลไม่นาน จะเสียเวลาก็ตรงจับ screenshot คือต้องไล่ build โปรแกรมที่ยัง build ไม่เคยผ่านให้ผ่าน เพื่อจะได้เปิดขึ้นมา จากนั้น ก็ config ใช้งานโดย show feature ใหม่ ตามที่บรรยายใน release notes ระหว่างนั้นก็ติดต่อ ขอให้พี่ปลาที่เนคเทคช่วยแปล press release อีกแรง เพราะกลัวไม่ทัน

เมื่อคืนนี้ก็จับ screenshot สุดท้ายเสร็จ และ commit เข้า CVS เรียบร้อย วันนี้ก็มารับ press release ฉบับแปลจากพี่ปลา แล้ว commit เข้า CVS ต่อ เป็นอันว่า ประเทศไทยมีส่วนร่วมกับการปล่อยตัว GNOME 2.12 อย่างสมบูรณ์ (จะขาดก็แต่ Release Party มั้ง เหอๆ)

GNOME 2.12 นี้ มี milestone ที่สำคัญสำหรับภาษาไทย นั่นคือ ภาษาไทยถูกนับรวมเป็น supported language แล้วใน release notes ฉบับร่าง และค่อนข้างแน่นอนแล้วว่าคงไม่ถูกสอยออกจากทำเนียบก่อนการปล่อยตัว

เอ.. วันก่อนนู้น ผมเพิ่งเขียนไปหยกๆ ว่า ภาษาไทย partially supported อยู่ โดยเปอร์เซ็นต์แปลอยู่ที่ 61.53% ไม่ใช่เหรอ? แล้วเกิดอะไรขึ้น ถึงได้ขึ้นทำเนียบ supported language ไวจัง?

เรื่องของเรื่องก็คือ Danilo Šegan เสนอว่าจะตัด 2 แพกเกจมหาหิน คือ gtk+-properties และ gweather-locations ออกจากการพิจารณาสถานะ supported language ซึ่งเป็นสิ่งที่นักแปลสนับสนุนอย่างยิ่ง เพราะตัวแรกนั้น เป็น properties ของ GTK+ widget ซึ่งจะเห็นเฉพาะนักพัฒนาที่ใช้ glade สร้าง GUI หรือในเอกสารประกอบสำหรับนักพัฒนาเท่านั้นแหละ ส่วน gweather-locations ที่รวบรวมชื่อสถานที่ทั่วโลกกว่า 6 พันแห่งนั้น โหดร้ายสำหรับนักแปลมากๆ เพราะข้อมูลสารานุกรมภูมิศาสตร์สำหรับแต่ละประเทศก็ช่วยแปลได้ไม่ถึง 1 ใน 3 จะมีก็แต่ประเทศที่ใช้ภาษาอังกฤษ หรือภาษากลุ่มละตินเท่านั้นแหละ ที่จะมีข้อมูลเพียงพอสำหรับการแปล และที่สำคัญ ผู้ใช้ส่วนใหญ่จะเซ็ตตำแหน่งที่จะดูรายงานอากาศเพียงแค่ครั้งเดียวเท่านั้น การแปลชื่อเมืองเฉพาะในประเทศท้องถิ่น ก็น่าจะเพียงพอสำหรับผู้ใช้กว่า 90% แล้ว (ที่เหลือคงเป็นผู้ใช้ที่อยากรู้อยากเห็นสภาพอากาศของประเทศอื่น หรือผู้ใช้ที่ต้องนั่งเครื่องบินไปต่างประเทศบ่อยๆ)

ซึ่งการปรับดังกล่าว เข้าทางทีมไทยพอดี เพราะแพกเกจทั้งสอง ยังมีเปอร์เซ็นต์แปลไม่ถึงไหน gtk+-properties นั้น ทุกคนเก็บไว้ทีหลังหมด ส่วน gweather-locations ก็ระดมหนังสือเท่าที่มี และประยุกต์หลักการทับศัพท์ทั้งหมดแล้ว ก็ยังไปได้แค่ 28.83% เท่านั้น และยังมีชื่อเมืองแถบตะวันออกกลาง และแอฟริกาอีกจำนวนมาก ที่ยังไม่พบการอ้างอิงถึงในเอกสารภาษาไทยใดๆ

เมื่อปรับแล้ว ปรากฏว่า เปอร์เซ็นต์แปลของภาษาไทยพุ่งพรวดขึ้นทันที แม้จะไม่ถึง 80% แต่เขาก็เก็งเอาไว้ก่อน แล้วอาจจะสอยทีหลัง แต่เมื่อล่วงเลยเวลา string freeze สำหรับ release notes และ press release มาแล้ว ก็คงไม่สามารถปรับออกได้อีก (ไม่งั้นจะมีผลกระทบกับฉบับแปลทั้งหลายที่ทำไปแล้ว) ก็เป็นอันว่า เราอยู่ในสถานะ "mostly supported" ละกัน :-D

ปล. GNOME 2.12 Release Notes ฉบับแปลไทย เผื่อจะช่วยกันตรวจทาน (แต่นี่ยังไม่ใช่ฉบับจริง) ส่วน press release นั้น ต้องรอ daily rebuild คืนนี้ ถึงจะขึ้นที่ gnome.org

hacker emblem