PAKET YAPIMI

Bir uygulamanın PiSi paketi haline getirilmesi için paket inşa sistemi tarafından kullanılan minimum bileşenler, paketlenecek uygulamanın kaynak kodu, pspec.xml dosyası ve actions.py dosyasıdır. Ayrıca varsa yamalar ve ek dosyalar da uygulamanın kaynak kodunun parçası olarak düşünülebilir.

Pisi paketi inşa dosyaları pspec.xml ve actions.py'dir ve her ikisi de aynı dizinde olmalıdır. Ayrıca ihtiyaç halinde kullanılan diğer dosyalar için comar ve files dizinleri kullanılır, bunlar da yine pspec.xml ile aynı klasörde bulunmalıdır. Kaynak dosyalar şöyle görünür;

paket_adı

|__pspec.xml
|__actions.py
|__translations.xml
|__files
|__comar
    |__package.py
    |__service.py

Paketlenecek uygulama için;

1. Hazırlanacak Paketin Arşiv Adresi bulunur

2. developer.pisilinux.org adresindeki pspec.xml örneği kopyalanır

3.Pspec.xml dosyası paketlenecek uygulamaya ait bilgilere göre düzenlenir.

4. Paketin inşa (build) bağımlılıklarına bakılarak derlemesinde gerekli taban tespit edilir (cmake, meson, make vb..)

5. developer.pisilinux.org adresindeki uygun actions.py örneği kopyalanır.

6. devepoler.pisilinux.org adresinden translation.xml dosyası örneği kopyalanır ve içeriği düzenlenir.

7. Gerekli düzenlemeler yapıldıktan sonra docker imajı çalıştırılır.

8. Aşağıki komut ile derleme başlatılır. Burada /git/'ten sonrası paketin pspec.xml yoludur ve her paket için özeldir.

pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml

9. Derlenecek uygulamanın kaynak kodu indikten sonra aşağıdaki gibi sha1sum değerinin uyuşmadığı hatası verir.

2e16365077b9 ~ # pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml
Building source package: lxqt-panel
DEBUG: InstallDB initialized in 0.00148987770081.                                                                                     
Fetching source from: https://github.com/lxqt/lxqt-panel/releases/download/1.1.0/lxqt-panel-1.1.0.tar.xz
lxqt-panel-1.1.0.tar.xz        (542.6 KB)  0%    563.93 KB/s [--:--:--]Source archive is stored: /var/cache/pisi/archives/lxqt-panel-1.1.0.tar.xz
Unpacking archive(s)...
Program terminated.                                                                                                                   
unpack: check_file_hash failed                                                                                                        
Please use 'pisi help' for general help.                                                                                              
2e16365077b9 ~ # 

10. Source archive is stored: /var/cache/pisi/archives/lxqt-panel-1.1.0.tar.xz bize arşivin yerel adresini verir. Fare ile /var ile başlayan yerden satır sonuna kadar kopyala ve sağ tıklayıp yapıştır.

11. Home tuşu ile satır başına gelerek sha1sum ve bir boşluk ekleyip enter tuşuna basın. Aşağıdaki gibi bir toplam özeti verecektir.

sha1sum /var/cache/pisi/archives/lxqt-panel-1.1.0.tar.xz
9d73c9805972cb78770228abc8865e2675ab936d  /var/cache/pisi/archives/lxqt-panel-1.1.0.tar.xz

12. Hesaplanan sha1sum değerini pspec.xml dosyasındaki ilgili yere yapıştır.

13. Terkrardan pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml komutu ile derlemeyi başlatın.

14. configure aşamasında eksik inşa bağımlılığı tespit ederse hata verir

15. İlgili paket_adı-devel şeklinde altına paket_adı-devel olarak eklenir ve derleme yeniden başlatılır

16. Derleme hatasız tamamlanıncaya kadar bu şekilde eksik inşa bağımlıkları tamamlanır.

17. Paketlemek istediğiniz uygulamanın inşa bağımlılıklarının en kolay elde etmenin yolu fedora paket sayfasında uygulama adını yazıp spec dosyasına bakmaktır. Fedora lxqt-panel.spec içinde inşa bağımlıkları listesi.

BuildRequires: make
BuildRequires: pkgconfig(Qt5Help)
BuildRequires: pkgconfig(Qt5Xdg) >= 1.0.0
BuildRequires: pkgconfig(lxqt) >= 1.0.0
BuildRequires: pkgconfig(lxqt-globalkeys)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-damage)
BuildRequires: pkgconfig(xcb-xkb)
BuildRequires: pkgconfig(xcb-util)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(xkbcommon-x11)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(libstatgrab)
BuildRequires: pkgconfig(sysstat-qt5)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libmenu-cache)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(dbusmenu-qt5)
BuildRequires: kf5-kwindowsystem-devel >= 5.5.0
BuildRequires: kf5-kguiaddons-devel >= 5.5.0
BuildRequires: kf5-solid-devel >= 5.5.0
BuildRequires: desktop-file-utils
BuildRequires: lm_sensors-devel
BuildRequires: libXdamage-devel
BuildRequires: pkgconfig(glib-2.0)

18. Fedora paket isimlendirmesi pisi paket isimlendirmesi ile benzerlik göstermektedir. Bu nedenle bağımlılıkları bulmak daha kolay olacaktır.

19. configure aşaması bittikten sonra derleme aşamasında hata ile karşılaşılırsa

pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml --install 

parametresi ile derleme yeniden başlatılır. --install parametresi gerekli düzeltme yapıldıktan sonra derlemenin kaldığı yerden devam etmesini sağlar.

20. Derleme hatasız bir şekilde bittiğinde aşağıdakine benzer bir ekran görüntüsü görürsünüz.

