สืบเนื่องมาจากโครงการพัฒนาลีนุกซ์ฉบับกระเป๋า เมื่อปีที่แล้ว เขียนโครงการไว้นานทำออกมาได้ 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 ของเรากันครับ
 

แหมกลับมาใช้ Fedora ทั้งทีก็คงไม่เขียนถึง YUM repository คงจะไม่ได้ YUM จะว่าเป็นของใหม่ ก็คงไม่ใช่ YUM เป็นโปรแกรมช่วยจัดการแพคเกจที่มีอยู่ใน Fedora มานานหลายเวอร์ชันแล้วครับ แต่ผมเองไม่ได้ทดสอบหรือทดลองอะไรแหวกแนวมากนัก แต่ที่แน่ๆ YUM ใน Fedora 11 เปลี่ยนไป! ผมสังเกต Fedora หันมาใช้ XML มากขึ้นหลังจาก Fedora 9 และ Fedora 10 และที่ผ่านมาส่วนใหญ่จะถูกแทรกลงในส่วนที่ไม่กระทบกับผู้ใช้มากนัก สำหรับท่านที่ใช้ YUM ใน Fedora 11 จะพบว่ามันเปลี่ยนไป ไม่สามารถเรียกใช้ Repository เก่าได้ ก็เนื่องมาจาก repo data ของ YUM เปลี่ยนไปนั่นเอง เอาล่ะเกริ่นมามากเดี๋ยวจะเริ่มงง เรามาสร้าง YUM repository เอาไว้ใช้ในสำนักงาน/องค์กรกันดีกว่า ก่อนจะเริ่มต้นมาอ่านข้อตกลงกันก่อน เครื่องที่ผมใช้ มี IP address เป็น 192.168.0.100 นะครับ เอ้ามาเริ่มกันเลย

แปลงร่างเป็น root กันก่อนเพื่อความสะดวกครับ

su –

จากนั้นติดตั้ง Apache

yum httpd

ตั้งค่าให้ Apache เริ่มต้นตอนบูท

chkconfig –levels 235 httpd on

จากนั้น start Apache ได้เลย

/etc/init.d/httpd start

จากนั้นมาสร้างที่เก็บ repo กัน Fedora วางโครงสร้างของ repository ได้ดีมาก และสร้าง repo แบ่งออกเป็นเวอร์ชันได้ ทำให้ง่ายในการจัดการ โครงสร้างของ repo ที่เราจะสร้างกันหน้าตาเป็นแบบนี้ครับ

fedora/releases/เลขเวอร์ชัน/Everything/i386/os/Packages

สมมุติว่าเราสร้าง repo ของ Fedora 11 เราก็จะได้โครงสร้างแบบนี้ครับ

fedora/releases/11/Everything/i386/os/Packages

มาสร้างไดเรคทอรีใน /var/www กันเลยครับ

mkdir -p /var/www/fedora/releases/11/Everything/i386/os/Packages

จากนั้นให้คุณคัดลอกไฟล์ .rpm ไปไว้ที่ไดเรคทอรี Packages แล้วสั่งสร้าง repo data ดังนี้

createrepo /var/www/fedora/releases/11/Everything/i386/os/

เท่านี้ก็เรียบร้อยแล้วครับ จากนั้นให้เครื่อง client ตั้งค่า repo มาทดสอบได้เลย วิธีการตั้งค่า repo เข้าใช้งาน repo ในสำนักงานเราก็ง่ายๆ ครับ สร้างไฟล์ชื่อ officerepo.repo ลงใน /etc/yum.repo.d

nano /etc/yum.repo.d/officerepo.repo

ใส่ข้อมูลลงไปดังนี้ครับ

[office-repo]
name=Office Repo for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://192.168.0.100/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

แหมหลังจากอัพเกรดเซิร์ฟเวอร์ขนานใหญ่ ทั้ง RAM และ Storage ตอนนี้ Mirror แห่งชาติของเพราะมีพื้นที่รวมกว่า 30TB ตอนี้ก็ได้เปิดให้ใช้บริการอย่างปกติแล้วครับ วันนี้เลยได้แวะเวียนไปใช้บริการเล็กน้อยในส่วนของ Fedora 11  เรื่องของเรื่องคือ Fedora 11 พยายาม rotate mirror server ที่อยู่ในรายการ mirror แต่ที่น่าเสียดาย mirror.in.th ไม่อยู่ใน list ซะงั้น ก็คงต้องเพิ่มกันเอาเองล่ะครับ วิธีการเพิ่ม repo เพื่อใช้ mirror.in.th ก็ง่ายนิดเดียว วิธีการทำมีดังนี้ครับ

สร้างไฟล์ thai-national-mirror.repo ลงใน /etc/yum.repo.d

su -c ‘nano /etc/yum.repo.d/thai-national-mirror.repo’

