DPKG-DEB İle Debian Paketi Oluşturma
Tags: linux, deb, package
Published: 2020-04-07 13:18:17

<b>Paket</b> uygulamların derlenmiş halini ya da kaynak kodlarını, kofigürasyon dosyalarını, resimlerini ve kurulum komutları da dahil olmak üzere tüm dosyalarını içeren arşivlenmiş bir dosyadır. Uygulama paketleri Windows işletim sistemlerinde  <b>.exe</b>;  Ubuntu, Pardus gibi Debian tabanlı işletimlerinde <b>.deb</b>, Fedora, CentOS gibi RedHat tabanlı işletim sistemlerinde <b>.rpm</b> uzantılıdır.
Bu yazıda debian tabanlı işletim sistemlerinde dpkg-dep paketi ile paket oluşturacağız. 

### 1- Gerekli paketler indirilir.
```
sudo apt install dkpg-deb
```
### 2- Uygulama hazırlanır
Uygulamanız için bir dizin oluşturulur. Uygulama dizininde DEBIAN adında bir dizin daha oluşturulur. Bu dizin içerisinde paket ile ilgili dosyalar ve kurulum betikleri olacak.
```
mkdir ilk-uygulamam
```
Bulunduğu kullanıcı ile terminal ekranından aldığı girdiği ekrana yazdıran, diyorki adında bashscirpt betiği yazılır.
```
echo """
#!/bin/bash
girdi=\$1
echo \$USER' diyor ki: '\$girdi
""" > diyorki
```
### 2- Uygulama dosyalarının gerekli dizinlere taşınması
Paket yüklenirken sıkıştırılmış dosya içerisindekileri kök dizininde açar. Yani uygulama dizini içerisine oluşturacağınız hiyerarşi, ğaketinizi yüklediğiniz işletim sisteminin kök dizininde de oluşacaktır. Örneğin uygulamanızı yükledikten sonra betiğinizin `/opt` altında olmasını istiyorsanız, betiğinizi `ilk-uygulamam/opt/` içerisine taşımanız gerekmektedir.
Linux işletim sistemlerinde çalıştırılabilir uygulamarın bulunduğu dizinler vardır. Uygulamanızı bu dizinlerden birisine taşıyıp çalıştırılabilir bayrağı verirseniz, ls ya da cd komutları gibi kullanabilir hale getirirsiniz. Betiğimizi bunlardan birisine çıkaracak çekilde taşıyalım. 
```
echo $PATH
mkdir -p ilk-uygulamam/usr/local/bin/
cp diyorki ilk-uygulamam/usr/local/bin/
```
### 3- Paket için gerekli dizin ve klasörler oluşturulur
```
mkdir ilk-uygulamam/DEBIAN
touch ilk-uygulamam/DEBIAN/control
touch ilk-uygulamam/DEBIAN/md5sums
```
### 4- Control dosyası düzenlenir 
DEBIAN içerisine oluşturulacak Control dosyadasında paket ile ilgili geliştiren yayınlanma tarihi gibi temel bilgiler bulunur.
```
touch ilk-uygulamam/DEBIAN/control
boyut=$(du -s diyorki | cut -f 1)
versiyon=$(date +'%Y%m%d-%H%M%S')
tarih=$(date +'%d/%m/%Y-%H:%M:%S')
echo """Package: diyorki
Version: $versiyon
Installed-Size: $boyut
Maintainer: Duygu Ölmez <xxx@yyy.com>
Date : $tarih
Architecture: amd64
Description: Diyorki uygulaması
   Aldığı değeri ekrana yazdıran uygulama
""" > ilk-uygulamam/DEBIAN/control
```
**Package** paketinizin adı
**Version** paketin versiyonunu belirtir. Kurulu paketler güncellenirken bu bilgi önemlidir.
**Installed-Size** paket yüklendiğinde ne kadar yer kaplayacağını belirtir.  `du` komutu belirtilen dizin ve altında bulunanların botutunu gösterir. -s parametresi ile yalnızca belirtilen dizinin toplam boyutunu gösterir. `cut` komutu ekran çıktısındaki belirtilen sütunu döndürür.
**Date** paketin oluşturulma tarihidir. `date` komutu ile istenilen formatta tarih çıktısı alınır. `%d/%m/%Y-%H:%M:%S` `Gün/Ay/Yıl-Saat:Dakika:Saniye` formatında çıktı verir. Paket versiyonları belirlenirken de belirlenen bir formatta tarih belirlenerek betiklerinizi otomatize edebilirsiniz.
**Architecture** hangi mimarilerde çalıştığını belirtir.
**Maintainer** Geliştirici hakkında bilgi verir.
**Description** Paket hakkındaki açıklamalar bu alana yazılır.

### 4- Uygulama dosyalarının hashleri dosyaya yazdırılır
Her bir dosyanın hash bilgileri bir dosyaya yazdırılır. Bu şekilde dosyalarda güncelleme olup olmadığı kontrol edilebilir.
```
find ./ -type f ! -regex '.*?DEBIAN.*' -exec md5sum {} \; > ilk-uygulamam/DEBIAN/md5sums
```
### 4- Kurulum öncesi ve sonrası çalışacak betikler oluşturulur
Paket kurulurken 4 temel betik dosyası çalışır. Bu dosyalar DEBIAN/ klasörü içerisinde oluşturulur.
 * **preinst** paket kurulmadan önce çalışır. Paketiniz için oluşturulması gereken dosyalar ya da yapılması gereken kofigürasyonlar varsa burada yapılır.
 * **postinst** paket kurulduktan sonra çalışır, örneğin uygulamanız kurulduktan sonra servisi enable etmek isteyebilirsiniz.
 * **prerm** paket kurulmadan önce yapılması gereken işlemler. Paket silinirken içinden çıkan dosya ve dizinleri temizlemek ister. Fakat bu dizinlerde bunun dışında oluşturulanları bunları temizleyemez. Örneğin bu dosyalar paketkaldırılmadan silinebilir ya da çalışan ilgili servisler durdurulabilir.
 * **postrm** paket kaldırıldıktan sonra yapılmak istenen işlemler burada tanımlanır

Uygulamamız kurulduktan sonra betiğimize çalışırılabilir flagini koyabilmek için postinst dosyasına bu komutu yazıyoruz. 

echo "chmod +x /usr/local/bin/diyorki" > ilk-uygulamam/DEBIAN/postinst
chmod +x ilk-uygulamam/DEBIAN/postinst

### 5- Paketin oluşturulması
Aşağıdaki komutla paket oluşturulur
```
dpkg-deb -Zgzip --build ilk-uygulamam
ls -la
-rw-r--r--  1 pardus pardus   53 Apr  7 16:10 diyorki
drwxr-xr-x  4 pardus pardus 4096 Apr  7 16:01 ilk-uygulamam
-rw-r--r--  1 pardus pardus  894 Apr  7 16:14 ilk-uygulamam.deb
```

Bu şekilde uygulamarınızı deb paketleri haline getirebilirsiniz.