2013-03-22 10:14:56

by Anisse Astier

[permalink] [raw]
Subject: [PATCH 1/2] deb-pkg: split debug symbols in their own package

This can reduce almost 3 times the size of the linux-image package,
while keeping the debug symbols available for this particular build, in
their own package.

This mimics the way kernels are built in debian, ubuntu, or with
make-kpkg, and comes at the price of a small slowdown in the building of
packages.

Signed-off-by: Anisse Astier <[email protected]>
---
scripts/package/builddeb | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index acb8650..7f7a7fd 100644
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -78,17 +78,19 @@ tmpdir="$objtree/debian/tmp"
fwdir="$objtree/debian/fwtmp"
kernel_headers_dir="$objtree/debian/hdrtmp"
libc_headers_dir="$objtree/debian/headertmp"
+dbg_dir="$objtree/debian/dbgtmp"
packagename=linux-image-$version
fwpackagename=linux-firmware-image
kernel_headers_packagename=linux-headers-$version
libc_headers_packagename=linux-libc-dev
+dbg_packagename=$packagename-dbg

if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version
fi

# Setup the directory structure
-rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
mkdir -m 755 -p "$fwdir/DEBIAN"
@@ -98,6 +100,8 @@ mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
+mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
+mkdir -m 755 -p "$dbg_dir/DEBIAN"
if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
fi
@@ -128,8 +132,24 @@ if grep -q '^CONFIG_MODULES=y' .config ; then
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
rmdir "$tmpdir/lib/modules/$version"
fi
+ # Build debug package
+ (
+ cd $tmpdir
+ for module in $(find lib/modules/ -name *.ko); do
+ mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
+ # only keep debug symbols in the debug file
+ objcopy --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
+ # strip original module from debug symbols
+ objcopy --strip-debug $module
+ # then add a link to those
+ objcopy --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
+ done
+ )
fi

+mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
+cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
+
if [ "$ARCH" != "um" ]; then
$MAKE headers_check KBUILD_SRC=
$MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
@@ -297,6 +317,17 @@ if [ "$ARCH" != "um" ]; then
create_package "$libc_headers_packagename" "$libc_headers_dir"
fi

+cat <<EOF >> debian/control
+
+Package: $dbg_packagename
+Section: devel
+Provides: linux-debug, linux-debug-$version
+Architecture: any
+Description: Linux kernel debugging symbols for $version
+ This package will come in handy if you need to debug the kernel.
+EOF
+
+create_package "$dbg_packagename" "$dbg_dir"
create_package "$packagename" "$tmpdir"

exit 0
--
1.8.1.4


2013-03-22 10:21:44

by Anisse Astier

[permalink] [raw]
Subject: [PATCH 2/2] deb-pkg: add a hook argument to match debian hooks parameters

This should allow the package to better integrate with debian hooks, and
should not be too disruptive of hooks supporting only one parameter.

Signed-off-by: Anisse Astier <[email protected]>
---
scripts/package/builddeb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 7f7a7fd..30d8756 100644
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -169,7 +169,7 @@ set -e
# Pass maintainer script parameters to hook scripts
export DEB_MAINT_PARAMS="\$*"

-test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
+test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/boot/vmlinuz-$version" $debhookdir/$script.d
exit 0
EOF
chmod 755 "$tmpdir/DEBIAN/$script"
--
1.8.1.4

2013-04-04 08:04:56

by Anisse Astier

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

Any comments ?

Anisse

On Fri, 22 Mar 2013 11:06:00 +0100, Anisse Astier <[email protected]> wrote :

