mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 00:28:52 +02:00 
			
		
		
		
	kbuild: add script and target to generate pacman package
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 modified 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 <linux@weissschuh.net> Reviewed-by: Nathan Chancellor <nathan@kernel.org> Tested-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
		
							parent
							
								
									3554a45297
								
							
						
					
					
						commit
						c8578539de
					
				
					 5 changed files with 136 additions and 1 deletions
				
			
		
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							|  | @ -92,6 +92,12 @@ modules.order | ||||||
| # | # | ||||||
| /tar-install/ | /tar-install/ | ||||||
| 
 | 
 | ||||||
|  | # | ||||||
|  | # pacman files (make pacman-pkg) | ||||||
|  | # | ||||||
|  | /PKGBUILD | ||||||
|  | /pacman/ | ||||||
|  | 
 | ||||||
| # | # | ||||||
| # We don't want to ignore the following even if they are dot-files | # We don't want to ignore the following even if they are dot-files | ||||||
| # | # | ||||||
|  |  | ||||||
|  | @ -11998,6 +11998,13 @@ F:	include/uapi/linux/nfsd/ | ||||||
| F:	include/uapi/linux/sunrpc/ | F:	include/uapi/linux/sunrpc/ | ||||||
| F:	net/sunrpc/ | F:	net/sunrpc/ | ||||||
| 
 | 
 | ||||||
|  | KERNEL PACMAN PACKAGING (in addition to generic KERNEL BUILD) | ||||||
|  | M:	Thomas Weißschuh <linux@weissschuh.net> | ||||||
|  | R:	Christian Heusel <christian@heusel.eu> | ||||||
|  | R:	Nathan Chancellor <nathan@kernel.org> | ||||||
|  | S:	Maintained | ||||||
|  | F:	scripts/package/PKGBUILD | ||||||
|  | 
 | ||||||
| KERNEL REGRESSIONS | KERNEL REGRESSIONS | ||||||
| M:	Thorsten Leemhuis <linux@leemhuis.info> | M:	Thorsten Leemhuis <linux@leemhuis.info> | ||||||
| L:	regressions@lists.linux.dev | L:	regressions@lists.linux.dev | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							|  | @ -1489,7 +1489,7 @@ CLEAN_FILES += vmlinux.symvers modules-only.symvers \ | ||||||
| # Directories & files removed with 'make mrproper'
 | # Directories & files removed with 'make mrproper'
 | ||||||
| MRPROPER_FILES += include/config include/generated          \
 | MRPROPER_FILES += include/config include/generated          \
 | ||||||
| 		  arch/$(SRCARCH)/include/generated .objdiff \
 | 		  arch/$(SRCARCH)/include/generated .objdiff \
 | ||||||
| 		  debian snap tar-install \
 | 		  debian snap tar-install PKGBUILD pacman \
 | ||||||
| 		  .config .config.old .version \
 | 		  .config .config.old .version \
 | ||||||
| 		  Module.symvers \
 | 		  Module.symvers \
 | ||||||
| 		  certs/signing_key.pem \
 | 		  certs/signing_key.pem \
 | ||||||
|  |  | ||||||
|  | @ -141,6 +141,19 @@ snap-pkg: | ||||||
| 	cd $(objtree)/snap && \ | 	cd $(objtree)/snap && \ | ||||||
| 	snapcraft --target-arch=$(UTS_MACHINE) | 	snapcraft --target-arch=$(UTS_MACHINE) | ||||||
| 
 | 
 | ||||||
|  | # pacman-pkg | ||||||
|  | # --------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | PHONY += pacman-pkg | ||||||
|  | pacman-pkg: | ||||||
|  | 	@ln -srf $(srctree)/scripts/package/PKGBUILD $(objtree)/PKGBUILD | ||||||
|  | 	+objtree="$(realpath $(objtree))" \ | ||||||
|  | 		BUILDDIR="$(realpath $(objtree))/pacman" \ | ||||||
|  | 		CARCH="$(UTS_MACHINE)" \ | ||||||
|  | 		KBUILD_MAKEFLAGS="$(MAKEFLAGS)" \ | ||||||
|  | 		KBUILD_REVISION="$(shell $(srctree)/scripts/build-version)" \ | ||||||
|  | 		makepkg $(MAKEPKGOPTS) | ||||||
|  | 
 | ||||||
