มีเรื่องให้ได้จัดการในอีกโครงการหนึ่งคือ Suriyan ซึ่งเป็นโครงการ Linux ที่อยู่ดีๆ ก็ฟื้นขึ้นมาแบบงงๆ จนกลายเป็นหน้าที่ที่ได้รับในส่วนการพัฒนาเพิ่มเติมของ Suriyan นั่นคือส่วนที่ไม่มีอยู่ในดิสทริบิวชันต้นน้ำ (Ubuntu) ซึ่งก็ติดปัญหาเดิมคือการบริหารจัดการ repository นั่นเอง แหม หาทาง build deb source ได้แต่การจัดการ repo แทบกระอักเลือด หากจำกันได้ผมเขียนเขียนวิธีการจัดการ repo ไว้ 2 แบบ คือ

  1. trivial archive
  2. official archive

ซึ่งวิธีการจัดการ repo 2 แบบนี้คล้ายกัน ต่างกันเพียงส่วนของ apt-pinning และเครื่องมือในการจัดการเท่านั้น หากนึกไม่ออกลองไปหาอ่านที่ blog เก่าๆ ได้ครับ ซึ่งปัญหาในการจัดการ repo และ package ที่ต้องการโดยแบ่ง version ออกเป็นส่วนๆ เพื่อการ maintain นั้นยุ่งยากมากกว่ากันหลายเท่า เพราะนอกจาก maintain เวอร์ชั่นปัจจุบันยังต้องเตรียมในรุ่นก่อนหน้าก็ถือว่ายุ่งพอสมควร แต่การสร้างและจัดการ repo มีหลายวิธีด้วยกัน วันนี้จะมาแนะนำการสร้าง repo แบบ official archive แต่ใช้เครื่องมือชื่อ reprepro กันครับ

ก่อน การทำ repo เรามาวางแผนสักสักนิด ผมตั้งใจจะให้ apt ใช้ url ประมาณนี้ครับ http://suriyan.in.th/repo นั่นหมายความว่าผมจะต้องสร้าง repo ภายใต้ document root (หรือไม่ก็ได้ หากสร้างใน directory อื่นสามารถใช้ aliase ชี้ได้) สมมุติว่าผมสร้างที่ /var/www/repo ก็แล้วกันะครับ

ก่อนอื่นติดตั้ง reprepro กันก่อน

# aptitude install reprepro

จากนั้นสร้าง dir repo ขึ้นมา

# mkdir -p /var/www/repo/conf

ให้สร้างไฟล์ ที่กำหนด distribution ขึ้นมาชื่อ distributions ใน /var/www/repo/conf ใส่ข้อมูลลงไปดังนี้

Origin: Your Name
Label: Your own label
Suite: ubuntu
Codename: karmic
Version: 9.10
Architectures: i386 source
Components: main restricted
Description: Your description
SignWith: yes

เท่านี้ก็เรียบร้อยครับ เอา deb source มาใส่ใน repo ของเราได้เลย โดยใช้คำสั่ง

# reprepro -Vb . include <codename> <.change file>

หรือ

# reprepro -Vb . includedeb <codename> <.deb file>

ตัวอย่าง เช่น

# reprepro -Vb . include karmic suriyan-wallpaper1.0i386.change

reprepro ก็จะค้นหาไฟล์ dsc, source และ deb ที่ build เสร็จแล้วให้เรา พร้อมสร้าง dir ใน pool จากนั้นก็ใส่ dsc, source และ deb ลงใน pool ให้อัตโนมัติ แถม sign repo ให้เราด้วย สำหรับการเอา package ออกก็ไม่ได้ยากอะไร เพียงแค่ใช้คำสั่ง reprepro ดังนี้

# reprepro -Vb . remove <codename> <package name>

เท่านี้คุณก็จัดการ repo ได้ง่ายๆ แล้ว

Comments are closed.