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?
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