Showing posts with label packages. Show all posts
Showing posts with label packages. Show all posts

Sunday, September 13, 2009

FreeBSD: Post-installation(cont-01)

2.10.11 Install Packages

Packages เป็นเอกสาร ที่ คอมไพล์ มาเรียบร้อย พร้อมที่จะติดตั้ง เพื่อเรียกใช้งานได้ทันที .

การติดตั้ง ๑ package ได้แสดงให้เห็นเป็นตัวอย่าง ว่า จะทำได้อย่างไร. แต่ในครั้งนี้ เราก็สามารถติดตั้งเพิ่มเติมได้ ถ้าต้องการ. ภายหลังการติดตั้ง sysinstall สามารถใช้ลง packages เพิ่มเติมได้.

                     User Confirmation Requested
The FreeBSD package collection is a collection of hundreds of
ready-to-run applications, from text editors to games to WEB servers
and more. Would you like to browse the collection now?

[ Yes ] No

เลือก [ Yes ] และกดปุ่ม Enter ซึ่งหน้าจอแสดงรายการ pacakage มาให้เลือก ก็จะปรากฏขึ้น:


รูป 2-47. เลือกหมวด (หรือ ประเภท) ของ Package


ในขณะใด ขณะหนึ่ง ท่านสามารถเลือก packages จาก media ที่ท่านติดตั้งเท่านั้น — ซึ่งครั้งนี้ได้แก่ cdrom มะฃาม —.


packages ที่มีทั้งหมด จะแสดงให้เห็น ถ้า All ถูกเลือก หรือ ท่านสามารถเลือก หมวดใด หมวดหนึ่ง มาเป็นกรณีพิเศษ ก็ได้. วางแถบสว่าง หัวข้อที่ท่านเลือก ด้วยลูกศร และกดปุ่ม Enter.

เมนู ก็จะโผล่มาให้เห็น และ แสดง ให้ท่านทราบถึง packages ที่ท่านสามารถเลือกได้:


รูป 2-48. Select Packages



ในนี้ bash shell ได้รับการเลือกให้ลง. เลือกให้มากที่สุด ที่ท่านต้องการ โดยการวางแถบไว้บน package นั้นๆ แล้วกดแป้น Space. รายละเอียดสั้นๆเกี่ยวกับ แต่ละ package จะปรากฏให้เห็นตรงบริเวณมุมล่างซ้ายของจอภาพ

โดยการกดปุ่ม Tab จะกระโดดไปมาระหว่าง package สุดท้ายที่เลือก, [ OK ], และ [ Cancel ].


เมื่อท่านจบการ หมายหัว package เหล่านั้นแล้ว, กด Tab ครั้งหนึ่ง เพื่อกระโดดไปยัง [ OK ] และกดปุ่ม Enter เพื่อกลับไปยัง เมนูของ Package Selection.


ปุ่มลูกศรซ้าย และ ขวา ก็ใช้กระโดดไปมาระหว่าง [ OK ] และ [ Cancel ]. วิธีนี้ สามารถใช้เพื่อเลือก [ OK ] ด้วยเช่นกัน และกดปุ่ม Enter เพื่อ กลับไปยังเมนูของ Package Selection.


รูป 2-49. Install Packages

ใช้ปุ่ม Tab และ ลูกศร เพื่อเลือก [ Install ] และกดปุ่ม Enter. จากนี้ ท่านต้องยืนยันว่า ท่านต้องการลง packages:


รูป 2-50. Confirm Package Installation



เลือก [ OK ] และกดปุ่ม Enter จะทำให้ การติดตั้ง packages เริ่มต้นขึ้น. ข่าวสารการติดตั้งที่กำลังดำเนินไป จะปรากฏให้เห็นไปเรื่อยจนกว่า การติดตั้งจะสิ้นสุด. และ ให้บันทึกข่าวสารต่างๆที่เกิดขึ้น หากมีความผิดพลาดเกิดขึ้นเอาไว้ด้วย.

