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/ | ||||
| 
 | ||||
| # | ||||
| # pacman files (make pacman-pkg) | ||||
| # | ||||
| /PKGBUILD | ||||
| /pacman/ | ||||
| 
 | ||||
| # | ||||
| # 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:	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 | ||||
| M:	Thorsten Leemhuis <linux@leemhuis.info> | ||||
| 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'
 | ||||
| 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 \
 | ||||
|  |  | |||
|  | @ -141,6 +141,19 @@ 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 | ||||
| 	+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 | ||||
| # --------------------------------------------------------------------------- | ||||
| 
 | ||||
|  | @ -221,6 +234,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' | ||||
|  |  | |||
							
								
								
									
										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