Merhabalar, bu yazıda Pardus üzerinde geliştirdiğimiz bir uygulamayı nasıl kurulabilir bir .deb paketi yapabiliriz ele alacağız.

Linux Dosya Sistemi Hiyerarşisi

Linux için yazdığımız bir uygulamayı sisteme kurmak için önce neyi nereye koyacağımızı bilmemiz gerekiyor. Mesela Windows’ta program geliştiricileri yaptıkları programları sisteme kurmak için C:\Program Files dizinine koyuyor.

Peki Linux’ta uygulama kurulumunu nasıl gerçekleştirebiliriz?

Linux Dosya Sistemi Hiyerarşisi

Pek çok kısmı olan dosya sistemi hiyerarşisi içinden aslında bizim kullanacağımız 2 ana dizin var: /usr, /opt

  • /usr :
    Sistem genelinde kullanılacak olan fakat sisteme sonradan eklenip çıkarılabilen dosyalar burada yer alır.
  • — /usr/bin :
    Programımızın çalıştırılabilir dosyası burada yer alır. Bu dizin PATH ortam değişkenine de eklidir. Dolayısıyla uçbirimde programınızın sadece ismini yazdığınızda eğer bu dizinde mevcutsa çalışacaktır.
  • — /usr/share :
    Burada programların ortak kullandığı dosyalar bulunur.
    — — /usr/share/icons :
    Burada uygulamaların ve temaların ikonları bulunur. Yaptığımız uygulamanın ikonunu da buraya koyacağız.
    — — /usr/share/applications :
    Uygulamaların başlatıcı kısayolları burada bulunur (.desktop dosyaları). XFCE veya GNOME’daki “Uygulama menüleri” buradaki dosyaları gösterirler. Böylece uçbirim açmadan “Uygulamalar” menüsünü açıp uygulamanızı çalıştırabilirsiniz. Ayrıca uygulamanızın “Birlikte aç” seçeneğine eklenmesi gibi şeylerde sistem tarafından kullanılabilmesi .desktop dosyalarındaki bilgiler ile sağlanır.
    — — /usr/share/UYGULAMA :
    Eğer uygulamanızın salt okunur(read-only) olan ve çalışması için gerekli sabit dosyaları varsa burada kendi dizininizi oluşturarak içine dosyalarınızı koyabilirsiniz.
    Örneğin: /usr/share/pardus-image-writer
  • /opt :
    Kurulan çok dosyalı programlar bütün dosyalarını buradaki tek bir klasöre yerleştirebilir. Windows’taki Program Files’a benzerdir. /usr/share/UYGULAMA yerine kullanılabilir. İstediğinizi tercih edebilirsiniz.
    Örneğin: /opt/android-studio veya /opt/chrome gibi.

.deb Paketimizi hazırlayalım

Paketimizin içerisine yukarıda bahsettiğimiz dizinlere hangi dosyaları yerleştirmek istiyorsak o klasörleri oluşturacağız.

İhtiyacımız olan araçlar:

$ sudo apt install dpkg-dev

Örnek bir paket klasörü:

paketdizini/DEBIAN/controlpaketdizini/usr/bin/PROGRAM_ADI
paketdizini/usr/share/icons/IKON_ADI.svg
paketdizini/usr/share/applications/PROGRAM_ADI.desktop

paketdizini adındaki bu klasörümüzün içeriği basit bir uygulama paketi örneğidir.

Dizindeki klasörleri inceleyelim:

  • DEBIAN: Deb paketinin bilgilerinin bulunduğu dizindir. Buraya paketin temel bilgileri, copyright(telif) bilgileri, changelog(değişim günlükleri) gibi bilgiler eklenir. (https://www.debian.org/doc/manuals/maint-guide/dreq.en.html)
  • DEBIAN/control: Bu dosya paket hakkında bilgilerin bulunduğu olmazsa olmaz dosyadır.

Örnek bir control dosyası içeriği:

Package: paket-ismi
Version: 1.0
Depends: libc6, libgtk-3-0
Section: unknown
Priority: optional
Architecture: amd64
Maintainer: Emin Fedar <emin.fedar@pardus.org.tr>
Homepage: https://kod.pardus.org.tr/pardus/ornek
Description: Buraya kısaca tek satırlık tanım
   Buraya ayrı bir tanım ve uzun olabilir
   ve birden fazla satırdan oluşabilir

Buradaki parametreleri inceleyecek olursak:

  • Package: Paketin ismi.
  • Version: Paketin versiyonu.
  • Depends: Paketin hangi paketlere bağımlı olduğu.
  • Section: Paketin kategorisi, mesela “utils”.
  • Priority: Paketin öncelik sırası.
  • Architecture: Paketin çalıştığı işlemci mimarisi.
  • Maintainer: Paketin sahibi ve sürdürücüsü.
  • Homepage: Paketin ilgili websitesi veya kaynak kodunun bulunduğu adres.
  • Description: Paket hakkında bilgi verilen kısım.

control dosyasının içeriği ve parametreleri hakkında detaylı bilgi için:
https://www.debian.org/doc/debian-policy/ch-controlfields.html

Geriye kalan dosyalar kopyalanacakları dizinlerdeki yollara koyulacak:

# Çalıştırılabilir dosya:
paketdizini/usr/bin/PROGRAM_ADI# Uygulama ikonu:
paketdizini/usr/share/icons/IKON_ADI.svg# Uygulama .desktop dosyası:
paketdizini/usr/share/applications/PROGRAM_ADI.desktop 

Örnek uygulama.desktop :

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Ornek Uygulama
Comment=Buraya uygulamamizin tanimi
Exec=program    # /usr/bin/program'ı kullanir
Icon=uygulama   # /usr/share/icons/uygulama.svg'yi kullanir
Terminal=false

.desktop dosyaları hakkında detaylı bilgi için:
https://developer.gnome.org/integration-guide/stable/desktop-files.html.en

Bu aşamadan sonra artık dizinimiz paketlenme işlemine hazır hale gelmiş oluyor. Artık tek yapmamız gereken “paketdizini” klasörüyle aynı dizinde bir uçbirim(terminal) açarak aşağıdaki komutla paketimizi oluşturmak:

$ dpkg-deb --build paketdizini
dpkg-deb: building package 'paket-ismi' in 'paketdizini.deb'.

Artık .deb paketimiz hazır! 🎉

$ ls
paketdizini   paketdizini.deb