🔒 Repository is read-only – file editing is disabled.

recipes/utils/kernel/PAGBUILD.yaml main

137 linii Raw ← Powrót
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
pkgname: kernel
pkgver: '7.2.5'
pkgrel: '2'
pkgdesc: 'Pagan Linux kernel (rolling)  układ DOKŁADNIE jak w obrazie ISO: /boot/vmlinuz-<ver>-pagan + /usr/lib/modules/<ver>-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-<ver>/initramfs-<ver>.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-<ver>-pagan z ISO).
  # CONFIG_LOCALVERSION="-pagan" → KERNELRELEASE = <ver>-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/<ver>-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