Product SiteDocumentation Site

Bab 15. Membuat paket Debian

15.1. Membangun ulang sebuah Paket dari Source-nya
15.1.1. Mendapatkan Source
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

Rebuilding a binary package is required under several sets of circumstances. In some cases, the administrator needs a software feature that requires the software to be compiled from sources, with a particular compilation option; in others, the software as packaged in the installed version of Debian is not recent enough. In the latter case, the administrator will usually build a more recent package taken from a newer version of Debian — such as Testing or even Unstable — so that this new package works in their Stable distribution; this operation is called “backporting”. As usual, care should be taken, before undertaking such a task, to check whether it has been done already — a quick look on the Debian Package Tracker for that package will reveal that information.

15.1.1. Mendapatkan Source

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 extracts the source package (unless the -d or --download-only option is used).

15.1.2. Membuat Perubahan

The source of the package is now available in a directory named after the source package and its version (for instance, samba-4.1.17+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.1.17+dfsg-2, we can create version 2:4.1.17+dfsg-2falcot1, 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, with an command such as dch --local falcot. This 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.
When a change in build options is required, the changes need to be made in debian/rules, which drives the steps in the package build process. In the simplest cases, the lines concerning the initial configuration (./configure …) or the actual build ($(MAKE) … or make …) are easy to spot. If these commands are not explicitly called, they are probably a side effect of another explicit command, in which case please refer to their documentation to learn more about how to change the default behavior. With packages using dh, you might need to add an override for the dh_auto_configure or dh_auto_build commands (see their respective manual pages for explanations on how to achieve this).
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.
If you know for sure that these build-dependencies are too strict, you should feel free to relax them locally. Reading the files which document the standard way of building the software — these files are often called INSTALL — will help you figure out the appropriate dependencies. Ideally, all dependencies should be satisfiable from the distribution used for the rebuild; if they are not, a recursive process starts, whereby the packages mentioned in the Build-Depends field must be backported before the target package can be. Some packages may not need backporting, and can be installed as-is during the build process (a notable example is debhelper). Note that the backporting process can quickly become complex if you are not careful. Therefore, backports should be kept to a strict minimum when possible.

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.