Product SiteDocumentation Site

Bab 15. Membuat paket Debian

15.1. Membangun ulang sebuah Paket dari Source-nya
15.1.1. Mendapatkan Sumber
15.1.2. Membuat Perubahan
15.1.3. Memulai Rebuild
15.2. Membangun Ulang Paket Pertama Anda
15.2.1. Meta-Packages atau Paket Palsu
15.2.2. Berkas Archive Sederhana
15.3. Membuat Repositori Paket untuk APT
15.4. Menjadi seorang Maintainer Paket
15.4.1. Belajar untuk Membuat Perubahan
15.4.2. Proses Penerimaan
Sudah menjadi hal umum bagi administrator yang rutin menangani paket Debian, pada suatu saat ingin membuat paket Debian-nya sendiri, atau memodifikasi paket yang sudah ada. Bab ini berusaha menjawab pertanyaan yang paling sering diajukan dalam topik paket Debian, dan menyediakan bagian-bagian yang diperlukan untuk memanfaatkan keunggulan infrastruktur Debian dengan cara terbaik. Dengan sedikit keberuntungan, setelah mencoba sendiri membuat paket Debian, bisa jadi Anda merasa tertarik untuk melanjutkan dan bergabung dengan proyek Debian itu sendiri!

15.1. Membangun ulang sebuah Paket dari Source-nya

Membangun ulang sebuah paket biner dibutuhkan dalam beberapa kondisi. Dalam kondisi tertentu, administrator membutuhkan fitur perangkat lunak yang mensyaratkan untuk di-compile dari source, dengan opsi kompilasi tertentu; pada kasus lain, perangkat yang dipaketkan dalam Debian yang terpasang tidak cukup anyar. Pada kasus kedua, administrator umumnya akan mem-build paket yang lebih terkini diambil dari Debian dengan versi yang lebih baru — seperti Testing atau bahkan Unstable — sehingga paket yang lebih baru ini dapat bekerja pada distribusi Stable mereka; operasi ini disebut dengan “backporting”. Seperti biasa, perlu waspada sebelum memutuskan melakukan tugas seperti itu, dengan memeriksa apakah sebelumnya sudah pernah dilakukan — pencarian cepat pada Debian Package Tracker untuk paket tersebut akan mengungkap informasi itu. .

15.1.1. Mendapatkan Sumber

Rebuilding a Debian package starts with getting its source code. The easiest way is to use the apt-get source source-package-name command. This command requires a deb-src line in the /etc/apt/sources.list file, and up-to-date index files (i.e. apt-get update). These conditions should already be met if you followed the instructions from the chapter dealing with APT configuration (see Bagian 6.1, “Mengisi Berkas sources.list). Note, however, that you will be downloading the source packages from the Debian version mentioned in the deb-src line. If you need another version, you may need to download it manually from a Debian mirror or from the web site. This involves fetching two or three files (with extensions *.dsc — for Debian Source Control*.tar.comp, and sometimes *.diff.gz or *.debian.tar.compcomp taking one value among gz, bz2 or xz depending on the compression tool in use), then run the dpkg-source -x file.dsc command. If the *.dsc file is directly accessible at a given URL, there is an even simpler way to fetch it all, with the dget URL command. This command (which can be found in the devscripts package) fetches the *.dsc file at the given address, then analyzes its contents, and automatically fetches the file or files referenced within. Once everything has been downloaded, it verifies the integrity of the downloaded source packages using dscverify, and it extracts the source package (unless the -d or --download-only option is used). The Debian keyring is needed, unless the option -u is supplied.

15.1.2. Membuat Perubahan