> This can reduce almost 3 times the size of the linux-image package,
> while keeping the debug symbols available for this particular build, in
> their own package.
>
> This mimics the way kernels are built in debian, ubuntu, or with
> make-kpkg, and comes at the price of a small slowdown in the building of
> packages.
>
> Signed-off-by: Anisse Astier <[email protected]>
> ---
> scripts/package/builddeb | 33 ++++++++++++++++++++++++++++++++-
> 1 file changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/package/builddeb b/scripts/package/builddeb
> index acb8650..7f7a7fd 100644
> --- a/scripts/package/builddeb
> +++ b/scripts/package/builddeb
> @@ -78,17 +78,19 @@ tmpdir="$objtree/debian/tmp"
> fwdir="$objtree/debian/fwtmp"
> kernel_headers_dir="$objtree/debian/hdrtmp"
> libc_headers_dir="$objtree/debian/headertmp"
> +dbg_dir="$objtree/debian/dbgtmp"
> packagename=linux-image-$version
> fwpackagename=linux-firmware-image
> kernel_headers_packagename=linux-headers-$version
> libc_headers_packagename=linux-libc-dev
> +dbg_packagename=$packagename-dbg
>
> if [ "$ARCH" = "um" ] ; then
> packagename=user-mode-linux-$version
> fi
>
> # Setup the directory structure
> -rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
> +rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
> mkdir -m 755 -p "$tmpdir/DEBIAN"
> mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
> mkdir -m 755 -p "$fwdir/DEBIAN"
> @@ -98,6 +100,8 @@ mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
> mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
> mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
> mkdir -p "$kernel_headers_dir/lib/modules/$version/"
> +mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
> +mkdir -m 755 -p "$dbg_dir/DEBIAN"
> if [ "$ARCH" = "um" ] ; then
> mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
> fi
> @@ -128,8 +132,24 @@ if grep -q '^CONFIG_MODULES=y' .config ; then
> mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
> rmdir "$tmpdir/lib/modules/$version"
> fi
> + # Build debug package
> + (
> + cd $tmpdir
> + for module in $(find lib/modules/ -name *.ko); do
> + mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
> + # only keep debug symbols in the debug file
> + objcopy --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
> + # strip original module from debug symbols
> + objcopy --strip-debug $module
> + # then add a link to those
> + objcopy --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
> + done
> + )
> fi
>
> +mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
> +cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
> +
> if [ "$ARCH" != "um" ]; then
> $MAKE headers_check KBUILD_SRC=
> $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
> @@ -297,6 +317,17 @@ if [ "$ARCH" != "um" ]; then
> create_package "$libc_headers_packagename" "$libc_headers_dir"
> fi
>
> +cat <<EOF >> debian/control
> +
> +Package: $dbg_packagename
> +Section: devel
> +Provides: linux-debug, linux-debug-$version
> +Architecture: any
> +Description: Linux kernel debugging symbols for $version
> + This package will come in handy if you need to debug the kernel.
> +EOF
> +
> +create_package "$dbg_packagename" "$dbg_dir"
> create_package "$packagename" "$tmpdir"
>
> exit 0

2013-04-08 10:29:22

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

On 22.3.2013 11:06, Anisse Astier wrote:
> This can reduce almost 3 times the size of the linux-image package,
> while keeping the debug symbols available for this particular build, in
> their own package.
>
> This mimics the way kernels are built in debian, ubuntu, or with
> make-kpkg, and comes at the price of a small slowdown in the building of
> packages.

Shouldn't the debug subpackage only be created if CONFIG_DEBUG_INFO=y?

Thanks,
Michal

2013-04-08 17:07:22

by Anisse Astier

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

On Mon, 08 Apr 2013 12:29:19 +0200, Michal Marek <[email protected]> wrote :

> On 22.3.2013 11:06, Anisse Astier wrote:
> > This can reduce almost 3 times the size of the linux-image package,
> > while keeping the debug symbols available for this particular build, in
> > their own package.
> >
> > This mimics the way kernels are built in debian, ubuntu, or with
> > make-kpkg, and comes at the price of a small slowdown in the building of
> > packages.
>
> Shouldn't the debug subpackage only be created if CONFIG_DEBUG_INFO=y?
>

Indeed. V2 below.

>From f1720076261a35ff82f2635979d15e5ec572356c Mon Sep 17 00:00:00 2001
From: Anisse Astier <[email protected]>
Date: Thu, 21 Mar 2013 14:01:25 +0100
Subject: [PATCH v2] deb-pkg: split debug symbols in their own package

This can reduce almost 3 times the size of the linux-image package,
while keeping the debug symbols available for this particular build, in
their own package.

This mimics the way kernels are built in debian, ubuntu, or with
make-kpkg, and comes at the price of a small slowdown in the building of
packages.

v2:
- only build when CONFIG_DEBUG_INFO=y
- build debug package last.
- more verbose package description
- put package in section debug