| # dir-pkg tar*-pkg - tarball targets | # dir-pkg tar*-pkg - tarball targets | ||||||
| # --------------------------------------------------------------------------- | # --------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|  | @ -221,6 +234,7 @@ help: | ||||||
| 	@echo '  bindeb-pkg          - Build only the binary kernel deb package' | 	@echo '  bindeb-pkg          - Build only the binary kernel deb package' | ||||||
| 	@echo '  snap-pkg            - Build only the binary kernel snap package' | 	@echo '  snap-pkg            - Build only the binary kernel snap package' | ||||||
| 	@echo '                        (will connect to external hosts)' | 	@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 '  dir-pkg             - Build the kernel as a plain directory structure' | ||||||
| 	@echo '  tar-pkg             - Build the kernel as an uncompressed tarball' | 	@echo '  tar-pkg             - Build the kernel as an uncompressed tarball' | ||||||
| 	@echo '  targz-pkg           - Build the kernel as a gzip compressed tarball' | 	@echo '  targz-pkg           - Build the kernel as a gzip compressed tarball' | ||||||
|  |  | ||||||
							
								
								
									
										108
									
								
								scripts/package/PKGBUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								scripts/package/PKGBUILD
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | ||||||
|  | # SPDX-License-Identifier: GPL-2.0-only | ||||||
|  | # Maintainer: Thomas Weißschuh <linux@weissschuh.net> | ||||||
|  | # Contributor: Jan Alexander Steffens (heftig) <heftig@archlinux.org> | ||||||
|  | 
 | ||||||
|  | pkgbase=${PACMAN_PKGBASE:-linux-upstream} | ||||||
|  | pkgname=("${pkgbase}" "${pkgbase}-api-headers") | ||||||
|  | if grep -q CONFIG_MODULES=y include/config/auto.conf; then | ||||||
|  | 	pkgname+=("${pkgbase}-headers") | ||||||
|  | fi | ||||||
|  | pkgver="${KERNELRELEASE//-/_}" | ||||||
|  | # The PKGBUILD is evaluated multiple times. | ||||||
|  | # Running scripts/build-version from here would introduce inconsistencies. | ||||||
|  | pkgrel="${KBUILD_REVISION}" | ||||||
|  | pkgdesc='Upstream Linux' | ||||||
|  | url='https://www.kernel.org/' | ||||||
|  | # Enable flexible cross-compilation | ||||||
|  | arch=(${CARCH}) | ||||||
|  | license=(GPL-2.0-only) | ||||||
|  | makedepends=( | ||||||
|  | 	bc | ||||||
|  | 	bison | ||||||
|  | 	cpio | ||||||
|  | 	flex | ||||||
|  | 	gettext | ||||||
|  | 	kmod | ||||||
|  | 	libelf | ||||||
|  | 	openssl | ||||||
|  | 	pahole | ||||||
|  | 	perl | ||||||
|  | 	python | ||||||
|  | 	rsync | ||||||
|  | 	tar | ||||||
|  | ) | ||||||
|  | options=(!debug !strip !buildflags !makeflags) | ||||||
|  | 
 | ||||||
|  | build() { | ||||||
|  | 	# MAKEFLAGS from makepkg.conf override the ones inherited from kbuild. | ||||||
|  | 	# Bypass this override with a custom variable. | ||||||
|  | 	export MAKEFLAGS="${KBUILD_MAKEFLAGS}" | ||||||
|  | 	cd "${objtree}" | ||||||
|  | 
 | ||||||
|  | 	${MAKE} KERNELRELEASE="${KERNELRELEASE}" KBUILD_BUILD_VERSION="${pkgrel}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | _package() { | ||||||
|  | 	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 [ -d "${srctree}/arch/${SRCARCH}/boot/dts" ]; 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-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-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" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | for _p in "${pkgname[@]}"; do | ||||||
|  | 	eval "package_$_p() { | ||||||
|  | 		$(declare -f "_package${_p#$pkgbase}") | ||||||
|  | 		_package${_p#$pkgbase} | ||||||
|  | 	}" | ||||||
|  | done | ||||||
		Loading…
	
		Reference in a new issue
	
	 Thomas Weißschuh
						Thomas Weißschuh