-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create 0000-arch-pkgbuild-test.patch
- Loading branch information
1 parent
b3628f2
commit 0423ddb
Showing
1 changed file
with
215 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
Subject: [PATCH v5] kbuild: add script and target to generate pacman package | ||
Date: Sun, 14 Jul 2024 10:03:45 +0200 [thread overview] | ||
Message-ID: <[email protected]> (raw) | ||
From: "Thomas Weißschuh" <[email protected]> | ||
|
||
pacman is the package manager used by Arch Linux and its derivates. | ||
Creating native packages from the kernel tree has multiple advantages: | ||
|
||
* The package triggers the correct hooks for initramfs generation and | ||
bootloader configuration | ||
* Uninstallation is complete and also invokes the relevant hooks | ||
* New UAPI headers can be installed without any manual bookkeeping | ||
|
||
The PKGBUILD file is a simplified version of the one used for the | ||
downstream Arch Linux "linux" package. | ||
Extra steps that should not be necessary for a development kernel have | ||
been removed and an UAPI header package has been added. | ||
|
||
Signed-off-by: Thomas Weißschuh <[email protected]> | ||
Reviewed-by: Nathan Chancellor <[email protected]> | ||
Tested-by: Nathan Chancellor <[email protected]> | ||
Reviewed-by: Nicolas Schier <[email protected]> | ||
--- | ||
Changes in v5: | ||
- Rebase onto kbuild/for-next | ||
- Use new path to build-version script (from kbuild/for-next) | ||
- Ensure submake jobserver delegation works | ||
- Simplify $modulesdir/pkgbase file creation | ||
- Add Reviewed-by from Nicolas | ||
- Link to v4: https://lore.kernel.org/r/[email protected] | ||
|
||
Changes in v4: | ||
- Update MRPROPER_FILES | ||
- Unify shell variable syntax | ||
- Link to v3: https://lore.kernel.org/r/[email protected] | ||
|
||
Changes in v3: | ||
- Enforce matching architectures for installation | ||
- Add Reviewed-by and Tested-by from Nathan | ||
- Link to v2: https://lore.kernel.org/r/[email protected] | ||
|
||
Changes in v2: | ||
- Replace ${MAKE} with $MAKE for consistency with other variables | ||
- Use $MAKE for "-s image_name" | ||
- Avoid permission warnings from build directory | ||
- Clarify reason for /build symlink removal | ||
- Install System.map and config | ||
- Install dtbs where available | ||
- Allow cross-build through arch=any | ||
- Sort Contributor/Maintainer chronologically | ||
- Disable some unneeded makepkg options | ||
- Use DEPMOD=true for consistency with rpm-package | ||
- Link to v1: https://lore.kernel.org/r/[email protected] | ||
--- | ||
.gitignore | 6 ++++ | ||
Makefile | 2 +- | ||
scripts/Makefile.package | 16 ++++++++++ | ||
scripts/package/PKGBUILD | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ | ||
4 files changed, 106 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/.gitignore b/.gitignore | ||
index c59dc60ba62e..7902adf4f7f1 100644 | ||
--- a/.gitignore | ||
+++ b/.gitignore | ||
@@ -92,6 +92,12 @@ modules.order | ||
# | ||
/tar-install/ | ||
|
||
+# | ||
+# pacman files (make pacman-pkg) | ||
+# | ||
+/PKGBUILD | ||
+/pacman/ | ||
+ | ||
# | ||
# We don't want to ignore the following even if they are dot-files | ||
# | ||
diff --git a/Makefile b/Makefile | ||
index c90d408c825e..2c38c5f57135 100644 | ||
--- a/Makefile | ||
+++ b/Makefile | ||
@@ -1481,7 +1481,7 @@ CLEAN_FILES += vmlinux.symvers modules-only.symvers \ | ||
# Directories & files removed with 'make mrproper' | ||
MRPROPER_FILES += include/config include/generated \ | ||
arch/$(SRCARCH)/include/generated .objdiff \ | ||
- debian snap tar-install \ | ||
+ debian snap tar-install PKGBUILD pacman \ | ||
.config .config.old .version \ | ||
Module.symvers \ | ||
certs/signing_key.pem \ | ||
diff --git a/scripts/Makefile.package b/scripts/Makefile.package | ||
index bf016af8bf8a..920774dd660c 100644 | ||
--- a/scripts/Makefile.package | ||
+++ b/scripts/Makefile.package | ||
@@ -141,6 +141,21 @@ snap-pkg: | ||
cd $(objtree)/snap && \ | ||
snapcraft --target-arch=$(UTS_MACHINE) | ||
|
||
+# pacman-pkg | ||
+# --------------------------------------------------------------------------- | ||
+ | ||
+PHONY += pacman-pkg | ||
+pacman-pkg: | ||
+ @ln -srf $(srctree)/scripts/package/PKGBUILD $(objtree)/PKGBUILD | ||
+ +cd $(objtree) && \ | ||
+ srctree="$(realpath $(srctree))" \ | ||
+ objtree="$(realpath $(objtree))" \ | ||
+ BUILDDIR="$(realpath $(objtree))/pacman" \ | ||
+ CARCH="$(UTS_MACHINE)" \ | ||
+ KBUILD_MAKEFLAGS="$(MAKEFLAGS)" \ | ||
+ KBUILD_REVISION="$(shell $(srctree)/scripts/build-version)" \ | ||
+ makepkg | ||
+ | ||
# dir-pkg tar*-pkg - tarball targets | ||
# --------------------------------------------------------------------------- | ||
|
||
@@ -221,6 +236,7 @@ help: | ||
@echo ' bindeb-pkg - Build only the binary kernel deb package' | ||
@echo ' snap-pkg - Build only the binary kernel snap package' | ||
@echo ' (will connect to external hosts)' | ||
+ @echo ' pacman-pkg - Build only the binary kernel pacman package' | ||
@echo ' dir-pkg - Build the kernel as a plain directory structure' | ||
@echo ' tar-pkg - Build the kernel as an uncompressed tarball' | ||
@echo ' targz-pkg - Build the kernel as a gzip compressed tarball' | ||
diff --git a/scripts/package/PKGBUILD b/scripts/package/PKGBUILD | ||
new file mode 100644 | ||
index 000000000000..7bce2f01b17d | ||
--- /dev/null | ||
+++ b/scripts/package/PKGBUILD | ||
@@ -0,0 +1,83 @@ | ||
+# SPDX-License-Identifier: GPL-2.0-only | ||
+# Maintainer: Thomas Weißschuh <[email protected]> | ||
+# Contributor: Jan Alexander Steffens (heftig) <[email protected]> | ||
+ | ||
+pkgbase=linux-upstream | ||
+pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-api-headers") | ||
+pkgver="${KERNELRELEASE//-/_}" | ||
+pkgrel="$KBUILD_REVISION" | ||
+pkgdesc='Linux' | ||
+url='https://www.kernel.org/' | ||
+arch=($CARCH) | ||
+options=(!debug !strip !buildflags !makeflags) | ||
+license=(GPL-2.0-only) | ||
+ | ||
+build() { | ||
+ export MAKEFLAGS="$KBUILD_MAKEFLAGS" | ||
+ cd "$objtree" | ||
+ | ||
+ # makepkg does a "chmod a-srw", triggering warnings during kbuild | ||
+ chmod 0755 "$pkgdirbase" || true | ||
+ | ||
+ $MAKE -f "$srctree/Makefile" | ||
+} | ||
+ | ||
+package_linux-upstream() { | ||
+ pkgdesc="The $pkgdesc kernel and modules" | ||
+ | ||
+ export MAKEFLAGS="$KBUILD_MAKEFLAGS" | ||
+ cd "$objtree" | ||
+ local modulesdir="$pkgdir/usr/$MODLIB" | ||
+ | ||
+ echo "Installing boot image..." | ||
+ # systemd expects to find the kernel here to allow hibernation | ||
+ # https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344 | ||
+ install -Dm644 "$($MAKE -s image_name)" "$modulesdir/vmlinuz" | ||
+ | ||
+ # Used by mkinitcpio to name the kernel | ||
+ echo "$pkgbase" > "$modulesdir/pkgbase" | ||
+ | ||
+ echo "Installing modules..." | ||
+ $MAKE INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 \ | ||
+ DEPMOD=true modules_install | ||
+ | ||
+ if $MAKE run-command KBUILD_RUN_COMMAND='test -d $srctree/arch/$SRCARCH/boot/dts' 2>/dev/null; then | ||
+ echo "Installing dtbs..." | ||
+ $MAKE INSTALL_DTBS_PATH="$modulesdir/dtb" dtbs_install | ||
+ fi | ||
+ | ||
+ # remove build link, will be part of -headers package | ||
+ rm -f "$modulesdir/build" | ||
+} | ||
+ | ||
+package_linux-upstream-headers() { | ||
+ pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel" | ||
+ | ||
+ export MAKEFLAGS="$KBUILD_MAKEFLAGS" | ||
+ cd "$objtree" | ||
+ local builddir="$pkgdir/usr/$MODLIB/build" | ||
+ | ||
+ echo "Installing build files..." | ||
+ "$srctree/scripts/package/install-extmod-build" "$builddir" | ||
+ | ||
+ echo "Installing System.map and config..." | ||
+ cp System.map "$builddir/System.map" | ||
+ cp .config "$builddir/.config" | ||
+ | ||
+ echo "Adding symlink..." | ||
+ mkdir -p "$pkgdir/usr/src" | ||
+ ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase" | ||
+} | ||
+ | ||
+package_linux-upstream-api-headers() { | ||
+ pkgdesc="Kernel headers sanitized for use in userspace" | ||
+ provides=(linux-api-headers) | ||
+ conflicts=(linux-api-headers) | ||
+ | ||
+ export MAKEFLAGS="$KBUILD_MAKEFLAGS" | ||
+ cd "$objtree" | ||
+ | ||
+ $MAKE headers_install INSTALL_HDR_PATH="$pkgdir/usr" | ||
+} | ||
+ | ||
+# vim:set ts=8 sts=2 sw=2 et: | ||
|
||
--- |