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ı;
- pspec.xml ve actions.py dosyaları düzenlenirken
sekme
(Tab tuşu) yerineboşluk
kullanılmalıdır. - pspec.xml dosyalarında xml etiketlerinin hizalarına dikkat edilmelidir.
- Dosya yolları yazılırken bir yol diğer yolları kapsamamalıdır.
- actions.py dosyalarında mümkünse
shelltools
yerinepisitools
kullanılmalıdır. configure
seçeneklerinde pakete yeni bağımlılık getirecek değişiklikler için mutlaka issue açılmalı, tartışılmadan pull request istenmemelidir.- systemd olmadığı için paketleri yapılandırırken
---with-systemdsystemunitdir=/lib/systemd/system
yerine--with-systemdsystemunitdir=no
kullanılmalıdır. - Bir paketi yapılandırırken
--libexecdir=
kullanılacaksa"--libexecdir=/usr/lib/%s" % get.srcNAME()
şeklinde kullanılmalıdır. - Tüm paketçiler kendi forklarında çalışmalı ve
Contribute/Open Pull Request
yolunu kullanarak talimatlara uymalıdır. - Paket güncellemelerinde
<Icon>paket_simge_adı</Icon>
/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. - 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.