Signed-off-by: Anisse Astier <[email protected]>
---
scripts/package/builddeb | 46 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index acb8650..3e11ad2 100644
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -78,17 +78,21 @@ tmpdir="$objtree/debian/tmp"
fwdir="$objtree/debian/fwtmp"
kernel_headers_dir="$objtree/debian/hdrtmp"
libc_headers_dir="$objtree/debian/headertmp"
+dbg_dir="$objtree/debian/dbgtmp"
packagename=linux-image-$version
fwpackagename=linux-firmware-image
kernel_headers_packagename=linux-headers-$version
libc_headers_packagename=linux-libc-dev
+dbg_packagename=$packagename-dbg

if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version
fi

+BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' .config || true)"
+
# Setup the directory structure
-rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
mkdir -m 755 -p "$fwdir/DEBIAN"
@@ -101,6 +105,10 @@ mkdir -p "$kernel_headers_dir/lib/modules/$version/"
if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
fi
+if [ -n "$BUILD_DEBUG" ] ; then
+ mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
+ mkdir -m 755 -p "$dbg_dir/DEBIAN"
+fi

# Build and install the kernel
if [ "$ARCH" = "um" ] ; then
@@ -128,6 +136,20 @@ if grep -q '^CONFIG_MODULES=y' .config ; then
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
rmdir "$tmpdir/lib/modules/$version"
fi
+ if [ -n "$BUILD_DEBUG" ] ; then
+ (
+ cd $tmpdir
+ for module in $(find lib/modules/ -name *.ko); do
+ mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
+ # only keep debug symbols in the debug file
+ objcopy --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
+ # strip original module from debug symbols
+ objcopy --strip-debug $module
+ # then add a link to those
+ objcopy --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
+ done
+ )
+ fi
fi

if [ "$ARCH" != "um" ]; then
@@ -299,4 +321,26 @@ fi

create_package "$packagename" "$tmpdir"

+if [ -n "$BUILD_DEBUG" ] ; then
+ # Build debug package
+ mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
+ mkdir -m 755 -p "$dbg_dir/DEBIAN"
+
+ mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
+ cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
+
+ cat <<EOF >> debian/control
+
+Package: $dbg_packagename
+Section: debug
+Provides: linux-debug, linux-debug-$version
+Architecture: any
+Description: Linux kernel debugging symbols for $version
+ This package will come in handy if you need to debug the kernel. It provides
+ all the necessary debug symbols for the kernel and its modules.
+EOF
+
+ create_package "$dbg_packagename" "$dbg_dir"
+fi
+
exit 0
--
1.8.1.4

2013-04-09 10:06:15

by Anisse Astier

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package



From: Anisse Astier <[email protected]>
Subject: [PATCH v3] deb-pkg: split debug symbols in their own package

This can reduce almost 3 times the size of the linux-image package,
while keeping the debug symbols available for this particular build, in
their own package.

This mimics the way kernels are built in debian, ubuntu, or with
make-kpkg, and comes at the price of a small slowdown in the building of
packages.

v2:
- only build when CONFIG_DEBUG_INFO=y
- build debug package last.
- more verbose package description
- put package in section debug
v3:
- remove duplicate code from v2

Signed-off-by: Anisse Astier <[email protected]>
---

Sorry for the mixup, there were duplicate mkdir declaration due to moving
code around.


---
scripts/package/builddeb | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index acb8650..65ff0a4 100644
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -78,17 +78,21 @@ tmpdir="$objtree/debian/tmp"
fwdir="$objtree/debian/fwtmp"
kernel_headers_dir="$objtree/debian/hdrtmp"
libc_headers_dir="$objtree/debian/headertmp"
+dbg_dir="$objtree/debian/dbgtmp"
packagename=linux-image-$version
fwpackagename=linux-firmware-image
kernel_headers_packagename=linux-headers-$version
libc_headers_packagename=linux-libc-dev
+dbg_packagename=$packagename-dbg

if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version
fi

+BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' .config || true)"
+
# Setup the directory structure
-rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
+rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
mkdir -m 755 -p "$fwdir/DEBIAN"
@@ -101,6 +105,10 @@ mkdir -p "$kernel_headers_dir/lib/modules/$version/"
if [ "$ARCH" = "um" ] ; then
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
fi
+if [ -n "$BUILD_DEBUG" ] ; then
+ mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
+ mkdir -m 755 -p "$dbg_dir/DEBIAN"
+fi