จากนั้นใส่ข้อมูลลงไปดังนี้

[thai-national-mirror]
name=TMOSS for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://mirror.in.th/osarchive/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

เอ้าใช้ให้คุ้มค่ากันหน่อยครับ ลงทุนไปหลายกะตังค์ เห่อๆ

เหมือนเป็นธรรมเนียมปฏิบัติเวลาผมใช้ Linux ตระกลูไหนต้องทำ custom repository ได้นั่นหมายถึงการ distribute และการ contribute แพคเกจใหม่ๆ ให้กับ Linux distro นั้นๆ ทางอ้อม ซึ่งผมเองทำประจำอยู่แล้ว แต่ไม่ได้เอาแพคเกจตัวเองเข้าต้นน้ำสักที เอาเป็นว่าอยู่อย่างพอเพียง build แจกกันเล่นไปเรื่อยๆ นี่แหละครับสนุกกว่า ใช้ได้บ้าง ไม่ได้บ้างก็อย่างว่ากันนะครับ วันนี้ก็เลยมาแนะนำ ThaiOpenSource for Fedora repository กันครับ ผมเพิ่มทำเสร็จเมื่อเช้ามีแพคเกจอยู่ 4 ตัวครับ ให้ลองค้นหากันดูเอาเองว่าแพคเกจชื่ออะไร ;) เอาละมา config YUM repo กันเลย ให้สร้างไฟล์ที่ชื่อ thaiopensource.repo ลงใน /etc/yum.repo.d

su -c ‘nano /etc/yum.repo.d/thaiopensource.repo’

จากนั้นใส่ข้อมูลลงไปดังนี้

[thaiopensource]
name=ThaiOpenSource.Org for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://thaiopensource.org/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

แลัว update repo data ในเครื่องได้เลยครับ โดยใช้คำสั่ง

su -c ‘yum update’

สำหรับท่านที่ติดตั้ง Ubuntu 10.10 ไปแล้วต้องการติดตั้งแพคเกจเพิ่มเติมไม่ว่าจะเป็นฟอนต์ภาษาไทยกว่า 40 แบบ Search plugin สำหรับ Firefox โปรแกรมดิกชันนารี Stardict พร้อมฐานข้อมูลดิกชันนารี Lexitron สามารถใช้งานคลังซอฟต์แวร์ของ Suriyan ได้แล้ววันนี้ วิธีการใช้งานให้ติดตั้งแพคเกจ suriyan-repository1.1-1all.deb เพื่อติดตั้ง repository จากนั้นสั่ง apt-get update เพื่ออัพเดทรายการคลังซอฟต์แวร์ และติดตั้งเพคเกจต่างๆ ผ่าน Software Center ได้เลย สำหรับแพคเกจอื่นๆ จะทะยอยเข้าคลังซอฟต์แวร์เรื่อยๆ ครับ หวังว่าคลังซอฟต์แวร์ของ Suriyan จะช่วยให้คุณใช้งาน Ubuntu ได้ง่ายขึ้น

คลังซอฟต์แวร์ของ Suriyan เตรียมแพคเกจที่เกี่ยวข้องกับภาษาไทยบางส่วนเรียบร้อยแล้ว ไม่ว่าจะเป็นฟอนต์ภาษาไทย ดิกชันนารีภาษาไทย และแพคเกจอื่นๆ ที่เกี่ยวข้อง เพื่อรองรับผู้ใช้งาน Ubuntu 10.10 Maverick Meerkat และ Suriyan 53.10 Demon Child สำหรับการตั้งค่า Repo สามารถตั้งค่าได้โดยการติดตั้งแพคเกจ suriyan-repository เช่นเดิม หากท่านที่อัพเกรดจาก Ubuntu 10.04 ไปเป็น Ubuntu 10.10 สามารถอัพเดทแพคเกจใหม่จากคลังซอฟต์แวร์ได้เช่นกัน คลังซอฟต์แวร์ยังเป็นสถาปัตยกรรม x86 อยู่หากท่านใดที่ต้องการช่วยเหลือพัฒนาคลังในส่วนสถาปัตยกรรม x64 ทางจะทีมงานยินดีเป็นอย่างยิ่งครับ คลังซอฟต์แวร์ของ Suriyan ไม่ได้เป็นเพียงแค่คลังซอฟต์แวร์ที่อยู่ในรูป binary เพียงอย่างเดียว คุณสามารถดาวน์โหลดซอร์สโค้ดจากคลังซอฟต์แวร์ได้ โดยใช้เครื่องมือจัดการแพคเกจอย่าง APT และ Synaptic มาช่วยกันสร้างคลังซอฟต์แวร์เชิงสร้างสรรค์กันครับ สำหรับท่านที่ต้องการเพิ่มซอฟต์แวร์ในคลังขอความกรุณาติดต่อ @anoochit และ @gumara ครับ