From 596b0474d3d9b1242eab713f84d8873f9887d980 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Tue, 8 Sep 2020 13:27:08 +0900 Subject: kbuild: preprocess module linker script There was a request to preprocess the module linker script like we do for the vmlinux one. (https://lkml.org/lkml/2020/8/21/512) The difference between vmlinux.lds and module.lds is that the latter is needed for external module builds, thus must be cleaned up by 'make mrproper' instead of 'make clean'. Also, it must be created by 'make modules_prepare'. You cannot put it in arch/$(SRCARCH)/kernel/, which is cleaned up by 'make clean'. I moved arch/$(SRCARCH)/kernel/module.lds to arch/$(SRCARCH)/include/asm/module.lds.h, which is included from scripts/module.lds.S. scripts/module.lds is fine because 'make clean' keeps all the build artifacts under scripts/. You can add arch-specific sections in . Signed-off-by: Masahiro Yamada Tested-by: Jessica Yu Acked-by: Will Deacon Acked-by: Geert Uytterhoeven Acked-by: Palmer Dabbelt Reviewed-by: Kees Cook Acked-by: Jessica Yu --- scripts/package/builddeb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 6df3c9f8b2da..44f212e37935 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -55,7 +55,7 @@ deploy_kernel_headers () { cd $srctree find . arch/$SRCARCH -maxdepth 1 -name Makefile\* find include scripts -type f -o -type l - find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform + find arch/$SRCARCH -name Kbuild.platforms -o -name Platform find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f ) > debian/hdrsrcfiles -- cgit v1.2.3 From 51ccdbfbed79bae4b9c2529ec980de4508455a47 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Mon, 21 Sep 2020 00:25:50 +0200 Subject: builddeb: Pass -n to gzip for reproducible packages We should not be encoding the timestamp, otherwise we end up generating unreproducible files that cascade into unreproducible packages. Signed-off-by: Guillem Jover Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 44f212e37935..30e8c6a20171 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -31,7 +31,7 @@ create_package() { mkdir -p "$pdir/usr/share/doc/$pname" cp debian/copyright "$pdir/usr/share/doc/$pname/" cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" - gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" + gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian" sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ | xargs -r0 md5sum > DEBIAN/md5sums" -- cgit v1.2.3 From 3e8541803624678925a477a03e19e3c155b5fc12 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Mon, 21 Sep 2020 00:25:54 +0200 Subject: builddeb: Enable rootless builds This makes it possible to build the Debian packages without requiring (pseudo-)root privileges, when the build drivers support this mode of operation. See-Also: /usr/share/doc/dpkg/rootless-builds.txt.gz Signed-off-by: Guillem Jover Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 9 +++++++-- scripts/package/mkdebian | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 30e8c6a20171..6474084c32a4 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -26,6 +26,7 @@ if_enabled_echo() { create_package() { local pname="$1" pdir="$2" + local dpkg_deb_opts mkdir -m 755 -p "$pdir/DEBIAN" mkdir -p "$pdir/usr/share/doc/$pname" @@ -36,14 +37,18 @@ create_package() { | xargs -r0 md5sum > DEBIAN/md5sums" # Fix ownership and permissions - chown -R root:root "$pdir" + if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then + dpkg_deb_opts="--root-owner-group" + else + chown -R root:root "$pdir" + fi chmod -R go-w "$pdir" # in case we are in a restrictive umask environment like 0077 chmod -R a+rX "$pdir" # Create the package dpkg-gencontrol -p$pname -P"$pdir" - dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. + dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. } deploy_kernel_headers () { diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 48fbd3d0284a..dbe42500084c 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -174,6 +174,7 @@ Source: $sourcename Section: kernel Priority: optional Maintainer: $maintainer +Rules-Requires-Root: no Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends Homepage: https://www.kernel.org/ -- cgit v1.2.3 From 76c37668768464a6c2d5c49abd36ba0b48a0b131 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Mon, 21 Sep 2020 00:25:53 +0200 Subject: builddeb: Add support for all required debian/rules targets These have been required by the Debian policy for a while, even though the tooling can detect and workaround their omission, but are a hard requirement when using rootless builds. [masahiro: The following Debian policy is particularly important for rootless builds: "Both binary-* targets should depend on the build target, or on the appropriate build-arch or build-indep target, so that the package is built if it has not been already." ] Signed-off-by: Guillem Jover Signed-off-by: Masahiro Yamada --- scripts/package/mkdebian | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index dbe42500084c..3a13b834f281 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -218,11 +218,15 @@ cat < debian/rules srctree ?= . -build: +build-indep: +build-arch: \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile -binary-arch: +build: build-arch + +binary-indep: +binary-arch: build-arch \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg -- cgit v1.2.3 From bac977cbc0d6731fb8e67c2be0e4acbd959e10b3 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Wed, 14 Oct 2020 03:38:19 +0900 Subject: kbuild: deb-pkg: do not build linux-headers package if CONFIG_MODULES=n MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since commit 269a535ca931 ("modpost: generate vmlinux.symvers and reuse it for the second modpost"), with CONFIG_MODULES disabled, "make deb-pkg" (or "make bindeb-pkg") fails with: find: ‘Module.symvers’: No such file or directory If CONFIG_MODULES is disabled, it doesn't really make sense to build the linux-headers package. Fixes: 269a535ca931 ("modpost: generate vmlinux.symvers and reuse it for the second modpost") Reported-by: Josh Triplett Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 6 ++++-- scripts/package/mkdebian | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 6474084c32a4..1b11f8993629 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -207,8 +207,10 @@ EOF done if [ "$ARCH" != "um" ]; then - deploy_kernel_headers debian/linux-headers - create_package linux-headers-$version debian/linux-headers + if is_enabled CONFIG_MODULES; then + deploy_kernel_headers debian/linux-headers + create_package linux-headers-$version debian/linux-headers + fi deploy_libc_headers debian/linux-libc-dev create_package linux-libc-dev debian/linux-libc-dev diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 3a13b834f281..273fd6ed790e 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -184,13 +184,6 @@ Description: Linux kernel, version $version This package contains the Linux kernel, modules and corresponding other files, version: $version. -Package: $kernel_headers_packagename -Architecture: $debarch -Description: Linux kernel headers for $version on $debarch - This package provides kernel header files for $version on $debarch - . - This is useful for people who need to build external modules - Package: linux-libc-dev Section: devel Provides: linux-kernel-headers @@ -201,6 +194,18 @@ Description: Linux support headers for userspace development Multi-Arch: same EOF +if is_enabled CONFIG_MODULES; then +cat <> debian/control + +Package: $kernel_headers_packagename +Architecture: $debarch +Description: Linux kernel headers for $version on $debarch + This package provides kernel header files for $version on $debarch + . + This is useful for people who need to build external modules +EOF +fi + if is_enabled CONFIG_DEBUG_INFO; then cat <> debian/control -- cgit v1.2.3 From 0fa21cf4489fe11737d56f8056dda1ba0257bd8d Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Wed, 14 Oct 2020 03:38:20 +0900 Subject: kbuild: deb-pkg: clean up package name variables Hard-code the names of linux-headers and debug packages in the control file. The kernel package is different for ARCH=um. Change the code for better readability. Signed-off-by: Masahiro Yamada --- scripts/package/mkdebian | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian index 273fd6ed790e..60a2a63a5e90 100755 --- a/scripts/package/mkdebian +++ b/scripts/package/mkdebian @@ -94,16 +94,16 @@ else packageversion=$version-$revision fi sourcename=$KDEB_SOURCENAME -packagename=linux-image-$version -kernel_headers_packagename=linux-headers-$version -dbg_packagename=$packagename-dbg -debarch= -set_debarch if [ "$ARCH" = "um" ] ; then - packagename=user-mode-linux-$version + packagename=user-mode-linux +else + packagename=linux-image fi +debarch= +set_debarch + email=${DEBEMAIL-$EMAIL} # use email string directly if it contains @@ -178,7 +178,7 @@ Rules-Requires-Root: no Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends Homepage: https://www.kernel.org/ -Package: $packagename +Package: $packagename-$version Architecture: $debarch Description: Linux kernel, version $version This package contains the Linux kernel, modules and corresponding other @@ -197,7 +197,7 @@ EOF if is_enabled CONFIG_MODULES; then cat <> debian/control -Package: $kernel_headers_packagename +Package: linux-headers-$version Architecture: $debarch Description: Linux kernel headers for $version on $debarch This package provides kernel header files for $version on $debarch @@ -209,7 +209,7 @@ fi if is_enabled CONFIG_DEBUG_INFO; then cat <> debian/control -Package: $dbg_packagename +Package: linux-image-$version-dbg Section: debug Architecture: $debarch Description: Linux kernel debugging symbols for $version -- cgit v1.2.3 From d1889589a4f54b2d1d7075d608b596d6fcfd3d96 Mon Sep 17 00:00:00 2001 From: Sven Joachim Date: Mon, 26 Oct 2020 20:32:16 +0100 Subject: builddeb: Fix rootless build in setuid/setgid directory Building 5.10-rc1 in a setgid directory failed with the following error: dpkg-deb: error: control directory has bad permissions 2755 (must be >=0755 and <=0775) When building with fakeroot, the earlier chown call would have removed the setgid bits, but in a rootless build they remain. Fixes: 3e8541803624 ("builddeb: Enable rootless builds") Cc: Guillem Jover Signed-off-by: Sven Joachim Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 1b11f8993629..91a502bb97e8 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -45,6 +45,8 @@ create_package() { chmod -R go-w "$pdir" # in case we are in a restrictive umask environment like 0077 chmod -R a+rX "$pdir" + # in case we build in a setuid/setgid directory + chmod -R ug-s "$pdir" # Create the package dpkg-gencontrol -p$pname -P"$pdir" -- cgit v1.2.3