DEBUG: /usr/bin/lxqt-panel [stripped]
Building package: lxqt-panel
Creating lxqt-panel-1.1.0-15-p2-x86_64.pisi...                                                                                        
Building package: lxqt-panel-devel
Creating lxqt-panel-devel-1.1.0-15-p2-x86_64.pisi...                                                                                  
Keeping build directory
2e16365077b9 ~ # 

21. Eğer --install parametresi ile derlemeye devam etmişseniz de aşağıdaki görüntüye benzer şekilde sonuçlanır.

-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/etc/autostart/lxqt-panel.desktop
-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/usr/share/desktop-directories/lxqt-leave.directory
-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/usr/share/desktop-directories/lxqt-settings.directory
-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/etc/menus/lxqt-applications.menu
-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/etc/menus/lxqt-applications-compact.menu
-- Installing: /var/pisi/lxqt-panel-1.1.0-15/install/etc/menus/lxqt-applications-simple.menu
DEBUG: return value for "make DESTDIR=/var/pisi/lxqt-panel-1.1.0-15/install install" is 0
2e16365077b9 ~ # 

22. Bu aşamada paket oluşmamıştır ve

pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml --package

komutu ile devam etmeniz gerekir. Burada --package parametresi build işlemi biten paketin pisi paketi olarak sıkıştırılması aşamasını başlatır. İşlem tamamlandığında 20. adımda karşılaştığınız görüntü ile karşılaşırsınız.

23. Oluşan paketleri pisi it --ignore-dependency parametresi ile docker imajına kuruyoruz.

24. Paketin çalışma bağımlılıklarını tespit etmek için checkelf -s -x paket_adı komutunu veriyoruz.

2e16365077b9 ~ # checkelf -s -x lxqt-panel-1.1.0-15-p2-x86_64.pisi

Package: lxqt-panel
-------------------

Written dependencies           Detected dependencies          Missing dependencies                                                    
----------------------------------------------------------------------------------
solid                          solid                                                        
libgcc (base)                  libgcc (base)                                                
libxcb (base)                  libxcb (base)                                                
libXtst                        libXtst                                                      
liblxqt                        liblxqt                                                      
qt5-svg                        qt5-svg                                                      
alsa-lib                       alsa-lib                                                     
libqtxdg                       libqtxdg                                                     
qt5-base                       qt5-base                                                     
xcb-util                       xcb-util                                                     
libsysstat                     libsysstat                                                   
lm_sensors                     lm_sensors                                                   
libstatgrab                    libstatgrab                                                  
libxkbcommon                   libxkbcommon                                                 
kwindowsystem                  kwindowsystem                                                
qt5-x11extras                  qt5-x11extras                                                
libdbusmenu-qt                 libdbusmenu-qt                                               
xcb-util-image                 xcb-util-image                                               
lxqt-globalkeys                lxqt-globalkeys                                              
pulseaudio-libs                pulseaudio-libs                                              

2e16365077b9 ~ # 

25. Missing dependencies başlığı altında bir paket adı görürseniz. Onu pspec.xml dosyasında altına paket_adı olarak ekliyoruz.

26. Eksik çalışma bağımlılıkları eklendikten sonra yeniden pisi bi -d --ignore-safety /git/main/desktop/lxqt/lxqt-panel/pspec.xml --package komutunu çalıştırıp paketler oluştuktan sonra bu kez kurulum yapmadan tekrar checkelf -s -x paket_adı komutu ile son kontrolü yapıyoruz.

27. Problem yoksa hazırladığımız paket inşa dosyalarını github'a commit ediyoruz ve kendi github hesabımızdan Contribute'e tıklıyoruz açılan menüden Open Pull Request'i tıklıyoruz ve yönergeleri takip ediyoruz.

Paketleme Kuralları;

  1. pspec.xml ve actions.py dosyaları düzenlenirken sekme (Tab tuşu) yerine boşluk kullanılmalıdır.
  2. pspec.xml dosyalarında xml etiketlerinin hizalarına dikkat edilmelidir.
  3. Dosya yolları yazılırken bir yol diğer yolları kapsamamalıdır.
  4. actions.py dosyalarında mümkünse shelltools yerine pisitools kullanılmalıdır.
  5. configure seçeneklerinde pakete yeni bağımlılık getirecek değişiklikler için mutlaka issue açılmalı, tartışılmadan pull request istenmemelidir.
  6. systemd olmadığı için paketleri yapılandırırken ---with-systemdsystemunitdir=/lib/systemd/system yerine --with-systemdsystemunitdir=no kullanılmalıdır.
  7. Bir paketi yapılandırırken --libexecdir= kullanılacaksa "--libexecdir=/usr/lib/%s" % get.srcNAME() şeklinde kullanılmalıdır.
  8. Tüm paketçiler kendi forklarında çalışmalı ve Contribute/Open Pull Request yolunu kullanarak talimatlara uymalıdır.
  9. Paket güncellemelerinde
    <Icon>paket_simge_adı</Icon>
    etiketi kontrol edilmeli eğer eklenmemiş ise /usr/share/pixmaps/icons içinde ilgili paketin görseli varsa yukarıdaki paket_simge_adı yerine simge adını yazalım. Paketlerin "devel"larına "development", sadece kitaplık olan paketlere "library", konsole/terminal uygulamaları için de "terminal" yazalım.
  10. Eğer paket simgesi /usr/share/pixmaps/icons altında yoksa pakete ait görseli iconcan paketi içinde files dizinine atıp etiketi ile /usr/share/pixmaps/icons altına atmalı ve iconcan paketi için release artırıp rebuild etmeliyiz.