วิธีสร้าง Debian Package สำหรับติดตั้งโปรแกรมบน Ubuntu

จากผู้ใช้สู่ผู้สร้าง

  • ถ้าใช้ Linux เครือข่าย Debian  เช่น Ubuntu, Kubuntu การติดตั้งโปรแกรม ไลบรารีต่างๆ คงคุ้นเคยกับ package ที่มี extension เป็น deb กันพอสมควร ผมมีโปรแกรมที่พัฒนาด้วย lazarus อยู่หลายโปรแกรม บางโปรแกรมพอร์ทมาจากเดลไฟ บางโปรแกรมพัฒนาเริ่มต้นด้วย lazarus โดยตรง

  • เวลาต้องการนำไปติดตั้งเครื่องอื่นค่อนข้างยุ่งยาก เพราะต้อง copy ไฟล์ไบนารีไปวางไว้ที่เครื่องปลายทางโดยตรง ปัญหาอีกอย่างคือเครื่องปลายทางไม่ได้ติดตั้งไลบรารีที่โปรแกรมต้องการ
  • เรามาลองสร้าง Debian Package ก่อนหน้านี้ผมกลัวว่าจะมีอะไรที่ยุ่งยาก เมื่อลองแล้วง่ายกว่าที่คิด ใช้เวลาลองผิดลองถูกประมาณสักหนึ่งชั่วโมงก็สามารถนำไปติดตั้งได้แล้ว

ข้อกำหนด (Debian Package Policy)

  • ข้อกำหนดหรือนโยบายเป็นขอบเขตว่าถ้าจะสร้าง debian package จะต้องทำอะไรบ้างที่อยู่ในกรอบนี้หาอ่านได้ที่นี่ บอกกันตามตรงว่าผมดูผ่านๆ ถ้าจะอ่านกันจริงๆตอนนี้คงไม่ได้มาเขียนโพสต์นี้หรอก คงเกิดอาการกล้าๆกลัวๆ จะทำได้หรือปล่าว
  • ที่จำเป็นต้องมีกรอบและกติกา ก็เพราะเวลาทำการติดตั้ง debian จะได้หาสิ่งที่ต้องการได้ถูกเช่นใน package ของเราจะมีโปรแกรมที่เป็นไฟล์ไบนารี มีไฟล์ icon ที่จะแสดงบนเมนูหรือ desktop มีชื่อโปรแกรมที่กำกับใต้ล่าง icon ผู้พัฒนาคือใคร เป็นโปรแกรมรุ่นที่เท่าไหร่ ต้องการไลบรารีอะไร (Dependency)

ขั้นตอนการสร้าง Debian Package อย่างง่าย

1.สร้างไดเรคทอรีหลัก
  • ผมสร้างไดเรคทอรีหลักใน Home ชื่อ MyDebianPackages เมื่อเสร็จแล้วเราจะสร้างไดเรคทอรีย่อยๆเพื่อแยกเก็บแต่ละโปรแกรม ถ้าไม่ใช้ command line ก็ Nautilus นี่แหละง่ายๆ
  • สร้างไดเรคทอรีย่อยแยกตามโปรแกรม ตัวอย่างผมสร้างไว้ 3 ไดเรคทอรี
ไดเรคทอรีสำหรับเก็บ Debian Package
  • ผมยกตัวอย่างให้เห็นความแตกต่างโปรแกรม Traverse Pro ต้องการไลบรารีพื้นฐานคือ GTK2 ส่วนอีกสองโปรแกรมคือ AutocardMaker และ Autocheckpoint นอกเหนือจากไลบรารี GTK2 แล้วต้องการไลบรารีของฐานข้อมูล Firebird
2.สร้างไดเรคทอรีรองตามรุ่นของโปรแกรม
  • เราจะสร้างไดเรคทอรีย่อยลงไปอีกแต่ละโปรแกรมเพื่อเก็บ package แยกเป็นเวอร์ชั่น ตัวอย่าง Traverse Pro ของผมตอนนี้รุ่น 2.0.1 โปรแกรม Autocheckpoint  รุ่น 1.2.20
