Pembuatan paket menggunakan Debhelper

[Penting]

Yang diperlukan: Kebutuhan dari “Pembuatan Paket Dari Awal” ditambah debhelper dan dh-make

Sebagai pemaket, Anda akan jarang sekali membuat paket dari original seperti yang telah kita singgung di bab sebelumnya. Dapat Anda bayangkan, banyak sekali pekerjaan dan informasi dalam berkas rules, misalnya, jamak ditemukan dalam paket. Agar pembuatan paket semakin mudah dan lebih efisien, Anda dapat menggunakan debhelper untuk membantu pekerjaan ini. Debhelper adalah kumpulan skrip Perl (diawali dengan dh_ yang mengotomatisasi proses pembangunan paket. Dengan skrip ini, membangun paket di Debian menjadi cukup sederhana.

Dalam contoh ini, Anda akan membangun kembali paket GNU Hello, tetapi sekarang Anda akan membandingkan pekerjaan Anda dengan paket hello-debhelper Ubuntu. Sekali lagi, buat direktori dimana Anda akan bekerja:

mkdir ~/hello-debhelper
cd ~/hello-debhelper
wget http://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz
mkdir ubuntu
cd ubuntu

Kemudian, dapatkan paket source Ubuntu:

apt-get source hello-debhelper
cd ..

Seperti contoh sebelumnya, yang pertama Anda harus lakukan adalah membongkar paket tarball original (upstream).

tar -xzvf hello-2.1.1.tar.gz

Daripada menyalin tarball upstream ke hello_2.1.1.orig.tar.gz seperti yang telah kita lakukan di contoh sebelumnya, kita akan membiarkan dh_make mengerjakannya untuk kita. Hal yang perlu Anda lakukan adalah mengubah nama folder source sehingga menjadi bentuk <packagename>-<version> dimana packagename ditulis menggunakan huruf kecil. Dalam hal ini, untar tarbal akan menghasilkan direktori source yang benar sehingga kita dapat berpindah ke dalamnya:

cd hello-2.1.1

Untuk membuat "debianization" original dari source kita akan menggunakan dh_make.

dh_make -e your.maintainer@address -f ../hello-2.1.1.tar.gz
		

dh_make kemudian akan mengajukan beberapa pertanyaan:

Type of package: single binary, multiple binary, library, kernel module or cdbs?
[s/m/l/k/b] s
Maintainer name : Captain Packager
Email-Address   : packager@coolness.com
Date            : Thu,  6 Apr 2006 10:07:19 -0700
Package Name    : hello
Version         : 2.1.1
License         : blank
Type of Package : Single
Hit <enter> to confirm: Enter
[Perhatian]

Jalankan dh_make -e hanya sekali saja. Jika Anda menjalankannya lagi setelah Anda melakukannya untuk pertama kali, maka aplikasi tidak akan bekerja dengan baik. Jika Anda ingin mengubah atau membuat suatu kesalahan, hapus direktori source dan untar tarball upstream kembali. Kemudian baru Anda masuk ke dalam direktori source dan coba lagi.

Menjalankan dh_make -e akan menyebabkan dua hal:

  1. Membuat berkas hello_2.1.1.orig.tar.gz di direktori induk,

  2. Membuat berkas dasar yang dibutuhkan dalam debian/ dan beberapa berkas templat (.ex) yang mungkin dibutuhkan.

Program Hello tidak begitu sulit, dan seperti yang sudah Anda lihat di “Pembuatan Paket Dari Awal”, pembuatan paket program tersebut tidak membutuhkan banyak berkas selain berkas dasar. Oleh karena itu, silakan Anda hapus berkas .ex:

cd debian
rm *.ex *.EX

Untuk program hello, Anda tidak memerlukan berkas-berkas README.Debian (berkas README untuk hal mengenai Debian, bukan README program), dirs (digunakan olehdh_instaldirs untuk membuat direktori yang dibutuhkan), docs (digunakan oleh dh_instaldocs untuk menginstal dokumentasi program), atau info (digunakan oleh dh_instalinfo untuk menginstal berkas info) di dalam direktori debian. Untuk informasi lebih lanjut mengenai berkas tersebut, lihat “Berkas contoh dh_make.

Pada bagian ini, Anda diwajibkan hanya memiliki berkas changelog, compat, control, copyright, dan rules dalam direktori debian. Dari “Pembuatan Paket Dari Awal”, hanya ada satu tambahan berkas baru yaitu compat, yaitu berkas yang memuat versi debhelper (dalam kasus ini adalah 4) yang akan digunakan.

Anda perlu menyesuaikan entri berkas changelog di panduan ini, silakan ubah nama paket menjadi hello-debhelper daripada hanya hello:

hello-debhelper (2.1.1-1) edgy; urgency=low

  * Initial release

  -- Captain Packager <packager@coolness.com>  Thu,  6 Apr 2006 10:07:19 -0700

Dengan menggunakan debhelper, satu hal yang perlu Anda ubah dalam berkas control adalah nama (mengganti hello menjadi hello-debhelper) dan menambah debhelper (>= 4.0.0) ke ruasBuild-Depends untuk paket source. Paket Ubuntu untuk hello-debhelper adalah seperti ini:

Source: hello-debhelper
Section: devel
Priority: extra
Maintainer: Capitan Packager <packager@coolness.com>
Standards-Version: 3.6.1
Build-Depends: debhelper (>= 4)

Package: hello-debhelper
Architecture: any
Depends: ${shlibs:Depends}
Conflicts: hello
Provides: hello
Replaces: hello
Description: The classic greeting, and a good example
 The GNU hello program produces a familiar, friendly greeting.  It
 allows non-programmers to use a classic computer science tool which
 would otherwise be unavailable to them.
 .
 Seriously, though: this is an example of how to do a Debian package.
 It is the Debian version of the GNU Project's `hello world' program
 (which is itself an example for the GNU Project).
 .
 This is the same as the hello package, except it uses debhelper to
 make the deb.  Please see debhelper as to what it is.
		

Anda dapat menyalin berkas skrip copyright dan postinst dan prerm dari paket Ubuntu hello-debhelper, karena berkas tersebut tidak diubah sejak “Pembuatan Paket Dari Awal”. Anda juga perlu menyalin berkas rules sehingga Anda dapat memeriksanya.

cp ../../ubuntu/hello-debhelper-2.1.1/debian/copyright .
cp ../../ubuntu/hello-debhelper-2.1.1/debian/postinst .
cp ../../ubuntu/hello-debhelper-2.1.1/debian/prerm .
cp ../../ubuntu/hello-debhelper-2.1.1/debian/rules .

Berkas terakhir yang harus Anda lihat adalah rules, disinilah kehandalan skrip debhelper terlihat. Versi debhelper dari berkas rules adalah terlihat lebih kecil (54 baris dibanding 72 baris yang ada di versi dari “rules”).

Versi debhelper terlihat seperti ini:

 #!/usr/bin/make -f

package = hello-debhelper

CC = gcc
CFLAGS = -g -Wall

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O2
endif

#export DH_VERBOSE=1

clean:
        dh_testdir
        dh_clean
        rm -f build
        -$(MAKE) -i distclean

instal: build
        dh_clean
        dh_instaldirs
        $(MAKE) prefix=$(CURDIR)/debian/$(package)/usr \
                mandir=$(CURDIR)/debian/$(package)/usr/share/man \
                infodir=$(CURDIR)/debian/$(package)/usr/share/info \
                instal

build:
        ./configure --prefix=/usr
        $(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"
        touch build

binary-indep: instal
# There are no architecture-independent files to be uploaded
# generated by this package.  If there were any they would be
# made here.

binary-arch: instal
        dh_testdir -a
        dh_testroot -a
        dh_instaldocs -a NEWS
        dh_instalchangelogs -a ChangeLog
        dh_strip -a
        dh_compress -a
        dh_fixperms -a
        dh_instaldeb -a
        dh_shlibdeps -a
        dh_gencontrol -a
        dh_md5sums -a
        dh_builddeb -a

binary: binary-indep binary-arch

.PHONY: binary binary-arch binary-indep clean checkroot
			

Perlu dicatat bahwa tugas seperti testing jika Anda berada di dalam direktori yang benar (dh_testdir), pastikan Anda membangun paket dengan hak akses root (dh_testroot), menginstal dokumentasi (dh_instaldocs dan dh_instalchangelogs), dan pembersihan setelah membangun (dh_clean) telah ditangani secara otomatis. Banyak paket yang lebih rumit dibanding hello memiliki berkas rules yang tidak lebih besar karena skrip debhelper telah menangani beberapa tugas tersebut. Untuk daftar lengkap dari skrip debhelper, silakan lihat “Daftar dari skrip debhelper. Skrip tersebut didokumentasikan dengan baik didalam halaman man. Sangat berguna untuk melihat halaman man (man telah ditulis dengan baik dan tidak terlalu panjang) untuk setiap skrip bantuan yang digunakan oleh berkas rules di atas.

Membangun Paket Source

Sekarang setelah Anda melihat seluruh berkas dalam direktori debian untuk hello-debhelper, Anda dapat membangun paket source (dan binary) packages. Pertama, silakan Anda kembali dulu ke direktori source:

cd ..

Sekarang Anda dapat membangun paket source dengan menggunakan debuild, sebuah skrip wrapper untuk dpkg-buildpackage:

debuild -S

paket binary, menggunakan pbuilder:

sudo pbuilder build ../*.dsc

dan terakhir periksa paket source untuk mencari kesalahan yang biasa terjadi dengan menggunakan lintian:

cd ..
lintian -i *.dsc