Wednesday, July 4, 2007

ports

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

ต้องมีความรู้ในเรื่องที่จะลง
การลง ports นั้นง่ายมาก จริงครับ ง่ายจริงๆ แต่การปรับแต่ง และ ใช้งานโปรแกรมที่ลงนั้น เราต้องมีความรู้พอควร อย่างกับจะลงอะปะเช่ เราก็ต้องรู้ว่า configuration file เพื่อกำหนด document root นั้นอยู่ที่ไหน อย่างนี้เป็นต้น ไม่งั้นก็เท่ากับ ไก่ได้พลอย

ต้องอ่าน /usr/ports/UPDATING/ ก่อนลงมือทำ
อันนี้จำเป็นมาก เพราะจะทำให้เราทราบถึงความเปลี่ยนแปลงต่างๆ ของแต่ล่ะ ports หรือกระทั่งทั้ง category เลยทีเดียว อย่างเมื่อเร็วๆนี้ที่มีการเปลี่ยนแปลงพวกที่ลงโปรแกรม X windows จากที่เคยลงไว้ที่ /usr/X11R6 มาไว้ที่ /usr/local หรือก่อนหน้านั้นไปอีกนิ้ด เกี่ยวกับ php เขาบอกว่ายกเลิกหลายสิ่งหลายอย่างไป แนะให้ไป config ก่อนแล้วถึงสั่ง make ทีหลัง ก็คงจังหวะเดียวกับที่เราเจอ php-extensions นั่นแหละ ซึ่งถ้าไม่อ่านก็คงไม่รู้
หรือพวก gnome2 ก็เหมือนกัน ที่เป็นต้นเหตุให้เจอ configure errors อะไรพวกนี้ ซึ่งเท่าที่เคยร้องไห้มามากจากที่ลงไม่ได้ แท้จริงก็เพราะใช้โปรแกรมเก่า, pkgconfig, กับ ports ใหม่แทน
เหล่านี้ แก้ไขได้โดยการอ่านแฟ้ม /usr/ports/UPDATING แล้วดูว่าเรามีอะไรต้องปรับให้ทันสมัยมั่ง ถ้าเราจะลง ports ใหม่ๆลงไป

คำสั่ง script จะช่วยบันทึกรายละเอียดระหว่างการ build ที่สำคัญๆเอาไว้ได้
อันนี้จำเป็นมากสำหรับการเก็บรายละเอียดที่เราดูไม่ทันระหว่างการ build และการ install
จริงอยู่แม้แฟ้มที่เก็บจะเทอะทะ แต่พอเราอ่านเข้าใจทะลุปรุโปร่งแล้ว ก็พอจะลบทิ้งได้ หลังจากนั้น
เคล็ดคือ
# make fetch-recursive
# script
# make
# make install
# exit
แฟ้มที่เก็บรายละเอียดต่างๆชื่อว่า typescript ครับ อ่านซะเก็บแต่เนื้อๆไว้ และลบทิ้งหลังจากนั้น

ต้องเข้าใจการจัด configurations
อันนี้ เกี่ยวเนื่อง หรือสืบเนื่องจากหัวข้อ ต้องมีความรู้ในเรื่องที่จะลง โน้นแนะ ลงแล้วแต่จัดแฟ้ม configuration ไม่เป็น มันก็ใช้ไม่ได้หรอก ก็อย่าง MySQL นั่นปะไร เราจะรู้ไหมว่าจะเลือกแฟ้มไหน, my.cnf, กับขนาดข้อมูลเรา จากตัวอย่างที่เขาให้มา และอันนี้ บางทีก็ต้องจ้องหน้าจอตอนสั่ง make ด้วย ซึ่งเป็นไปไม่ได้อยู่แล้ว แม้ว่าเขาจะบอกโต้งๆที่หน้าจอ เพราะมันจะอยู่ไม่ทันให้เราได้อ่านหรอก ข้อมูลอื่นๆจะทับถมมาแทนที่หน้าจอ
และก็นี่แหละ คือความจำเป็นของ script(1)

pkg_info -D packages จะช่วยได้มาก
คำสั่ง pkg_info มีประโยชน์มาก อย่างเช่นเราอยากรู้ว่า เอ อืมม นี่ตูลงอะปะเช่ไว้มั่งรึเปล่าหว่า
เราก็ตรวจสอบได้ง่ายๆ ดังนี้
# pkg_info -Ix apache
apache-2.2.4_2 Version 2.2 of Apache web server with prefork MPM.

ซึ่งถ้าลงไว้ ก็จะได้ผลลัพธ์ออกมา ก็ที่ปรากฏใน column แรกนั่นแหละ แต่ถ้าไม่มีอะไรออกมาเลย ก็แสดงว่า เรายังไม่ได้ลง
ก็แล้วทีนี้ เราจะรู้ได้ยังไงว่าโปรแกรมที่ลงไว้นั้น เขามีคำแนะนำที่สำคัญๆอะไรไว้บ้าง
อันนี้ก็บอกได้ว่า ให้ไปดู pkg_info(1) แต่ว่าก็ออกจะเกินไป หากไม่บอกกันมั่ง อย่างตัวอย่างที่ยกมานั้น ลองดูซิ
# pkg_info -D apache-2.2.4_2
Information for apache-2.2.4_2:

Install notice:
To run apache www server from startup, add apache22_enable="YES"
in your /etc/rc.conf. Extra options can be found in startup script.

ที่เขาบอกก็คือว่า ถ้าอยากให้ อะปะเช่ วิ่งปุ้บตอนเปิดเครื่องทุกครั้ง ก็ให้ใส่ประโยค
apache22_enable="YES"
ในแฟ้ม /etc/rc.conf ไว้ก็แล้วกัน และนี่คือสิ่งที่พอมีค่าจากคำสั่ง pkg_info(1) โดยเฉพาะ pkg_info -D

ในเรื่องของ ports แล้ว สิ่งที่ใคร่ขอแนะนำก็คือทุกครั้งที่เรา install เราสมควร 'เก็บ' ports นั้นๆไว้ในรูปของ binary ด้วย ทั้งนี้ก็เพื่อว่า ในอนาคตข้างหน้า ยามที่เราใช้ version สูงขึ้นแล้วมีปัญหา เรายังพอมี version เก่าไว้ให้ใช้ได้ดีอยู่นั่นเอง
วิธีการก็ง่ายๆ หลังจากที่สั่ง make install แล้ว ก็เพียงสั่ง make package เท่านั้นเอง

กล่าวโดยสรุป ในแต่ละ ports ที่ท่านลงนั้น สมควรทำ หรือ สั่ง ดังนี้
ในกรณีที่ท่านต้องการเก็บ package ไว้ ให้สร้าง subdirectory ไว้ดังนี้ คำสั่งนี้ ทำหนเดียวพอครับ

# mkdir -p /usr/ports/packages

จากนั้นก็ตามนี้เลยครับ ง่ายมากจริงๆ

# cd /usr/ports/category/port-name/
# make fetch-recursive
# script
# make
# make install
# exit
# make package
# make clean

ก็หวังว่า ข้อเขียนนี้คงจะพอมีประโยชน์กับชาว FreeBSD กันบ้าง และก่อนจากก็ใคร่ขอแนะนำให้หาความรู้เพิ่มเติม จากเอกสารต่างๆใน /usr/ports/Mk/*.mk ที่เกี่ยวข้อง โดยเฉพาะ /usr/ports/Mk/bsd.port.mk เพื่อเพิ่มศักยภาพทั้งในทาง programming และ administrators ของท่านเอง

ขอให้โชคดี

No comments:


View My Stats