Let us use the samba package as an example.
$ apt source samba
Reading package lists... Done
NOTICE: 'samba' packaging is maintained in the 'Git' version control system at:
https://salsa.debian.org/samba-team/samba.git
Please use:
git clone https://salsa.debian.org/samba-team/samba.git
to retrieve the latest (possibly unreleased) updates to the package.
Need to get 11.7 MB of source archives.
Get:1 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (dsc) [4,316 B]
Get:2 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (tar) [11.4 MB]
Get:3 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (diff) [252 kB]
Fetched 11.7 MB in 1s (9,505 kB/s)
dpkg-source: info: extracting samba in samba-4.9.5+dfsg
dpkg-source: info: unpacking samba_4.9.5+dfsg.orig.tar.xz
dpkg-source: info: unpacking samba_4.9.5+dfsg-5+deb10u1.debian.tar.xz
dpkg-source: info: using patch list from debian/patches/series
dpkg-source: info: applying 07_private_lib
dpkg-source: info: applying bug_221618_precise-64bit-prototype.patch
[...]
The source of the package is now available in a directory named after the source package and its version (samba-4.9.5+dfsg); this is where we'll work on our local changes.
The first thing to do is to change the package version number, so that the rebuilt packages can be distinguished from the original packages provided by Debian. Assuming the current version is 2:4.9.5+dfsg-5, we can create version 2:4.9.5+dfsg-5falcot1, which clearly indicates the origin of the package. This makes the package version number higher than the one provided by Debian, so that the package will easily install as an update to the original package. Such a change is best effected with the dch command (Debian CHangelog) from the devscripts package.
$ cd samba-4.9.5+dfsg
$ dch --local falcot
The last command invokes a text editor (sensible-editor — this should be your favorite editor if it is mentioned in the VISUAL or EDITOR environment variables, and the default editor otherwise) to allow documenting the differences brought by this rebuild. This editor shows us that dch really did change the debian/changelog file.
Saat perubahan pada opsi build diperlukan, perubahan perlu dibuat pada debian/rules, yang mendorong langkah-langkah pada proses build. Pada kasus yang paling sederhana, baris terkait konfigurasi awal (./configure …) atau pada build sesungguhnya ($(MAKE) … atau make …) dapat dengan mudah ditemukan. Jika perintah ini tidak dipanggil secara eksplisit, mereka merupakan efek samping dari perintah eksplisit lainnya, yang pada kasus tertentu mengacu pada dokumentasi mereka untuk mempelajari lebih lanjut bagaimana mengubah perilaku default. Dengan paket-paket yang memakai dh, Anda mungkin perlu menambah override untuk perintah dh_auto_configure atau dh_auto_build (lihat halaman manual masing-masing untuk penjelasan tentang bagaimana mencapai ini).
Tergantung pada perubahan lokal pada paket, pemutakhiran bisa jadi dibutuhkan dalam berkas debian/control, yang berisi deskripsi dari paket yang dihasilkan. Secara spesifik, berkas ini berisi baris Build-Depends yang mengendalikan daftar dependensi yang perlu dipenuhi pada paket yang dibangun. Hal ini seringkali mengacu pada versi paket yang ada di dalam distribusi dari sumber paket asal, namun tidak tersedia di dalam distribusi yang digunakan untuk rebuild. Tidak ada cara otomatis untuk menentukan jika dependensi benar-benar dibutuhkan atau hanya disebutkan untuk menjamin bahwa build hanya dicoba dengan versi terbaru dari pustaka — ini merupakan satu-satunya cara untuk memaksa autobuilder untuk menggunakan versi paket yang diberikan selama proses build, hal inilah mengapa Debian maintainer seringkali menggunakan versi build-dependencies yang ketat.
Jika Anda tahu secara yakin bahwa build-dependencies terlalu ketat, Anda bebas untuk melonggarkannya secara lokal. Dengan membaca berkas yang mendokumentasikan standar membangun perangkat lunak — berkas ini sering disebut sebagai INSTALL — akan membantu Anda mengetahui dependensi yang sesuai. Idealnya, semua dependensi harus dapat dipenuhi dari distribusi yang digunakan untuk rebuild; jika tidak, sebuah proses rekursif dimulai, yaitu saat paket yang disebutkan dalam field Build-Depends harus di-backport sebelum paket target dapat di-backport. Beberapa paket bisa jadi tidak perlu di-backport, dan dapat di-install apa-adanya selama proses build (contoh yang jelas adalah debhelper). Perlu dicatat bahwa proses backport dapat dengan cepat menjadi kompleks jika Anda tidak hati-hati. Oleh karena itu, backport sedapat mungkin diminimalisir.

15.1.3. Memulai Rebuild

Saat semua perubahan yang diperlukan telah diterapkan pada sumber, kita dapat memulai membuat paket binari sesungguhnya (.deb file). Semua proses ini dikelola oleh perintah dpkg-buildpackage.

Contoh 15.1. Membangun ulang sebuah paket

$ dpkg-buildpackage -us -uc
[...]
Perintah sebelumnya dapat gagal jika field Build-Depends belum diperbaharui, atau jika paket terkait tidak ter-install. Pada kasus seperti ini, mungkin untuk meng-overrule kondisi ini dengan memberikan opsi -d ke dpkg-buildpackage. Namun, dengan secara eksplisit mengacuhkan dependensi ini akan berisiko terjadi kegagalan pada tahap berikutnya. Lebih buruk lagi, paket bisa jadi terlihat di-build dengan benar namun tidak berjalan sebagaimana mestinya: beberapa program secara otomatis men-disable beberapa fitur saat pustaka yang dibutuhkan tidak tersedia saat waktu build.
Lebih sering, pengembang Debian menggunakan program dengan tingkat lebih tinggi (higher-level program) seperti debuild; debuild menjalankan dpkg-buildpackage, namun juga menambahkan invokasi dari program yang menjalankan pemeriksaan untuk memvalidasi paket terhadap Debian policy. Script ini juga membersihkan environment sehingga variabel environment lokal tidak “mengotori” paket yang di-build. Perintah debuild adalah salah satu perkakas dalam devscripts suite, yang berbagi konsistensi yang sama dan konfigurasi yang sama untuk membuat pekerjaan maintainer menjadi lebih mudah.