Debian tabanlı sistemler için paket oluşturma - 1
Tags: debian, deb, apt, package
Published: 2020-03-03 04:58:30

Debian tabanlı sistemler, yazılımların kurulabilmesi için "dpkg" (Debian PacKaGe) isimli yazılım kullanmaktadır. Günümüz kullanımlarında ise daha çok APT (Advanced Package Tool) isimli DPKG'yi yöneten "Paket Yönetim Sistemi" daha fazla duyulmaktadır. Özetle APT (aptitude, dselect, Ubuntu Software Center vb.) DPKG'nin en çok kullanılan önyüzlerinden birisidir. Kendi içerisinde paketlerin kurulması için kullandığı depo mantığı da bulunmaktadır. DPKG ise depo kavramından bağımsız Debian Paket Yapısı ile ilgilenmektedir.

Özet bilgi sonrasında bu yazıda APT ile ilgili bir konuya girilmeyeceğini belirtmek isterim. Bir debian sistemde Debian standartlarına ve paketlerine göre kurulan yazılımları "dpkg -l" komutu ile öğrenebilmektesiniz. Burada gördüğünüz paketlerden herhangi birisi için "-s" komutu kullanarak ilgili paketin detay bilgilerini öğrenebilirsiniz. Örneğin "dpkg -s bash" gibi. Bu çıktı, kontrol dosyası olarak yeni bir paket oluştururken girdiğiniz bilgileri vermektedir. Örnek bir çıktı aşağıdaki gibidir:

```
Package: bash
Essential: yes
Status: install ok installed
Priority: required
Section: shells
Installed-Size: 1588
Maintainer: Ubuntu Developers 
Architecture: amd64
Multi-Arch: foreign
Version: 4.4.18-2ubuntu1.2
Replaces: bash-completion (<< 20060301-0), bash-doc (<= 2.05-1)
Depends: base-files (>= 2.1.12), debianutils (>= 2.15)
Pre-Depends: libc6 (>= 2.15), libtinfo5 (>= 6)
Recommends: bash-completion (>= 20060301-0)
Suggests: bash-doc
Conflicts: bash-completion (<< 20060301-0)
Conffiles:
 /etc/bash.bashrc 3aa8b92d1dd6ddf4daaedc019662f1dc
 /etc/skel/.bash_logout 22bfb8c1dd94b5f3813a2b25da67463f
 /etc/skel/.bashrc 1f98b8f3f3c8f8927eca945d59dcc1c6
 /etc/skel/.profile f4e81ade7d6f9fb342541152d08e7a97
Description: GNU Bourne Again SHell
 Bash is an sh-compatible command language interpreter that executes
 commands read from the standard input or from a file.  Bash also
 incorporates useful features from the Korn and C shells (ksh and csh).
 Bash is ultimately intended to be a conformant implementation of the
 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).
 .
 The Programmable Completion Code, by Ian Macdonald, is now found in
 the bash-completion package.
Homepage: http://tiswww.case.edu/php/chet/bash/bashtop.html
Original-Maintainer: Matthias Klose
```
Tüm maddeler için ayrı ayrı değerlendirme yazılabilir ama şuan için minimal gereksinimlerle başka bir pakette neler olabileceğini göstermek istiyorum. Daha doğrusu bir paket geliştirecekseniz aşağıdaki gibi bir "control" dosyası oluşturmanız gerekiyor.
```
Package: ornekpaket
Version: 1.4.0-b2
Maintainer: Ali Orhun <ali@orhun.org>
Description: Deneme paketi açıklaması
Homepage: https://github.com/aliorhun/deneme
Architecture: amd64
Depends: git, python3 (>=3.5)
```
Bu kontrol dosyası cebimizde dururken bir debian paketi için nelerin minimum olarak gerektiğini de belirtelim isterseniz. İlgili paket için aşağıdaki gibi bir yapı gerekmektedir.
```
ornekpaket-1.4.0-b2/          # Ana Dizin
└── DEBIAN/                  # Standart Gerekli Dizin
    └── control                   # Standart Gerekli Dosya
```
Dolayısıyla anladığımız kadarıyla paketimiz için bir klasör oluşturmamız ve ilgili klasör içinde DEBİAN isimli bir klasör oluşturup içerisine yukarıdaki gibi bir "control" isimli dosya oluşturmanız gerekmektedir.

```bash
mkdir -p ornekpaket-1.4.0-b2/DEBIAN
echo """Package: ornekpaket
Version: 1.4.0-b2
Maintainer: Ali Orhun <ali@orhun.org>
Description: Deneme paketi açıklaması
Homepage: https://github.com/aliorhun/deneme
Architecture: amd64
Depends: git, python3 (>=3.5)""" >  ornekpaket-1.4.0-b2/DEBIAN/control
```
Bu adıma geldiyseniz sadece git ve python3 paketinin yüklenmesini zorunlu tutan bir ornekpaket uygulamasını deb paketi haline getirmek için bir eksiğiniz kalmadı. Bunun için aşağıdaki komut ile paketi oluşturabilirsiniz:
```bash
dpkg -b ornekpaket-1.4.0-b2 ./ornekpaket-1.4.0-b2.deb
```
veya
```bash
dpkg-deb --build ornekpaket-1.4.0-b2.deb
```
Bu komut çıktı olarak ornekpaket-1.4.0-b2.deb isimli dosyayı çıkartır ve kurulmaya hazır bir halde çalıştırılmayı beklemektedir. Paketin içerisindeki bilgileri görmek için ise "-I" parametresini kullanabilirsiniz.
```bash
dpkg -I ornekpaket-1.4.0-b2.deb
```
Yanlışlıkla "-i" parametresini kullanırsanız paketi kuracağınızı unutmamalısınız. Makalenin başında belirttiğimiz "-s" parametresi ise kurulu paketlerin tam adının yazıldığı durumu içermekte idi. "-I" paramertesi ise ".deb" paketi içindeki bilgilendirmeyi yaptığını unutmayın.

Bu makalede temel bileşenleri anlatmak istediğim için şimdilik yarıda kesiyorum. Makalenin devamında detaylı içerikler eklenecektir. Daha ileri makalelerde ise APT aracı ve depo yönetim süreçlerinden bahsedeceğim.