ไดเรคทอรีเก็บโปรแกรม Traverse Pro รุ่น 2.0.1
ไดเรคทอรีโปรแกรม Autochekcpoint รุ่น 1.2.20
3.สร้างไดเรคทอรีย่อยตามข้อกำหนด
  • ต่อจากนี้ไดเรคทอรีย่อยที่จะสร้างเพิ่มไปอีกจะต้องอยู่ในข้อกำหนดของ Debian Package ชื่อไดเรคทอรีจะต้องตรงกับที่ Debian ต้องการ ตัวอย่างในไดเรคทอรี /home/priabroy/MyDebianPackages/ สร้างไดเรคทอรีดังนี้

DEBIAN
usr

  • ไดเรคทอรี usr ที่เราสร้างขึ้นมาจะจำลองไดเรคทอรีที่โปรแกรมเราตอนติดตั้งจริงๆว่าจะอยู่ที่ไหนในโครงสร้างไฟล์ของลีนุกซ์ อย่างผมตั้งใจว่าจะให้โปรแกรมไปอยู่ที่ /usr/bin ผมก็จะสร้างไดเรคทอรี bin ซ้อนอยู่ใน usr ดูรูปด้านล่างประกอบอีกที
โครงสร้างไดเรคทอรีที่ Debian กำหนด
  • ไดเรคทอรี DEBIAN (ตัวใหญ่) ไม่มีไดเรคทอรีย่อย แต่จะมีไฟล์สำคัญสองไฟล์ซึ่งจะยังไม่พูดในตอนนี้ มาดูไดเรคทอรี usr กันต่อ ที่ผมกล่าวไปแล้วคือมีไดเรคทอรีย่อยชื่อ bin สร้างไดเรคทอรีอีกอันคือ share และสร้างไดเรคทอรีย่อยอีกสองไดเรคทอรีคือ applications และ pixmaps (ดูรูปด้านบน ด้านซ้ายจะแสดงโครงต้นไม้)
4.Copy ไฟล์และสร้างไฟล์ Desktop Entry
      • usr/bin – ทำการ copy ไฟล์โปรแกรมของเราที่ได้ compile & build มาที่นี่

        ไดเรคทอรีเก็บโปรแกรมไบนารี
      • usr/share/pixmaps – ทำการ copy ไฟล์รูป png เป็น icon โปรแกรมมาไว้ที่นี่
ชื่อไฟล์ไอคอนของโปรแกรมของเรา
      • usr/share/applications – สร้างไฟล์ text มี extension เป็น .desktop ตัวอย่างที่พอจะเทียบเคียงได้คือไฟล์ลิงค์ .lnk ที่อยู่บนวินโดส์นั่นเองที่ได้จากการสร้าง shortcut ใช้ Text Editor สร้างไฟล์ใน Ubuntu ก็ Gedit อย่างตัวอย่างนี้ผมตั้งชื่อ autocheckpoint.desktop เนื้อในพิมพ์ดังนี้

[Desktop Entry]
Name=Autocheckpoint V1.2.20
Comment=Autocheckpoint (Human Resource Management System)
Exec=Autocheckpoint
Icon=autocheckpoint.png
Terminal=false
X-MultipleArgs=false
Type=Application
Categories=Application;Graphics;
StartupNotify=true
MimeType=application/x-autocheckpoint;
X-Ubuntu-Gettext-Domain=app-install-data

      • มาดูว่าใน [Desktop Entry] มีส่วนสำคัญอยู่หลายบรรทัดคือ Name เป็นชื่อโปรแกรมใส่เวอร์ชั่นเข้าไปหน่อย ตรง Comment ขยายความโปรแกรมของเรา ตรง Exec สำคัญคือชื่อไฟล์ต้องตรงกับในไดเรคทอรี usr/bin และต่อมาคือ Icon ชื่อต้องตรงกับไฟล์ใน usr/share/pixmaps ตรง Categories โปรแกรมของเราเมื่อติดตั้งแล้วจะไปอยู่ในกลุ่มไหน ซึ่งใน linux กลุ่มโปรแกรมผมคิดว่ายังไม่กว้างพอ ผมเลยจัดให้ไปอยู่ในกลุ่ม Graphics ซึ่งไม่น่าจะใช่ แต่ไม่มีตัวเลือกอื่นดีกว่านี้
