pkgname: kernel pkgver: '7.2.5' pkgrel: '2' pkgdesc: 'Pagan Linux kernel (rolling) – układ DOKŁADNIE jak w obrazie ISO: /boot/vmlinuz--pagan + /usr/lib/modules/-pagan + źródła DKMS w /usr/src/kernel.' url: 'https://www.kernel.org' arch: x86_64 license: - GPL-2.0-only depends: - kmod # `pag install linux` musi dalej działać (stare skrypty, pagan-drivers, haki) – # tak samo nazywa ten pakiet build ISO (install_rolling_kernel w build-pagan.sh, # które ustawia provides:["linux"]). provides: - linux makedepends: - gmp - mpc - bison - flex - perl - libelf - diffutils - tar - rustc source: - 'init_path.patch' - 'https://www.kernel.org/pub/linux/kernel/v7.x/linux-7.2.tar.xz' - 'https://www.kernel.org/pub/linux/kernel/v7.x/patch-${pkgver}.xz' - config sha256sums: - d854364371f89cd735d15a6877b4bbe4bce133cd3167edef95ba5930f81bedf1 - f9fef3d14c0df53819026f4be74459835c2a0b0dcbf5b5bbd9ea19f0829402b3 - 12398c7d02541f75cc91cb1103bbafa4faa32e04c49d71120229afc3ea13e5bd - cb221796a56be8895c13a4d898963c8726fdddb565dc3b3fe290ca2620f58690 # Hooki uruchamiają się na ŻYWYM systemie po `pag install kernel` (rolling) i # muszą zostawić /boot w stanie, który zrozumie /etc/grub.d/10_linux. hooks: 'post-install': | export LC_ALL=C LANG=C export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 1) build/source dla każdego jądra (DKMS, moduły out-of-tree). Symlinki # WZGLĘDNE – pag blokuje absolutne ścieżki w pakiecie. for _m in /usr/lib/modules/*; do [ -d "$_m" ] || continue [ -d /usr/src/kernel ] || continue ln -sfn ../../../src/kernel "$_m/build" ln -sfn ../../../src/kernel "$_m/source" done # 2) initramfs (pagan-initramfs → mkinitramfs → dracut → mkinitcpio) if command -v pagan-initramfs >/dev/null 2>&1; then pagan-initramfs || true elif command -v mkinitramfs >/dev/null 2>&1; then mkinitramfs "$(ls /usr/lib/modules | grep -vx 'kernel-lts' | head -1)" || true fi # 3) Aliasy initramfs pod nazwami z wersją. 10_linux szuka initrd WYŁĄCZNIE # jako initrd.img-/initramfs-.img; bez aliasu wpis w menu nie ma # linii `initrd` → panika jądra („VFS: Cannot open root device”). if [ -f /boot/initramfs.img ]; then for _k in /boot/vmlinuz*; do [ -e "$_k" ] || continue _v="$(basename "$_k" | sed -e 's,^[^0-9]*-,,g')" [ -n "$_v" ] || continue [ "$_v" != "$(basename "$_k")" ] || continue [ -e "/boot/initramfs-$_v.img" ] || ln -sfn initramfs.img "/boot/initramfs-$_v.img" [ -e "/boot/initrd.img-$_v" ] || ln -sfn initramfs.img "/boot/initrd.img-$_v" done fi # 4) GRUB: `pag grub-update` NIE może działać w trakcie `pag install` # (lock PAG-a jest trzymany) – dlatego sprawdzamy brak lockfile. if command -v pag >/dev/null 2>&1 && [ ! -f /var/lib/pag/pag.lock ]; then pag grub-update || true fi build: | mkdir -p ${PKGDIR}/{boot,usr/{share/doc,src,lib/modules}} bsdtar -p -o -C . -xf linux-7.2.tar.xz cd linux-7.2 [ -f ../patch-${pkgver}.xz ] && \ xz -d -c ../patch-${pkgver}.xz | patch -Np1 patch -Np1 -i ../init_path.patch # Konfiguracja: identyczna z build-pagan.sh (config = config--pagan z ISO). # CONFIG_LOCALVERSION="-pagan" → KERNELRELEASE = -pagan (np. 7.2.5-pagan). cp ../config .config make olddefconfig diff -u ../config .config || true KERNELRELEASE=$(make -s kernelrelease) IMAGENAME=$(make -s image_name) make cp .config config ZSTD_CLEVEL=19 \ make INSTALL_MOD_PATH=${PKGDIR}/usr \ INSTALL_MOD_STRIP=1 \ DEPMOD=/dev/null modules_install depmod -b ${PKGDIR}/usr -a $KERNELRELEASE # ── /boot: nazwy plików DOKŁADNIE jak w obrazie ISO ────────────────────── # GRUB (/etc/grub.d/10_linux) znajduje jądra WYŁĄCZNIE po `vmlinuz-*`. # Poprzednie `kernel-stable` było dla GRUB-a niewidoczne, więc po `pag upgrade` # system startował ze STARYM jądrem z obrazu (albo nie startował wcale). cp System.map ${PKGDIR}/boot/System.map-$KERNELRELEASE ln -sf System.map-$KERNELRELEASE ${PKGDIR}/boot/System.map cp .config ${PKGDIR}/boot/config-$KERNELRELEASE cp $IMAGENAME ${PKGDIR}/boot/vmlinuz-$KERNELRELEASE ln -sf vmlinuz-$KERNELRELEASE ${PKGDIR}/boot/vmlinuz-linux # ── źródła dla DKMS: /usr/src/kernel (SYSSRC dla nvidia-kernel/nvidia-dkms). cd .. mv linux-7.2 ${PKGDIR}/usr/src/kernel mv ${PKGDIR}/usr/src/kernel/Documentation ${PKGDIR}/usr/share/doc/kernel # Konwencja „linux-headers-$(uname -r)”, której szukają hooki ISO i DKMS. ln -sfn kernel ${PKGDIR}/usr/src/linux-headers-$KERNELRELEASE # ── moduły: /usr/lib/modules/-pagan (BEZ zmiany nazwy na „kernel”) ── # Ten sam katalog co w obrazie ISO → `pag upgrade` podmienia jądro W MIEJSCU, # a moduły NVIDIA/DKMS trafiają tam, gdzie faktycznie szuka ich jądro. cd ${PKGDIR}/usr/lib/modules rm -f $KERNELRELEASE/build $KERNELRELEASE/source ln -sfn ../../../src/kernel $KERNELRELEASE/build ln -sfn ../../../src/kernel $KERNELRELEASE/source # Firmware are in linux-firmware rm -rf ${PKGDIR}/lib/firmware package: | true