From 9945722afdc3443eab826b2da1122509a13a50a5 Mon Sep 17 00:00:00 2001 From: Michał Mirosław Date: Sat, 4 Jan 2020 10:55:56 +0100 Subject: builddeb: make headers package thinner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove a bunch of files not used during external module builds: - foreign architecture headers - subtree Makefiles - Kconfig files - perl scripts On amd64 system this looses a third of the resulting .deb size. Signed-off-by: Michał Mirosław Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index c4c580f547ef..b60388051c7f 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -165,8 +165,8 @@ EOF done # 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 -o -type l) >> "$objtree/debian/hdrsrcfiles" +(cd $srctree; find . arch/$SRCARCH -maxdepth 1 -name Makefile\*) > "$objtree/debian/hdrsrcfiles" +(cd $srctree; find include scripts -type f -o -type l) >> "$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 is_enabled CONFIG_STACK_VALIDATION; then -- cgit v1.2.3 From 1a7f0a34ea7d05d1ffcd32c9b1b4e07ac0687538 Mon Sep 17 00:00:00 2001 From: Michał Mirosław Date: Tue, 14 Jan 2020 19:11:26 +0100 Subject: builddeb: allow selection of .deb compressor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Select deb compression using KDEB_COMPRESS make variable. This allows to use gzip compression for local or test builds, and that's way faster than now-default xz compression. Signed-off-by: Michał Mirosław 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 b60388051c7f..f903ba947daf 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -43,7 +43,7 @@ create_package() { # Create the package dpkg-gencontrol -p$pname -P"$pdir" - dpkg --build "$pdir" .. + dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. } version=$KERNELRELEASE -- cgit v1.2.3 From 7e61b167eb29f949f74a465aa135c69fac3d1c8f Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:29 +0900 Subject: builddeb: remove unneeded files in hdrobjfiles for headers package - We do not need tools/objtool/fixdep or tools/objtool/sync-check.sh for building external modules. Including tools/objtool/objtool is enough. - gcc-common.h is a check-in file. I do not see any point to search for it in objtree. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index f903ba947daf..d4bb28fbd3de 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -170,11 +170,11 @@ done (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 is_enabled CONFIG_STACK_VALIDATION; then - (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" + echo tools/objtool/objtool >> "$objtree/debian/hdrobjfiles" fi (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" if is_enabled CONFIG_GCC_PLUGINS; then - (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" + (cd $objtree; find scripts/gcc-plugins -name \*.so) >> "$objtree/debian/hdrobjfiles" fi destdir=$kernel_headers_dir/usr/src/linux-headers-$version mkdir -p "$destdir" -- cgit v1.2.3 From 1694e94e4f4698b7fdd37e6700ca6c5b7e01d25a Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:30 +0900 Subject: builddeb: match temporary directory name to the package name The temporary directory names, debian/hdrtmp (linux-headers package) vs debian/headertmp (linux-libc-dev package), are confusing. Matching the directory name to the package name is clearer, IMHO. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index d4bb28fbd3de..d72267835373 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -47,10 +47,10 @@ create_package() { } version=$KERNELRELEASE -tmpdir="$objtree/debian/tmp" -kernel_headers_dir="$objtree/debian/hdrtmp" -libc_headers_dir="$objtree/debian/headertmp" -dbg_dir="$objtree/debian/dbgtmp" +tmpdir="$objtree/debian/linux-image" +kernel_headers_dir="$objtree/debian/linux-headers" +libc_headers_dir="$objtree/debian/linux-libc-dev" +dbg_dir="$objtree/debian/linux-image-dbg" packagename=linux-image-$version kernel_headers_packagename=linux-headers-$version libc_headers_packagename=linux-libc-dev -- cgit v1.2.3 From f9a4711ebb248ad37c830b2715342ec60edb1330 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:31 +0900 Subject: builddeb: remove redundant $objtree/ This script works only when it is invoked in the $objtree, that is, it is already relying on $objtree is '.' Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index d72267835373..15a76817e4ac 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -47,10 +47,10 @@ create_package() { } version=$KERNELRELEASE -tmpdir="$objtree/debian/linux-image" -kernel_headers_dir="$objtree/debian/linux-headers" -libc_headers_dir="$objtree/debian/linux-libc-dev" -dbg_dir="$objtree/debian/linux-image-dbg" +tmpdir=debian/linux-image +kernel_headers_dir=debian/linux-headers +libc_headers_dir=debian/linux-libc-dev +dbg_dir=debian/linux-image-dbg packagename=linux-image-$version kernel_headers_packagename=linux-headers-$version libc_headers_packagename=linux-libc-dev @@ -77,7 +77,7 @@ esac BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) # Setup the directory structure -rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files +rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" debian/files mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -p "$tmpdir/lib" "$tmpdir/boot" mkdir -p "$kernel_headers_dir/lib/modules/$version/" @@ -165,24 +165,24 @@ EOF done # Build kernel header package -(cd $srctree; find . arch/$SRCARCH -maxdepth 1 -name Makefile\*) > "$objtree/debian/hdrsrcfiles" -(cd $srctree; find include scripts -type f -o -type l) >> "$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" +(cd $srctree; find . arch/$SRCARCH -maxdepth 1 -name Makefile\*) > debian/hdrsrcfiles +(cd $srctree; find include scripts -type f -o -type l) >> debian/hdrsrcfiles +(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> debian/hdrsrcfiles +(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> debian/hdrsrcfiles if is_enabled CONFIG_STACK_VALIDATION; then - echo tools/objtool/objtool >> "$objtree/debian/hdrobjfiles" + echo tools/objtool/objtool >> debian/hdrobjfiles fi -(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" +find arch/$SRCARCH/include Module.symvers include scripts -type f >> debian/hdrobjfiles if is_enabled CONFIG_GCC_PLUGINS; then - (cd $objtree; find scripts/gcc-plugins -name \*.so) >> "$objtree/debian/hdrobjfiles" + find scripts/gcc-plugins -name \*.so >> 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 +(cd $srctree; tar -c -f - -T -) < debian/hdrsrcfiles | (cd $destdir; tar -xf -) +tar -c -f - -T - < debian/hdrobjfiles | (cd $destdir; tar -xf -) +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" +rm -f debian/hdrsrcfiles debian/hdrobjfiles if [ "$ARCH" != "um" ]; then create_package "$kernel_headers_packagename" "$kernel_headers_dir" -- cgit v1.2.3 From 9a92eee38790c63b45b32876cb1967154f8b9ee5 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:32 +0900 Subject: builddeb: avoid invoking sub-shells where possible The commands surrounded by ( ... ) is run in a sub-shell, but you do not have to spawn a sub-shell for every single line. Use just one ( ... ) for creating debian/hdrsrcfiles. For tar, use -C option instead. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 15a76817e4ac..a73e0d5377e9 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -165,21 +165,30 @@ EOF done # Build kernel header package -(cd $srctree; find . arch/$SRCARCH -maxdepth 1 -name Makefile\*) > debian/hdrsrcfiles -(cd $srctree; find include scripts -type f -o -type l) >> debian/hdrsrcfiles -(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> debian/hdrsrcfiles -(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> debian/hdrsrcfiles -if is_enabled CONFIG_STACK_VALIDATION; then - echo tools/objtool/objtool >> debian/hdrobjfiles -fi -find arch/$SRCARCH/include Module.symvers include scripts -type f >> debian/hdrobjfiles -if is_enabled CONFIG_GCC_PLUGINS; then - find scripts/gcc-plugins -name \*.so >> debian/hdrobjfiles -fi +( + 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 $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f +) > debian/hdrsrcfiles + +{ + if is_enabled CONFIG_STACK_VALIDATION; then + echo tools/objtool/objtool + fi + + find arch/$SRCARCH/include Module.symvers include scripts -type f + + if is_enabled CONFIG_GCC_PLUGINS; then + find scripts/gcc-plugins -name \*.so + fi +} > debian/hdrobjfiles + destdir=$kernel_headers_dir/usr/src/linux-headers-$version mkdir -p "$destdir" -(cd $srctree; tar -c -f - -T -) < debian/hdrsrcfiles | (cd $destdir; tar -xf -) -tar -c -f - -T - < debian/hdrobjfiles | (cd $destdir; tar -xf -) +tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir +tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir 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 debian/hdrsrcfiles debian/hdrobjfiles -- cgit v1.2.3 From aae6a6712440d566ae148fc3af223dc25fbd9794 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:33 +0900 Subject: builddeb: remove redundant make for ARCH=um The kernel build has already been done before builddeb is invoked. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index a73e0d5377e9..731b5d0b2422 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -82,10 +82,9 @@ mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -p "$tmpdir/lib" "$tmpdir/boot" mkdir -p "$kernel_headers_dir/lib/modules/$version/" -# Build and install the kernel +# Install the kernel if [ "$ARCH" = "um" ] ; then mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" - $MAKE linux cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" gzip "$tmpdir/usr/share/doc/$packagename/config" -- cgit v1.2.3 From 3126c17d28b696ba555bb959888fe4b5143bb389 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:34 +0900 Subject: builddeb: split kernel headers deployment out into a function Deploy kernel headers (linux-headers package) in a separate function for readability. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 76 ++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 34 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index 731b5d0b2422..c9287e57d398 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -46,13 +46,49 @@ create_package() { dpkg-deb ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. } +deploy_kernel_headers () { + pdir=$1 + + rm -rf $pdir + + ( + 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 $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f + ) > debian/hdrsrcfiles + + { + if is_enabled CONFIG_STACK_VALIDATION; then + echo tools/objtool/objtool + fi + + find arch/$SRCARCH/include Module.symvers include scripts -type f + + if is_enabled CONFIG_GCC_PLUGINS; then + find scripts/gcc-plugins -name \*.so + fi + } > debian/hdrobjfiles + + destdir=$pdir/usr/src/linux-headers-$version + mkdir -p $destdir + tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir + tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir + rm -f debian/hdrsrcfiles debian/hdrobjfiles + + # copy .config manually to be where it's expected to be + cp $KCONFIG_CONFIG $destdir/.config + + mkdir -p $pdir/lib/modules/$version/ + ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build +} + version=$KERNELRELEASE tmpdir=debian/linux-image -kernel_headers_dir=debian/linux-headers libc_headers_dir=debian/linux-libc-dev dbg_dir=debian/linux-image-dbg packagename=linux-image-$version -kernel_headers_packagename=linux-headers-$version libc_headers_packagename=linux-libc-dev dbg_packagename=$packagename-dbg @@ -77,10 +113,9 @@ esac BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) # Setup the directory structure -rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" debian/files +rm -rf "$tmpdir" "$libc_headers_dir" "$dbg_dir" debian/files mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -p "$tmpdir/lib" "$tmpdir/boot" -mkdir -p "$kernel_headers_dir/lib/modules/$version/" # Install the kernel if [ "$ARCH" = "um" ] ; then @@ -163,37 +198,10 @@ EOF chmod 755 "$tmpdir/DEBIAN/$script" done -# Build kernel header package -( - 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 $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f -) > debian/hdrsrcfiles - -{ - if is_enabled CONFIG_STACK_VALIDATION; then - echo tools/objtool/objtool - fi - - find arch/$SRCARCH/include Module.symvers include scripts -type f - - if is_enabled CONFIG_GCC_PLUGINS; then - find scripts/gcc-plugins -name \*.so - fi -} > debian/hdrobjfiles - -destdir=$kernel_headers_dir/usr/src/linux-headers-$version -mkdir -p "$destdir" -tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir -tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir -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 debian/hdrsrcfiles debian/hdrobjfiles - if [ "$ARCH" != "um" ]; then - create_package "$kernel_headers_packagename" "$kernel_headers_dir" + deploy_kernel_headers debian/linux-headers + create_package linux-headers-$version debian/linux-headers + create_package "$libc_headers_packagename" "$libc_headers_dir" fi -- cgit v1.2.3 From 451dff37f0752cc8ad6f1bb82081a98d7b760310 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Sat, 25 Jan 2020 13:12:35 +0900 Subject: builddeb: split libc headers deployment out into a function Deploy user-space headers (linux-libc-dev package) in a separate function for readability. Signed-off-by: Masahiro Yamada --- scripts/package/builddeb | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'scripts/package') diff --git a/scripts/package/builddeb b/scripts/package/builddeb index c9287e57d398..6df3c9f8b2da 100755 --- a/scripts/package/builddeb +++ b/scripts/package/builddeb @@ -84,12 +84,25 @@ deploy_kernel_headers () { ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build } +deploy_libc_headers () { + pdir=$1 + + rm -rf $pdir + + $MAKE -f $srctree/Makefile headers + $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr + + # move asm headers to /usr/include//asm to match the structure + # used by Debian-based distros (to support multi-arch) + host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) + mkdir $pdir/usr/include/$host_arch + mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ +} + version=$KERNELRELEASE tmpdir=debian/linux-image -libc_headers_dir=debian/linux-libc-dev dbg_dir=debian/linux-image-dbg packagename=linux-image-$version -libc_headers_packagename=linux-libc-dev dbg_packagename=$packagename-dbg if [ "$ARCH" = "um" ] ; then @@ -113,7 +126,7 @@ esac BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) # Setup the directory structure -rm -rf "$tmpdir" "$libc_headers_dir" "$dbg_dir" debian/files +rm -rf "$tmpdir" "$dbg_dir" debian/files mkdir -m 755 -p "$tmpdir/DEBIAN" mkdir -p "$tmpdir/lib" "$tmpdir/boot" @@ -163,16 +176,6 @@ if is_enabled CONFIG_MODULES; then fi fi -if [ "$ARCH" != "um" ]; then - $MAKE -f $srctree/Makefile headers - $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr" - # move asm headers to /usr/include//asm to match the structure - # used by Debian-based distros (to support multi-arch) - host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) - mkdir $libc_headers_dir/usr/include/$host_arch - mv $libc_headers_dir/usr/include/asm $libc_headers_dir/usr/include/$host_arch/ -fi - # Install the maintainer scripts # Note: hook scripts under /etc/kernel are also executed by official Debian # kernel packages, as well as kernel packages built using make-kpkg. @@ -202,7 +205,8 @@ if [ "$ARCH" != "um" ]; then deploy_kernel_headers debian/linux-headers create_package linux-headers-$version debian/linux-headers - create_package "$libc_headers_packagename" "$libc_headers_dir" + deploy_libc_headers debian/linux-libc-dev + create_package linux-libc-dev debian/linux-libc-dev fi create_package "$packagename" "$tmpdir" -- cgit v1.2.3