Bu anlatımda debian tabanı için deb paketi yapmayı anlatacağım. Tüm adımlar root ile gerçekleştirilmiştir. Debian tabanlı bir dağıtım yada debootstrap ile kurulmuş bir chroot kullanmanız gerekmektedir.
Bu yazının ikinci kısmında da elimizdeki bir paketi açıp üzerinde değişiklik yapıp tekrar paketlemeyi anlatacağım.
Aşağıdaki paketleri kurarak paket derleme aşaması için gereken araçları yüklemeniz gerekmektedir.
$ apt-get install build-essential
Debian tabanında paketlerin derleme talimatı debian dizininde bulunur. Bu dizinde source/format, copyright, control, rules, compat dosyaları bulunur. copyright dosyasında lisans metnimiz yer alır. http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ adresindeki formata uygun şekilde yazarız. Aşağıda örnek bir copyright dosyası yer almaktadır.
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: test Source: https://example.org Files: * Copyright: 2021 user name <user@example.org> License: GPL-3.0+ License: GPL-3.0+ This program is free software: you can redistribute it ...
source/format dosyası paketin kaynak formatını belirtir. Bu dosya içerisine 3.0 (native) yazabilirsiniz.
compat dosyası içerisinde paketin hangi sürüme uyumlu olacağı yazılmıştır. Bu yazıyı yazarken en son sürüm olarak 11 olduğu için dosyaya 11 yazabiliriz.
control dosyası içerisinde paketin adı bağımlılıkları gibi değerleri taşır. Aşağıda örnek control dosyası verilmiştir.
Source: example Section: utils Priority: optional Maintainer: user name <user@example.org> Build-Depends: package1, package2 Standards-Version: 4.3.0 Homepage: https://example.org Package: example Architecture: any Depends: package3, package4 Description: example package Example package for sayfalar documentation
Eğer Architecture değerine any yazarsanız paket derlediğiniz mimariye bağımlı olur. Eğer all yazarsanız tümünde çalışabilir.
rules dosyası derleme yapılırken kullanılan dosyadır. Bu dosyanın türü genellikle Makefile olur fakat istediğiniz herhangi bir dille de yazabilirsiniz.
make && make install şeklinde derlenip kurulan bir kaynak kodu rules dosyasında aşağıdaki gibi belirtebiliriz. Bunun için dh komutu kullanılır.
#!/usr/bin/make -f %: dh $@
Eğer ./configure işlemimiz de varsa aşağıdakini rules içine ekleyebiliriz.
override_dh_auto_configure: ./configre --prefix=/usr
Burada sırasıyla rules dosyasına aşağıdaki gibi komut yollanır.
./debian/rules clean # dh clean ./debian/rules build # dh build ./debian/rules binary # dh binary
Biraz önceki rules dosyamızı biraz değiştirerek tekrar yazalım.
#!/usr/bin/make -f clean: dh clean build: ./configure --prefix=/usr : dh build yerine aşağıdaki komutları yazabiliriz. make make install DESTDIR=debian/example # DESTDIR konumu debian/paketadı şeklinde olmalıdır. binary: dh binary
Burada dh clean komutu kaynağı temizlemek için kullanılır. dh binary ise paketleme işlemi için gereken komuttur.
changelog dosyası ise paketin sürüm numarası ve değişikliklerini belirtir. Aşağıda örnek changelog dosyası yer almaktadır.
example (0.3.1) stable; urgency=medium [ user name ] * Initial commit -- user name <user@example.org> Mon, 31 Dec 2021 13:31:31 +0000
dpkg-buildpackage -b komutunu derlenecek olan paketin kaynağının bulunduğu dizinde çalıştırın.
Paket dosyaları kaynağın bulunduğu dizinin bir öncesinde oluşturulur. deb uzantılı dosyalarımızı eğer varsa depoya atabiliriz.
dh clean komutunu kullanabilirsiniz.
debian dizini içine atacağımız postinst, preinst, prerm, postrm dosyaları paketin içerisine eklenir ve gerektiği yerde çalıştırılır. Genellikle bash betiğidir fakat istediğiniz dille yazabilirsiniz.
Bir deb dosyasını parçalamak için öncelikle ar komutu kullanarak paketin dosyaları açılır. Bu işlemde karşımıza 3 tane dosya çıkar. data.tar.xz dosyası paketin dosyalarını barındırır. debian-binary dosyası paket formatını gösterir. Bu dosyayı silebiliriz. control.tar.xz dosyası paket bilgisi içerir.
$ ar x paket.deb $ ls -> control.tar.xz data.tar.xz debian-binary paket.deb $ tar -xf data.tar.xz && rm -f data.tar.xz debian-binary paket.deb $ mkdir DEBIAN $ mv control.tar.xz DEBIAN $ cd DEBIAN $ tar -xf control.tar.xz && rm -f control.tar.xz $ cd .. $ ls -> DEBIAN/ usr/ etc/
Parçalanan paketin tekrar paketlenmesi için aşağıdaki komutu kullanabiliriz. Burada paket yolunu tam yol olarak vermeniz gerekmektedir. Paket dizininin dışında çalıştırılmalıdır. Paket adı dizinin adı şeklinde ayarlanmaktadır.
$ dpkg -b /home/sulincix/test/example -> dpkg-deb: building package 'example' in 'example.deb'.