dh_make ile Debian Paketi Oluşturma
netutils adında bir dizin oluşturalım.
$ mkdir netutils
Dizinimize girelim.
$ cd netutils
dh-make işlemlerini yapmak için ilgili paketi kuralım.
$ sudo apt-get install dh-make
Örnek dosyalar ile debian adında bir dizin oluşturmak için aşağıdaki komutu girelim.
$ dh_make \ --native \ --single \ --packagename netutils_1.0.0 \ --email ramazanaltintop@protonmail.com
debian dizininde oluşan dosyaları listeleyelim
$ find debian/ | sort
Boş bir paket oluşturalım.
$ dpkg-buildpackage
gpg: “Ramazan Altıntop <ramazanaltintop@protonmail.com>” atlandı: No secret key
gpg: dpkg-sign.OiLqrMxm/netutils_1.0.0.dsc: clear-sign failed: No secret key
dpkg-buildpackage: error: failed to sign .dsc file
Anahtar ile ilgili problem yaşadığım için aşağıdaki şekilde komutumu tekrar giriyorum.
$ dpkg-buildpackage -kramazanaltintop@protonmail.com
Bir önceki dizinimizde oluşturduğumuz dosyaları listeleyelim.
$ ls -l ../
.tar.xz: kaynak paketidir. netutils/ dizininde yer alan dizin veya dosyalar bu kaynak paketinde arşivlidir.
.deb: Yüklenebilen bir debian paketidir.
.dsc, .changes: İmza dosyaları, tüm dosyaların şifreli imzaları bulunur.
Debian paketinin içeriğini inceleyelim.
$ dpkg-deb -c ../netutils_1.0.0_amd64.deb
Debian arşivini netutils_extracted adlı yeni bir dizine çıkartmak için aşağıdaki komutu kullanalım ve çıkarılan dizini inceleyelim.
$ dpkg-deb -x ../netutils_1.0.0_amd64.deb ../netutils_extracted
$ find ../netutils_extracted
Şimdi bu boş paketi sistemimize yükleyelim.
$ sudo dpkg -i ../netutils_1.0.0_amd64.deb
Sistemimizde kurulu olan bu paket hakkındaki bilgileri aşağıdaki komut ile elde edebiliriz.
$ dpkg -l | grep netutils
ii netutils 1.0.0 amd64 <insert up to 60 chars description>
İstenilen paketin durumu(i=install, r=remove, p=purge): i
Güncel paket durumu:(n=not installed, i=installed): i
Paket adı: netutils
Versiyon: 1.0.0
Mimari: amd64
Açıklama: <insert up to 60 chars description>
Paketi yüklediğimiz için artık aşağıdaki komutla sistemimizde bu debian paket içeriğini listeleyebiliriz.
Gerekli dizinlerimizi oluşturup örnek scriptimizi oluşturalım. Scriptimize çalışma iznini ayarlayalım.
$ mkdir -p /files/usr/bin
$ touch /files/usr/bin/ipaddr
$ chmod +x /files/usr/bin/ipaddr
$ nano /files/usr/bin/ipaddr
#!/bin/bash
curl --silent 'https://api.ipify.org?format=json' | jq .ip –raw-output
dpkg-buildpackage komutunu kullandığımız zaman files dizininde pakete dahil edilmesi için debian/install dosyasını şu şekilde düzenlemeliyiz.
$ nano debian/install
files/usr/* usr
Şimdi changelog dosyasını düzenleyerek bu pakette yapmış olduğumuz değişiklikleri ifade edelim. Bu değişiklikle paketi 1.1.0’a yükselteceğiz.
$ dch -im
Bu komutu çalıştırabilmemiz için devscripts paketinin kurulu olması gerekiyor.
İlgili paketimizi kuralım.
$ sudo apt-get install devscripts
$ dch -im
vi editörünü kullanalım. (2)
Güncel versiyon için yeni bir paket oluşturalım.
$ dpkg-buildpackage -kramazanaltintop@protonmail.com
Güncel sürümü sistemimize kuralım.
$ sudo dpkg -i ../netutils_1.1.0_amd64.deb
Sistemimizde kurulu olan paketimiz hakkında bilgileri elde edelim.
$ dpkg -l | grep netutils
ipaddr scriptini çalıştırmak istediğimde bağımlılık hatası alıyorum. O zaman yeni bir güncelleme ile paketime bu bağımlılıkları eklemeliyim.
Kontrol dosyamızı düzenleyelim ve gerekli bağımlılıkları (jq, curl), açıklamaları ekleyelim.
$ nano debian/control
changelog dosyamızı düzenleyelim.
$ dch -im
Yeni versiyonumuz için yeni paket oluşturalım.
$ dpkg-buildpackage -kramazanaltintop@protonmail.com
Paketimizi yükleyelim.
$ sudo dpkg -i ../netutils_1.2.0_amd64.deb
Öncelikle paketimizin durumunu gözden geçirelim.
$ dpkg -l | grep netutils
iU netutils 1.2.0 amd64 Network Management Tools
Yüklü faket paketlenmemiş olduğunu fark ediyoruz.
i = installed
U = UNPACKED
Bu iki paketin başarıyla kurulması için aşağıdaki komutlardan herhangi birini kullanabilirsiniz.
$ sudo apt-get -f install
$ sudo apt-get install --fix-broken
Paketimizin durumunu tekrar gözden geçirelim.
$ dpkg -l | grep netutils
Güncelleme işleminide başarıyla gerçekleştirdik.
Şimdi test edelim.
$ ipaddr
Yararlandığım kaynak; https://blog.heckel.io/2015/10/18/how-to-create-debian-package-and-debian-repository/