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).
- 148fc646 revert: usun linux/linux-headers/nvidia-kernel/paganlinux z repo (lokalne szkice, nie powinny byc w recipes)
- 14202de2 fix(xorg/qt): ${name...} -> ${pkgname...} w 68 recepturach (name nie jest eksportowany -> cd -X.Y.Z: invalid option)
- 98fc1801 fix(argyllcms): rm -f na License.txt i afiles (set -e przerywal gdy plik nie istnieje w destdir)
- a583cb22 fix(xorg-xauth): cd xauth-1.1.5 zamiast ${name/xorg-/} (name niezdefiniowane -> cd -1.1.5: invalid option)
- 0b10acf2 fix(gspell): gtk_doc to opcja boolean (disabled nie dziala - meson ERROR)
- ff31be3c fix(gspell): wylacz gtk-doc (padal przy meson install - ten sam wzorzec co gtk-layer-shell)
- ec635ca4 fix(gtk-layer-shell): wylacz docs/tests (gtk-doc przy install padal)
- fc3bd1ee fix(python): docs-html tar tolerancyjny (brak pobranego tarballa)
- a9f291af fix: systemd/libpciaccess/libdrm meson paths, util-macros install, liblinear glob, libmusicbrainz cmake -S, jemalloc bad_alloc, pam docs=disabled, libgtop gtk-doc
- eaa4ff8b fix: libaio, texinfo, util-linux patch 2.41.5, fish fluent-rs rev
- 60a5b776 fix(crypto++): sklejony URL zrodla (rozbity na 2 wpisy)
- f4393542 fix: gte (disable gtk2 engine - gtk2 nie buduje sie z nowym autoconf), shared-mime-info (xmlto w makedepends)
- fa140c6d fix(recipes): dodaj brakujace meson install do 97 receptur (meson compile bez instalacji -> puste pakiety)
- b91aed21 fix(perl-xml-parser): makedepend perl-file-sharedir-install (File::ShareDir)
- bde39a5e fix(go): rm -f dla *.bat (glob bez dopasowania przy set -e)