สืบเนื่องมาจากโครงการพัฒนาลีนุกซ์ฉบับกระเป๋า เมื่อปีที่แล้ว เขียนโครงการไว้นานทำออกมาได้ 2 release แล้วเลิกทำครับ เพราะเข้าใจว่าการ remaster มาผิดทาง เอาเป็นว่าไม่ต้องพูดถึงมันก้อแล้วกันครับ หลายเดือนที่ผ่านมาได้ทดลองประกอบ Ubuntu จนพอเข้าใจบ้างแล้วว่าจะทำ ลีนุกซ์ในแบบฉบับของผมทำได้ยังไง เอาละมาถึงข้อใหญ่ในการทำ repository เพื่อการสนับสนุนซอฟต์แวร์ใหม่ๆ ใน โครงการพัฒนาลีนุกซ์ฉบับกระเป๋า กันครับ จากโครงร่างของ repositry ของ Advance Packaging Tool (APT) ทำให้ทราบว่าการแบ่ง รุ่นในแต่ละเวอร์ชั่นทำโดยการสร้างฐานข้อมูลของ Package ในไดเรคทอรี dists ซึ่งใน dists นี้ก้อจะมี ไดเรคทอรีที่เป็นชื่อแต่ละเวอร์ชั่นอยู่ ในนั้นก้อจะมีไฟล์ฐานข้อมูล Package อยู่ เอาล่ะ คราวนี้ผมก้อแก้ปัญหาในเรื่อง repository กลาง และ การซัพพอร์ทในแต่ละเวอร์ชั่นของโครงการพัฒนาลีนุกซ์ฉบับกระเป๋าได้แล้ว

แนวความคิดในการทำ repository แบบนี้สามารถประยุกต์ใช้ในองค์กรได้ เช่น ฝ่าย IT สามารถทำ repository เล็กๆ เก็ยไฟล์โปรแกรมใหม่ๆ ที่ผ่านการทดสอบแล้วว่าใช้ได้ดี หรือ จัดทำ แก้ไข ใหม่ แล้วเอาไปใส่ไว้ให้เพื่อนๆ พนักงานได้ apt-get ไปใช้กันได้ในสำนักงาน ขั้นตอนง่ายๆ ในการทำ repository มีไม่ยากครับ คือ เอา .deb ของเรานี่แหละไปใส่เอาไว้ที่ไดเรคทอรีที่เก็บไฟล์ deb เอาไว้ ยกตัวอย่างเช่น pool/main เป็นต้น แล้วสร้างฐานข้อมูล Package ออกมาให้เก็บไว้ในไดเรคทอรีในแต่ละเวอร์ชั่น

ขั้นตอนการทำ

สมมุติว่าติดตั้ง apache แล้วนะครับ :) ถ้าใครยังไม่ได้ติดตั้งก้อ apt-get apache2 ได้เลยครับ และในตอนนี้เว็บของเราก้อจะเก็บอยู่ที่ /var/www เอาเป็นว่าผมขอไม่เปลี่ยนไดเรคทอรีละกัน สำหรับใครจะสร้าง link โยงไปไดเรคทอรีอื่นก้อตามสะดวก ในไดเรคทอรี /var/www นี้เราจะใช้เก็บ repository ของเราครับ แต่ก่อนอื่น สร้างที่เก็บให้เป็นที่เป็นทางจะดีกว่าน่ะ เช่น packages เป็นยังไง

# mkdir /var/www/packages
# cd /var/www/package

ทีนี้เรามาสร้างที่เก็บไฟล์ .deb ของเรากัน (กำหนด pool binary ให้กับ hardy)

# mkdir -p pool/main
# mkdir -p dists/hardy/main/binary-i386
# mkdir .cache

จากนั้นสร้างไฟล์ config เพื่อเก็บข้อมูลของ repository ชื่อไฟล์คือ apt-release.conf

# gedit apt-release.conf

ใส่ข้อมูลดังรายละเอียดข้างล่าง

APT::FTPArchive::Release::Codename "hardy";
APT::FTPArchive::Release::Origin "office.redlinesoft.net";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "RedLineSoft Ubuntu Repository";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Suite "hardy";

ตรงตัวหนา เปลี่ยนไปตามควาต้องการของคุณเองนะครับ จากนั้นสร้างไฟล์ apt-ftparchive.conf เพื่อระบุ config ในการสร้างไฟล์ฐานข้อมูล Package

# gedit apt-ftparchive.conf

แล้วใส่ข้อมูลดังต่อไปนี้

Dir {
ArchiveDir ".";
CacheDir "./.cache";
};
Default {
Packages::Compress ". gzip bzip2";
Contents::Compress ". gzip bzip2";
};
TreeDefault {
BinCacheDB "packages-$(SECTION)-$(ARCH).db";
Directory "pool/$(SECTION)";
Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
Contents "$(DIST)/Contents-$(ARCH)";
};
Tree "dists/hardy" {
Sections "main";
Architectures "i386";
}

จากนั้นหาไฟล์ .deb มาใส่ใน pool/main แล้วสั่ง update repository ด้วยคำสั่ง

# cd /var/www/packages
# apt-ftparchive generate apt-ftparchive.conf
# apt-ftparchive -c apt-release.conf release dists/hardy > dists/hardy/Release

เรียกใช้งาน repository ของเราโดยตั้งค่า source.list

# gedit /ect/apt/sources.list

ใส่ข้อมูล repository ของเราลงไปต่อท้ายไฟล์ดังนี้

deb http://office.redlinesoft.net/packages hardy main

จากนั้นสั่ง update package ด้วยคำสั่ง

# apt-get update

ทีนี้ลอง apt-get install ไฟล์ .deb ที่คุณเอาไปใส่ใน pool/main ดูสิครับ

เอาล่ะมาว่าด้วยเรื่องการสนับสนุนหากว่าถึงเวลาในการเปลี่ยนไปเป็น inteprid ibex เราจะทำยังไงกับ repository ตัวนี้กันดี วิธีง่ายๆ ครับ เพิ่มข้อมูลข้างล่างลงในไฟล์ apt-ftparchive.conf

Tree "dists/intrepid" {
Sections "main";
Architectures "i386";
}

จากนั้นสร้างไฟล์ apt-release-intrepid.conf ขึ้นมาใหม่ดังนี้

APT::FTPArchive::Release::Codename "intrepid";
APT::FTPArchive::Release::Origin "office.redlinesoft.net";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "RedLineSoft Ubuntu Repository";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Suite "intrepid";

จากนั้นก้อเอา .deb ไปใส่ที่ pool/main เหมือนเดิมครับ แล้วสั่ง update repo ด้วยไฟล์ config ตัวใหม่ดังนี้

# apt-ftparchive generate apt-ftparchive.conf
# apt-ftparchive -c apt-release-intrepid.conf release dists/hardy > dists/hardy/Release

เท่านี้ก้อแก้ปัญหามาแรมปีได้แล้ว เห่อๆ ลดทรัพยากร bandwidth ในการ download ต่อเครื่องไปได้อีกเยอะครับ เอาเป็นว่าคราวหน้ามาต่อเรื่องการ sign gpg ให้กับ repository ของเรากันครับ
 

Comments are closed.