การกำหนดค่าสุดท้าย ดำเนินไปหลังจาก package ได้รับการติดตั้ลงในเครื่องของท่าน. ถ้าท่านจบโดยการ ไม่เลือกสัก package เลย และประสงค์จะกลับไปที่หน้ากำหนดค่าสุดท้าย, เลือก Install แม้จะไม่ได้เลือกลงอะไรก็ตาม.




2.10.12 Add Users/Groups


ท่านควรเพิ่ม หรือ เติม ผู้ใช้งานอย่างน้อย ๑ ชื่อ ระหว่างการติดตั้ง เพื่อว่า ท่านสามารถใช้งานได้โดยไม่ต้อง logged in เข้ามาในฐานะ root. ทั้งนี้ เพราะ root partition นั้นมีขนาดน้อย การเรียกใช้โปรแกรม ในฐานะของ root สามารถทำให้เนื้อที่เต็มได้เร็ว. อันตรายที่มากกว่านั้นได้บันทึกไว้ข้างล่างนี้:



User Confirmation Requested Would you like to add any initial user accounts to the system? Adding at least one account for yourself at this stage is suggested since working as the "root" user is dangerous (it is easy to do things which adversely affect the entire system). [ Yes ] No

เลือก [ Yes ] และกดปุ่ม Enter เพื่อดำเนินงานเพิ่มผู้ใช้งานต่อไป.


รูป 2-51. Select User



เลือก User ด้วยลูกศร และกด Enter.


รูป 2-52. รายละเอียดของการ Add User



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




Login ID

ชื่อ ที่ต้องการใช้ สำหรับผู้ใช้งานใหม่ (จำเป็นต้องมี).

UID

ค่า ID ที่เป็นตัวเลขของผู้ใช้งานนี้ (ว่างไว้ สำหรับการใส่ให้อัตโนมัติ โดยระบบ).


Group

ชื่อของ login group ของผู้ใช้งานนี้ (ว่างไว้ สำหรับการใส่ให้อัตโนมัติ โดยระบบ).


Password

ระหัสผ่านของผู้ใช้งานนี้ (ใส่ด้วยความระมัดระวัง!).


Full name

ชื่อเต็มของผู้ใช้งาน (คำบอกเล่าเพิ่มเติม).


Member groups

groups ที่ผู้ใช้งานนี้ เป็นสมาชิกอยู่ด้วย (เช่น สามารถเข้าไปดู เข้าไปอ่าน ได้).


Home directory

home directory ของผู้ใช้งานนี้ (ว่างไว้ สำหรับค่าปริยาย).


Login shell

login shell ของผู้ใช้งานนี้ (ว่างไว้สำหรับค่าปริยาย, เช่น /bin/sh).




login shell เปลี่ยนจาก /bin/sh เป็น /usr/local/bin/bash เพื่อใช้ bash
ซึ่งได้ลงไปแล้ว ในตอนลง package นั้น กรุณาอย่าพยายามใช้ shell ที่ไม่มี มิเช่นนั้น ท่านย่อมไม่สามารถ login เข้าใช้งานได้ shell ที่ใช้งาน แพร่หลายมากที่สุดในแวดวงของ BSD คือ C shell ซึ่งดูได้จากที่เห็นเป็น /bin/tcsh


ผู้ใช้งาน ก็ถูกเพิ่มไว้ใน กรุ้ป wheel ด้วย ทั้งนี้ เพื่อว่าจะให้สามารถเป็น superuser ได้ด้วยสิทธิพิเศษของ root.


เมื่อท่านพอใจแล้ว, กด [ OK ] ซึ่งเมนู การจัดการ User and Group จะกลับมาแสดงให้เห็นอีกครั้ง:


รูป 2-53. Exit User and Group Management



Group สามารถเพิ่มในตอนนี้ก็ได้เช่นกัน ถ้ามีความจำเป็นพิเศษขึ้นมา. หรืออีกทางหนึ่ง การเพิ่ม group ย่อมกระทำได้ผ่าน sysinstall ภายหลังที่การติดตั้งได้เสร็จสิ้นไปแล้ว.


เมื่อท่านเสร็จสิ้นการเพิ่มผู้ใช้งานเข้าในระบบ, เลือก Exit ด้วยปุ่มลูกศร และกดปุ่ม Enter เพื่อดำเนินงานการติดตั้งต่อไป.



