recipes
git clone https://git.paganlinux.eu/recipes.git
PaganOS Recipes
Receptury pakietów dla PaganOS. Każdy plik PAGBUILD.yaml definiuje jak zbudować pojedynczy pakiet.
Struktura
recipes/
├── core/ # pakiety bazowe (binutils, gcc, glibc, ...)
├── drivers/ # sterowniki (libinput, mesa, ...)
├── net/ # sieć (curl, wget, NetworkManager, ...)
├── gui/ # pakiety GUI (gtk, qt, xfce, ...)
├── utils/ # narzędzia (bubblewrap, ripgrep, ...)
└── boot/ # bootloader (grub)
Format PAGBUILD.yaml
pkgname: acl
pkgver: '2.4.0'
pkgrel: 1
pkgdesc: Commands for Manipulating POSIX Access Control Lists.
url: http://savannah.nongnu.org/projects/acl
arch: x86_64
license:
- GPL-2.0-only
depends:
- attr
makedepends:
- gcc
source:
- http://download.savannah.gnu.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz
sha256sums:
- SKIP
build: |
cd "${pkgname}-${pkgver}"
./configure --prefix=/usr
make -j$(nproc)
package: |
cd "${pkgname}-${pkgver}"
make DESTDIR="${PKGDIR}" install
Zmienne dostępne w fazach build/package
${PKGDIR}— katalog DESTDIR (instalacja pakietu)${pkgname},${pkgver},${pkgrel}— podstawiane też w adresachsource:
Model pakietu (jak Arch/Debian — bez footprintów)
Receptura nie deklaruje listy plików. Faza package: instaluje wszystko do
${PKGDIR} (DESTDIR) i z tego katalogu pagbuild tworzy jeden pakiet —
dokładnie jak PKGBUILD w Archu czy reguły install w Debianie. Lista plików
nie jest danymi wejściowymi, tylko pochodną pakietu: pag wylicza SHA256
dla każdego pliku przy instalacji i zapisuje je w /var/lib/pag/files.db
(rola, którą w Debianie pełni md5sums/.list, a w Archu .MTREE).
Nie używamy już pól
footprint,footprint_devel,footprint_man,footprint_<lang>— to balast z formatu cards/NuTyX, któregopagbuildnigdy nie czytał. Podpakiety deweloperskie/dokumentacyjne/językowe są scalane z pakietem głównym (ich pliki i tak trafiają do DESTDIR). Do usuwania tych pól z istniejących receptur służystrip-recipes-footprints.py.
Pakiet wyjściowy
pagbuild buduje pakiety .pag (tar.xz z metadata.json + data.tar.xz),
gotowe do instalacji przez pag install plik.pag. W repo trzymamy wyłącznie
aktualną wersję każdego pakietu — starsze są usuwane przez pagsync.
Pakiet wydania (pagan-release) — wersja systemu przez repo
recipes/core/pagan-release to pakiet wydania („os-info”). Jego pkgver
JEST wersją systemu, a depends opisuje, co to wydanie ma zawierać.
Dlaczego tak, a nie „wersja wpisana w obraz”:
- pliki
/etc/os-releasei/etc/pagan-releasenależą do PAKIETU, więcpag verifyje obejmuje, apag upgradepodmienia je przy nowszej wersji (z ochroną.pacnew, jeśli użytkownik je zmienił), - w obrazie pakiet jest instalowany od razu, więc
pag base registerzapamiętuje go z wersją obrazu, provides: pagan-system=<wersja>pozwala innym pakietom wymagaćpagan-system>=1.0.0bez wiązania się z nazwą pakietu wydania,- klucze dodatkowe
codename:idesktop:(pagbuild je ignoruje) czytabuild-pagan.sh— jedno miejsce z prawdą o kodename i środowisku.
Nowe wydanie — kolejność
- Podnieś
pkgver(i ewentualniecodename) wrecipes/core/pagan-release/PAGBUILD.yaml; dopisz nowe pozycje wdepends, jeśli wydanie ma dołożyć tapety/programy. - Podnieś
PAGAN_VERSIONwbuild-pagan.sh(builder ostrzeże w fazie weryfikacji obrazu, jeśli te dwie wartości się rozjadą). pagbuild pagan-release→ podpis →pagsync --gen-repo(albo GUI-Build).- Na maszynie użytkownika:
sudo pag upgrade→ nowa wersja systemu.
Uwagi
dependsmuszą istnieć w repozytorium.pagan-wallpapersbuduje sam builder (tapety leżą wbranding/, do którego repo receptur nie ma dostępu), więc jego.pag(zISO/packages/po buildzie) wysyła się do repozytorium razem zpagan-release.- Hooki: katalog
hooks/w.pagobsługujepre-install,post-install,pre-remove,post-remove(APIPKG_HOOK_API,PAG_NO_HOOKS=1wyłącza,PAG_HOOK_TIMEOUTogranicza czas).pagan-releaseużywapost-installdo odświeżenia baz pulpitu/ikon po dodaniu programów w wydaniu.
Receptury z własną konfiguracją (pagan-xfce-panel-layout)
Nie każdy pakiet jest kompilowany – niektóre wnoszą samą konfigurację.
Wzorzec: pliki leżą w katalogu receptury i są wymienione w source: (pagbuild
kopiuje je do katalogu budowy, więc w build: są dostępne po nazwie, bez
ścieżek).
Przykład: recipes/gui/pagan-xfce-panel-layout wnosi domyślny układ panelu XFCE
(/etc/xdg/xfce4/panel/default.xml) oraz skrypty widgetów genmon
(/usr/libexec/pagan/panel/: CPU, RAM, sieć, bateria).
Jedno źródło prawdy dla repo i ISO
Układ panelu generuje gen-panel-xml.sh z tej samej receptury, której używa
build-pagan.sh – nie ma drugiej kopii definicji układu do rozjechania:
- tutaj (pagbuild) generator jest wołany bez flag, bo
dependsgwarantuje obecność wtyczek (xfce4-panel,xfce4-whiskermenu-plugin,xfce4-genmon-plugin,xfce4-clipman-plugin), build-pagan.shbuduje te wtyczki „best-effort”, więc sam wykrywa braki w rootfs i przekazuje je flagami (--no-whiskermenu,--no-genmon,--no-clipman) – panel nigdy nie wskazuje na niezainstalowany moduł.
Zmieniając układ panelu (kolejność wtyczek, widgety, ulubione w menu) edytuje
się tylko gen-panel-xml.sh i podnosi pkgver w tej recepturze.
Budowanie lokalnie
pagbuild recipes/core/acl/PAGBUILD.yaml
Narzędzia
migrate-recipes.py— konwertuje recepturycards(Pkgfile) naPAGBUILD.yaml(footprinty są celowo pomijane)strip-recipes-footprints.py— usuwa polafootprint*z istniejących receptur (idempotentne;--apply, aby zapisać, domyślnie dry-run)
Polityka forków
Fork-first w całym repo: ../../FORK-POLICY.md.
Krótko: co możemy zrobić forkiem, robimy forkiem — źródła w repo, pakiet
-pagan, lokalny tarball + wyliczony sha256 (build bez sieci) i adnotacja
licencyjna o statusie forka (FORK.md + NOTICE).
- c07f0308 aktualizacja gita
- f7bd20b9 3.6.17
- 23e5ff6f 580.178.04
- c5248c19 580.178.04
- 12e8cb8d aktualizacja gita
- 5996960d aktualizacja gita
- f966428a aktualizacja gita
- 6625a95d poprawiony pagbuild
- 68b3c35a aktualizacja gita
- 021af104 aktualizacja gita
- 8e57473a poprawiony pagbuild
- 628cdb62 poprawiony pagbuild
- 4e5955b9 poprawiony pagbuild
- 2e30e467 aktualizacja gita
- 119849ba poprawka: atool zrodlo (savannah zwraca HTML -> debian pool)