Re: [PATCH RESEND 2/2] builddeb: allow building without headers/firmware packages
From: Jim Davis
Date: Wed Nov 16 2016 - 11:31:50 EST
On Sun, Nov 13, 2016 at 7:47 PM, Andrew Donnellan
<andrew.donnellan@xxxxxxxxxxx> wrote:
> Currently, the deb-pkg and bindeb-pkg targets create multiple packages for
> the kernel binaries, headers, userspace headers and firmware.
>
> For developers who generate Debian packages as part of their development
> workflows, it's often not necessary to generate all these packages.
>
> Allow the creation of the linux-headers, linux-libc-dev and linux-firmware
> packages to be disabled if the environment variables KDEB_NO_HEADERS,
> KDEB_NO_LIBC_HEADERS or KDEB_NO_FIRMWARE are non-empty.
>
> Signed-off-by: Andrew Donnellan <andrew.donnellan@xxxxxxxxxxx>
> ---
> Documentation/kbuild/kbuild.txt | 7 +++++
> scripts/package/builddeb | 67 ++++++++++++++++++++++++-----------------
> 2 files changed, 46 insertions(+), 28 deletions(-)
>
> diff --git a/Documentation/kbuild/kbuild.txt b/Documentation/kbuild/kbuild.txt
> index 0ff6a46..cef4f7f 100644
> --- a/Documentation/kbuild/kbuild.txt
> +++ b/Documentation/kbuild/kbuild.txt
> @@ -238,3 +238,10 @@ KBUILD_VMLINUX_MAIN
> All object files for the main part of vmlinux.
> KBUILD_VMLINUX_INIT and KBUILD_VMLINUX_MAIN together specify
> all the object files used to link vmlinux.
> +
> +KDEB_NO_HEADERS, KDEB_NO_LIBC_HEADERS, KDEB_NO_FIRMWARE
> +-------------------------------------------------------
> +If these variables are set, the deb-pkg and bindeb-pkg targets won't create
> +linux-headers, linux-libc-dev and linux-firmware packages respectively. This
> +may be useful for developers who use the deb-pkg targets in their workflow
> +but don't need the full set of packages.
> diff --git a/scripts/package/builddeb b/scripts/package/builddeb
> index d600fd0..da595da 100755
> --- a/scripts/package/builddeb
> +++ b/scripts/package/builddeb
> @@ -187,7 +187,9 @@ fi
>
> if [ "$ARCH" != "um" ]; then
> $MAKE headers_check KBUILD_SRC=
> - $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
> + if [ -z "$KDEB_NO_LIBC_HEADERS" ]; then
> + $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
> + fi
> fi
>
> # Install the maintainer scripts
> @@ -324,26 +326,27 @@ EOF
> fi
>
> # Build kernel header package
> -(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
> -(cd $srctree; find arch/*/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
> -(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
> -(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
> -if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then
> - (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles"
> -fi
> -(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
> -if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then
> - (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles"
> -fi
> -destdir=$kernel_headers_dir/usr/src/linux-headers-$version
> -mkdir -p "$destdir"
> -(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
> -(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
> -(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
> -ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
> -rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
> +if [ -z "$KDEB_NO_HEADERS" ]; then
> + (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
> + (cd $srctree; find arch/*/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
> + (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
> + (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
> + if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then
> + (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles"
> + fi
> + (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
> + if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then
> + (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles"
> + fi
> + destdir=$kernel_headers_dir/usr/src/linux-headers-$version
> + mkdir -p "$destdir"
> + (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
> + (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -)
> + (cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be
> + ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
> + rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
>
> -cat <<EOF >> debian/control
> + cat <<EOF >> debian/control
>
> Package: $kernel_headers_packagename
> Provides: linux-headers, linux-headers-2.6
> @@ -353,13 +356,13 @@ Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch}
> .
> This is useful for people who need to build external modules
> EOF
> +fi
>
> # Do we have firmware? Move it out of the way and build it into a package.
> if [ -e "$tmpdir/lib/firmware" ]; then
> - mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
> - rmdir "$tmpdir/lib/firmware"
> -
> - cat <<EOF >> debian/control
> + if [ -z "$KDEB_NO_FIRMWARE" ]; then
> + mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
> + cat <<EOF >> debian/control
>
> Package: $fwpackagename
> Architecture: all
> @@ -367,10 +370,13 @@ Description: Linux kernel firmware, version $version
> This package contains firmware from the Linux kernel, version $version.
> EOF
>
> - create_package "$fwpackagename" "$fwdir"
> + create_package "$fwpackagename" "$fwdir"
> + fi
> + rm -r "$tmpdir/lib/firmware"
> fi
>
> -cat <<EOF >> debian/control
> +if [ -z "$KDEB_NO_LIBC_HEADERS" ]; then
> + cat <<EOF >> debian/control
>
> Package: $libc_headers_packagename
> Section: devel
> @@ -380,10 +386,15 @@ Description: Linux support headers for userspace development
> This package provides userspaces headers from the Linux kernel. These headers
> are used by the installed headers for GNU glibc and other system libraries.
> EOF
> +fi
>
> if [ "$ARCH" != "um" ]; then
> - create_package "$kernel_headers_packagename" "$kernel_headers_dir"
> - create_package "$libc_headers_packagename" "$libc_headers_dir"
> + if [ -z "$KDEB_NO_HEADERS" ]; then
> + create_package "$kernel_headers_packagename" "$kernel_headers_dir"
> + fi
> + if [ -z "$KDEB_NO_LIBC_HEADERS" ]; then
> + create_package "$libc_headers_packagename" "$libc_headers_dir"
> + fi
> fi
>
> create_package "$packagename" "$tmpdir"
> --
> Andrew Donnellan OzLabs, ADL Canberra
> andrew.donnellan@xxxxxxxxxxx IBM Australia Limited
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Worked fine with Ubuntu 16.04, and it's nice speedup.
Tested-by: Jim Davis <jim.epost@xxxxxxxxx>
--
Jim