2.10.13 ใส่ระหัสผ่านให้ root


Message Now you must set the system manager's password. This is the password you'll use to log in as "root". [ OK ] [ Press enter or space ]

กดปุ่ม Enter เพื่อใสค่าระหัสผ่านให้กับ root

ระหัสผ่าน จำเป็นต้องกรอกซ้ำ ๒ หนอย่างถูกต้อง. ก็คงไม่ต้องพูดมาก, ให้ท่านแน่ใจเอาเองว่า ท่านมีวิธีหาระหัสผ่านได้ ในกรณีที่ท่าน ลืม. ขอให้สังเกตุว่า ระหัสผ่าน ที่ท่านกรอกลงไปนั้น จะไม่ปราฏกให้เห็น ไม่มีแม้กระทั่งตัวดอกจันทร์แสดงออกมา.


New password:
Retype new password :

การติดตั้ง จะดำเนินต่อไป ภายหลังที่ระหัสผ่านได้ใส่ลงไปสำเร็จ.



2.10.14 Exiting Install


ถ้าท่านต้องการกำหนดค่าให้กับ additional network services หรือกำหนดค่าอื่นๆ, ท่าน สามารถกระทำได้ จากตรงนี้ หรือ ภายหลังการติดตั้งด้วย sysinstall.



User Confirmation Requested Visit the general configuration menu for a chance to set any last options? Yes [ No ]

เลือก [ No ] ด้วยปุ่มลูกศร และกดปุ่ม Enter เพื่อกลับสู่เมนูหลักการติดตั้ง.


รูป 2-54. Exit Install


เลือก [X Exit Install] ด้วยปุ่มลูกศร และกดปุ่ม Enter. ท่านจะได้รับคำถามเพื่อยืนยันว่า ท่านต้องการออกจากการติดตั้ง:


User Confirmation Requested Are you sure you wish to exit? The system will reboot (be sure to remove any floppies/CDs/DVDs from the drives). [ Yes ] No

เลือก [ Yes ] และนำแผ่น floppy ออก ถ้าบู้ตจากแผ่น floppy. CDROM drive จะถูกล้อคไว้ จนกว่าเครื่องจะเริ่ม reboot. CDROM drive ถึงจะไม่ถูกล้อค ก็ให้เอาแผ่น CDROM ออกในช่วงสั้นๆนั้นโดยเร็ว.

ระบบจะ reboot ดังนั้น ให้สังเกตุดูว่ามี error messages อะไรบ้าง ที่อาจจะเกิดมีขึ้น, กรุณาดู หัวข้อ 2.10.16 สำหรับรายละเอียดมากกว่านี้.

Tue Sep 15 15:14:35 ICT 2009

Tuesday, September 8, 2009

FreeBSD: Choosing What to Install

เลือก distribution ที่จะลง

ตามที่ตกลงแต่แรกน่ะว่า ลงทั้งหมด ทุกอย่าง ตามรูป 2-25 พอเห็น ให้เลือก All

รูป 2-25. เลือก Distributions

เมื่อเลือก distribution แล้ว ก็ตามที่บอกแต่ต้นไว้เช่นกันด้วยว่า ต้องลง ports collection มันเป็นเพียงที่ช่วยให้ท่านสามารถ สร้าง applications ต่างๆ และใช้งานกับเครื่องของท่านได้

มีเนื้อที่สักประมาณ 500 MB สำหรับ ports collection ก็พอเพียงแล้ว และเมื่อท่านพบข้อความนี้

                         User Confirmation Requested
 Would you like to install the FreeBSD ports collection? 

 This will give you ready access to over 20,000 ported software packages,
 at a cost of around 417 MB of disk space when "clean" and possibly much
 more than that if a lot of the distribution tarballs are loaded
 (unless you have the extra CDs from a FreeBSD CD/DVD distribution
 available and can mount it on /cdrom, in which case this is far less
 of a problem). 

 The Ports Collection is a very valuable resource and well worth having
 on your /usr partition, so it is advisable to say Yes to this option. 

 For more information on the Ports Collection & the latest ports, visit: 
     http://www.FreeBSD.org/ports  
                              [ Yes ]     No