# Build and install the kernel
if [ "$ARCH" = "um" ] ; then
@@ -128,6 +136,20 @@ if grep -q '^CONFIG_MODULES=y' .config ; then
mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
rmdir "$tmpdir/lib/modules/$version"
fi
+ if [ -n "$BUILD_DEBUG" ] ; then
+ (
+ cd $tmpdir
+ for module in $(find lib/modules/ -name *.ko); do
+ mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
+ # only keep debug symbols in the debug file
+ objcopy --only-keep-debug $module $dbg_dir/usr/lib/debug/$module
+ # strip original module from debug symbols
+ objcopy --strip-debug $module
+ # then add a link to those
+ objcopy --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $module
+ done
+ )
+ fi
fi

if [ "$ARCH" != "um" ]; then
@@ -299,4 +321,23 @@ fi

create_package "$packagename" "$tmpdir"

+if [ -n "$BUILD_DEBUG" ] ; then
+ # Build debug package
+ mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
+ cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
+
+ cat <<EOF >> debian/control
+
+Package: $dbg_packagename
+Section: debug
+Provides: linux-debug, linux-debug-$version
+Architecture: any
+Description: Linux kernel debugging symbols for $version
+ This package will come in handy if you need to debug the kernel. It provides
+ all the necessary debug symbols for the kernel and its modules.
+EOF
+
+ create_package "$dbg_packagename" "$dbg_dir"
+fi
+
exit 0
--
1.8.1.4

2013-04-19 08:05:41

by Anisse Astier

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

On Tue, 9 Apr 2013 12:05:47 +0200, Anisse Astier <[email protected]> wrote :

>
>
> From: Anisse Astier <[email protected]>
> Subject: [PATCH v3] deb-pkg: split debug symbols in their own package
>
> This can reduce almost 3 times the size of the linux-image package,
> while keeping the debug symbols available for this particular build, in
> their own package.
>
> This mimics the way kernels are built in debian, ubuntu, or with
> make-kpkg, and comes at the price of a small slowdown in the building of
> packages.
>
> v2:
> - only build when CONFIG_DEBUG_INFO=y
> - build debug package last.
> - more verbose package description
> - put package in section debug
> v3:
> - remove duplicate code from v2
>

What do you think ?

2013-05-03 15:08:58

by Anisse Astier

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

On Fri, 19 Apr 2013 10:05:19 +0200, Anisse Astier <[email protected]> wrote :

> On Tue, 9 Apr 2013 12:05:47 +0200, Anisse Astier <[email protected]> wrote :
>
> >
> >
> > From: Anisse Astier <[email protected]>
> > Subject: [PATCH v3] deb-pkg: split debug symbols in their own package
> >
> > This can reduce almost 3 times the size of the linux-image package,
> > while keeping the debug symbols available for this particular build, in
> > their own package.
> >
> > This mimics the way kernels are built in debian, ubuntu, or with
> > make-kpkg, and comes at the price of a small slowdown in the building of
> > packages.
> >
> > v2:
> > - only build when CONFIG_DEBUG_INFO=y
> > - build debug package last.
> > - more verbose package description
> > - put package in section debug
> > v3:
> > - remove duplicate code from v2
> >
>
> What do you think ?

Any update ?

2013-05-03 15:19:39

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH 1/2] deb-pkg: split debug symbols in their own package

On 3.5.2013 17:08, Anisse Astier wrote:
> On Fri, 19 Apr 2013 10:05:19 +0200, Anisse Astier <[email protected]> wrote :
>
>> On Tue, 9 Apr 2013 12:05:47 +0200, Anisse Astier <[email protected]> wrote :
>>
>>>
>>>
>>> From: Anisse Astier <[email protected]>
>>> Subject: [PATCH v3] deb-pkg: split debug symbols in their own package
>>>
>>> This can reduce almost 3 times the size of the linux-image package,
>>> while keeping the debug symbols available for this particular build, in
>>> their own package.
>>>
>>> This mimics the way kernels are built in debian, ubuntu, or with
>>> make-kpkg, and comes at the price of a small slowdown in the building of
>>> packages.
>>>
>>> v2:
>>> - only build when CONFIG_DEBUG_INFO=y
>>> - build debug package last.
>>> - more verbose package description
>>> - put package in section debug
>>> v3:
>>> - remove duplicate code from v2
>>>
>>
>> What do you think ?
>
> Any update ?

I don't know much about debian (kernel) packaging, so I'd like to hear
Max's opinion before merging this.

Michal