5.ตรวจสอบขนาดไดเรคทอรี usr
  • ต่อไปจะต้องใช้คำสั่ง command line มาช่วยในการตรวจสอบขนาดของไฟล์ที่อยู่ในไดเรคทอรี usr ผมทำการเปลี่ยนไดเรคทอรีด้วยคำสั่ง cd ไปที่ /home/priabroy/MyDebianPackages/Autocheckpoint/autocheckpoint-1.2.20 สั่งหาขนาดของไฟล์และไดเรคทอรีด้วยคำสั่ง du ดังนี้ ขนาดที่ต้องการเป็น Kilobyte

$ du -ac –apparent-size –block-size=1024 usr
9774 usr/bin/Autocheckpoint
9778 usr/bin
1 usr/share/applications/autocheckpoint.desktop
5 usr/share/applications
4 usr/share/pixmaps/autocheckpoint.png
8 usr/share/pixmaps
17 usr/share
9798 usr
9798 total

  • จะเห็นขนาดของไฟล์และไดเรคทอรีเท่ากับ 9798 KB
6.สร้างไฟล์ control ในไดเรคทอรี DEBIAN
  • สร้างไฟล์ชื่อ control อยู่ในไดเรคทอรี DEBIAN โดยใช้ text editor

Package: autocheckpoint
Version:1.2.20
Section: graphics
Priority: optional
Architecture: i386
Depends: libgtk2.0-0 (>= 2.0), libgtk2.0-bin (>= 2.0), libfbclient2 (>=2.5)
Installed-Size: 9798
Maintainer: Prajuab Riabroy
Description: Autochekpoint (Human Resource Management System)

  • นำขนาด 9798 KB มาใส่ที่ Installed-Size ส่วนที่ยากที่สุดคือ Depends คือไลบรารีที่โปรแกรมเราต้องการ โปรแกรมนี้พัฒนาบน GNome จึงต้องการไลบรารีที่เป็นพื้นฐานคือ GTK2 สมมติฐานคือสามารถนำไปติดตั้งบนลีนุกซ์ที่ใช้ GNome ได้ไม่ว่าจะเป็นดิสโทรอะไร แต่ก็เพิ่มเติมอีกนิดว่าตอนนี้ GNome3 ใช้ GTK3 ดังนั้นการนำโปรแกรมไปติดตั้งบน GNome3 อาจจะต้องดาวน์โหลดไลบรารี GTK2 ด้วย
7.สร้างไฟล์ md5sums ในไดเรคทอรี DEBIAN
  • MD5 คือการเข้ารหัสให้กับไฟล์อีกรูปแบบหนึ่ง นิยมนำมาตรวจสอบขนาดของไฟล์ที่ได้จากการดาวน์โหลดว่าขนาดที่ได้รับมาสมบูรณ์หรือไม่ ถ้าไฟล์มีเนื้อหาตรงกับต้นฉบับทุกประการค่า MD5 จะเท่ากันเสมอ ตัวอย่างไฟล์ที่เราจะดาวน์โหลดบาง website จะมีค่า MD5 ใส่ไว้เมื่อเราดาวน์โหลดมาแล้วใช้คำสั่ง md5sum ในลีนุกซ์ตรวจสอบได้ ถ้าค่า MD5 เท่ากันก็แสดงว่าไฟล์ที่ดาวน์โหลดมานั้นสมบูรณ์
  • คำสั่ง md5sum จะตรวจได้ทีละไฟล์ซึ่งจะไม่สะดวก ผมแนะนำให้ไปดาวน์โหลดสคริปท์ ของ Nautilus ได้ที่ http://gnome-look.org/content/show.php/show.php?content=69749&vote=good&tan=7008025 ผู้เขียนใช้นามแฝงว่า ofir
  • ดาวน์โหลดมาแล้วย้ายไปไว้ที่ ~/.gnome2/nautilus-scripts ทำการเปลี่ยนโหมดเป็นไฟล์ที่รันได้ด้วยคำสั่ง