เลือก [ Yes ] ด้วยปุ่มลูกศร เพื่อติดตั้ง Ports Collection . กดปุ่ม Enter เพื่อทำงานต่อไป.

เมนู เลือก distribution ก็จะกลับมาให้เห็นอีกครั้ง

รูป 2-26 เลือก distribution

เลือก Exit ด้วยปุ่มลูกศร และให้แน่ใจด้วยว่า [ OK ] นั้นถูกเลือกอยู่ ก็ดูเอาง่ายๆว่า ปุ่มนั้นมัน highlighted อยู่นั่นแหละ แล้วก็กดปุ่ม Enter เพื่อทำต่อในลำดับถัดไป

Wed Sep  9 14:20:00 ICT 2009
ตอนนี้ ขอรวบรัดเอาสั้นๆน่ะ อย่าว่ากัน
 แต่จะแปลแน่นอน เพราะต้องส่งไปให้ FDP

Thursday, June 19, 2008

ports(1)

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

เรื่องที่ไม่พอใจก็ส่วนที่สร้าง packages ที่เราได้จากการลง port นั้นๆ เท่านี้แหละ ที่ไม่ค่อยจะพอใจน่ะ เพราะเหตุว่า เวลาที่อยากเก็บ packages ทั้งหมดที่ได้จากคำสั่ง

# make install

ซึ่งพอเราสั่ง

# make package-recursive

แล้วมันมักจะทำ หรือ สร้าง packages มาหมดทุกตัว โดยไม่สนใจว่า packages อื่นที่เหลือนั้น สร้างมาก่อนหน้านี้แล้ว แบบว่า มันสร้างซ้ำอีกหนะ

อันนี้แหละ ที่ไม่พอใจ เพราะไม่อยากเสียเวลาไปสร้างซ้ำอีก มันนานนะ ไม่มีอะไรเลย

แล้วจะแก้ยังไง

จากความรู้ที่ว่า เมื่อเราลง ports นั้น มันจะสร้าง work directory ขึ้นมาด้วย และจะยังคงอยู่ ตราบเท่าที่เราไม่ลบทิ้งด้วยคำสั่ง

# make clean

อีทีนี้ ถ้าเราไปไล่สั่ง # make package ไปเสียทุกที่ มันก็จบ

เอาละ พอได้ไอเดียแบบนี้ ก็ลงมือทำเลย ง่ายแล้ว แต่ต้องเป็น root น่ะ ตามนี้น่ะ

# touch pkgs
# chmod +x pkgs
# echo #\!/bin/sh > pkgs
# echo set -x >> pkgs
# echo >> pkgs
# find /usr/ports -name work -type d -print | \
   sed  -e   's,/usr,cd /usr,'  -e   's,/work, \&\& make package,' >> pkgs

จากนั้น เราก็ลำบากเพียงสั่ง

# ./pkgs

สิ่งที่ต้องการ ก็บรรลุผลสมดั่งใจ
แล้วก็ อย่าลืมสั่ง clean ด้วยละ ไม่งั้นตัว work directory มันจะยังคงอยู่ และจะทำให้งวดต่อไป เราเองแหละที่ต้องทำซ้ำไปเสียเอง ส่วนที่ว่าจะสั่งให้เป็น make clean อย่างไร ไปคิดเอาเองน่ะ

ตัว shell script ที่อยู่ในแฟ้ม pkgs นั้นจะเปลี่ยนไป ตัวอย่างในกรณีที่ลง webmin ซึ่งต้องการ p5-Authen-SSLea แต่ว่าได้ลงไปแล้วโดย ports อื่น ผลที่ได้จึงมีเพียงเท่านี้


#!/bin/sh
set -x

cd /usr/ports/security/p5-Authen-PAM && make package
cd /usr/ports/sysutils/webmin && make package


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

ขอได้รับการขอบคุณอย่างมาก จาก มะไฟ ไว้ ณ ที่นี้ด้วย

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 ของท่านเอง

ขอให้โชคดี

View My Stats