$sudo chmod +x md5.sh

script file สำหรับหา MD5
  • ผมใช้ Nautilus ไปที่ไดเรคทอรี /home/priabroy/MyDebianPackages/Autocheckpoint/autocheckpoint-1.2.20 คลิกที่ไดเรคทอรี usr คลิกเมนู File > Scripts จะเห็น script file ที่ติดตั้งเข้าไปคลิกเลือก ตัวสคริปท์จะสร้างไฟล์ชื่อ usr.md5 ให้เราทำการเปลี่ยนชื่อเป็น md5sums จากนั้นย้ายไปอยู่ใต้ในไดเรคทอรี DEBIAN ลองเปิดไฟล์ md5sums ทำการแก้ไขตรงชื่อไดเรคทอรีจากชื่อเต็มเป็นชื่อแบบ relative ดังรูปด้านล่าง

b3c83fe7e929f44cc38af95a38d765e5 usr/bin/Autocheckpoint
f11d86f6ae70aebb762c328499618e18 usr/share/applications/autocheckpoint.desktop
c3d930951fc3de48a65f072a390c08c7 usr/share/pixmaps/autocheckpoint.png

8.สร้าง Package
  • มาถึงขั้นตอนสุดท้ายทำการสร้าง Debian Package ด้วยคำสั่ง fakeroot dpkg –build ก่อนอื่นผมเปลี่ยนไดเรคทอรีมาที่ /home/priabroy/MyDebianPackages/Autocheckpoint
  • ผมตั้งชื่อ package ว่า autocheckpoint-1.2.20-i386.deb ใช้คำสั่งดังนี้

$fakeroot dpkg –build autocheckpoint-1.2.20 autocheckpoint-1.2.20-i386.deb

  • จะได้ package มาพร้อมจะลองไปทดสอบติดตั้ง

    package ที่รอคอย

ทดลองติดตั้ง

  • ถ้าเปิด Nautilus ใช้เมาส์ดับเบิ้ลคลิกบน package ถ้าเป็น Ubuntu จะเรียก Ubuntu Software Center เห็นหน้าตาดังรูปด้านล่าง เพราะผมทอลองติดตั้งไปหลายครั้งจึงขึ้นคำว่า Reinstall ถ้าเป็นครั้งแรกจะขึ้น Install
การติดตั้ง Package ผ่าน Ubuntu Software Center
  • หลังจากติดตั้งแล้ว
หลังจากติดตั้งแล้วใน Ubuntu GNome3
  • ก็ลงเป็นกรณีศึกษาว่าทำได้ง่าย ลองเปิดดูไฟล์ Debian Package ของคนอื่นๆดูด้วย Archive Manager อาจจะเห็นโครงสร้างไดเรคทอรีที่มากกว่า แต่ก็เป็นไปตามข้อกำหนด ถ้ามีคู่มือการใช้จะมีไดเรคทอรี usr/share/doc เพิ่มขึ้นมา

2 thoughts on “วิธีสร้าง Debian Package สำหรับติดตั้งโปรแกรมบน Ubuntu”

  1. พอดีเข้ามาอ่าน blog เก่าเกี่ยวกับข้อมูลแผนที่พม่า ไม่ทราบว่าจะหาซื้อข้อมูล 1: 50000 ของพม่า ได้ที่ไหนค่ะ เนื่องจากต้องการใช้ข้อมูล บริเวณเมื่อง Thanyain

    1. ลองติดต่อบริษัทฯ Suntac ตามลิงค์นี้ asianproduct.com หรือ website ที่บริษัทฯโดยตรง http://www.suntactechnologies.com สำหรับ Suntac เป็นบริษัทฯที่ทำแผนที่ 1:50000 ให้กับทางรัฐบาลครับ

Leave a Reply

Your email address will not be published.