Skip to content

Commit d6cf804

Browse files
committed
packaging: sync builddeb changes
Signed-off-by: Robert Nelson <[email protected]>
1 parent 449c4ef commit d6cf804

File tree

1 file changed

+98
-29
lines changed

1 file changed

+98
-29
lines changed

scripts/package/builddeb

Lines changed: 98 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ set -e
1515
create_package() {
1616
local pname="$1" pdir="$2"
1717

18+
mkdir -m 755 -p "$pdir/DEBIAN"
19+
mkdir -p "$pdir/usr/share/doc/$pname"
1820
cp debian/copyright "$pdir/usr/share/doc/$pname/"
1921
cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
2022
gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
@@ -24,9 +26,16 @@ create_package() {
2426
# Fix ownership and permissions
2527
chown -R root:root "$pdir"
2628
chmod -R go-w "$pdir"
29+
# in case we are in a restrictive umask environment like 0077
30+
chmod -R a+rX "$pdir"
2731

32+
# Create the package
33+
dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch}" -p$pname -P"$pdir"
34+
dpkg --build "$pdir" ..
35+
}
36+
37+
set_debarch() {
2838
# Attempt to find the correct Debian architecture
29-
local forcearch="" debarch=""
3039
case "$UTS_MACHINE" in
3140
i386|ia64|alpha)
3241
debarch="$UTS_MACHINE" ;;
@@ -42,11 +51,21 @@ create_package() {
4251
debarch=hppa ;;
4352
mips*)
4453
debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;;
45-
arm64)
54+
aarch64|arm64)
4655
debarch=arm64 ;;
4756
arm*)
48-
debarch=arm$(grep -q CONFIG_AEABI=y $KCONFIG_CONFIG && echo el || true) ;;
57+
if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then
58+
if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then
59+
debarch=armhf
60+
else
61+
debarch=armel
62+
fi
63+
else
64+
debarch=arm
65+
fi
66+
;;
4967
*)
68+
debarch=$(dpkg --print-architecture)
5069
echo "" >&2
5170
echo "** ** ** WARNING ** ** **" >&2
5271
echo "" >&2
@@ -59,13 +78,8 @@ create_package() {
5978
if [ -n "$KBUILD_DEBARCH" ] ; then
6079
debarch="$KBUILD_DEBARCH"
6180
fi
62-
if [ -n "$debarch" ] ; then
63-
forcearch="-DArchitecture=$debarch"
64-
fi
81+
forcearch="-DArchitecture=$debarch"
6582

66-
# Create the package
67-
dpkg-gencontrol $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir"
68-
dpkg --build "$pdir" ..
6983
}
7084

7185
# Some variables and settings used throughout the script
@@ -76,6 +90,7 @@ if [ -n "$KDEB_PKGVERSION" ]; then
7690
else
7791
packageversion=$version-$revision
7892
fi
93+
sourcename=$KDEB_SOURCENAME
7994
tmpdir="$objtree/debian/tmp"
8095
fwdir="$objtree/debian/fwtmp"
8196
kernel_headers_dir="$objtree/debian/hdrtmp"
@@ -86,6 +101,9 @@ fwpackagename=linux-firmware-image-$version
86101
kernel_headers_packagename=linux-headers-$version
87102
libc_headers_packagename=linux-libc-dev
88103
dbg_packagename=$packagename-dbg
104+
debarch=
105+
forcearch=
106+
set_debarch
89107

90108
if [ "$ARCH" = "um" ] ; then
91109
packagename=user-mode-linux-$version
@@ -108,26 +126,15 @@ esac
108126
BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)"
109127

110128
# Setup the directory structure
111-
rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir"
129+
rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files
112130
mkdir -m 755 -p "$tmpdir/DEBIAN"
113-
mkdir -p "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
114-
mkdir -m 755 -p "$fwdir/DEBIAN"
115-
mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename"
116-
mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
117-
mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
118-
mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
119-
mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
131+
mkdir -p "$tmpdir/lib" "$tmpdir/boot"
132+
mkdir -p "$fwdir/lib/firmware/$version/"
120133
mkdir -p "$kernel_headers_dir/lib/modules/$version/"
121-
if [ "$ARCH" = "um" ] ; then
122-
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
123-
fi
124-
if [ -n "$BUILD_DEBUG" ] ; then
125-
mkdir -p "$dbg_dir/usr/share/doc/$dbg_packagename"
126-
mkdir -m 755 -p "$dbg_dir/DEBIAN"
127-
fi
128134

129135
# Build and install the kernel
130136
if [ "$ARCH" = "um" ] ; then
137+
mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
131138
$MAKE linux
132139
cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
133140
cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
@@ -143,6 +150,22 @@ else
143150
cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/$installed_image_path"
144151
fi
145152

153+
if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then
154+
mkdir -p "$tmpdir/boot/dtbs/$version"
155+
# Only some architectures with OF support have this target
156+
if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then
157+
$MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/boot/dtbs/$version" dtbs_install
158+
else
159+
$MAKE KBUILD_SRC= dtbs
160+
find arch/arm/boot/ -iname "*.dtb" -exec cp -v '{}' "$tmpdir/boot/dtbs/$version" \;
161+
fi
162+
163+
#make dtbs_install seems to add an .old directory
164+
if [ -d "$tmpdir/boot/dtbs/$version.old" ] ; then
165+
rm -rf "$tmpdir/boot/dtbs/$version.old"
166+
fi
167+
fi
168+
146169
if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
147170
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
148171
rm -f "$tmpdir/lib/modules/$version/build"
@@ -162,6 +185,12 @@ if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then
162185
# then add a link to those
163186
$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
164187
done
188+
189+
# resign stripped modules
190+
MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)"
191+
if [ -n "$MODULE_SIG_ALL" ]; then
192+
INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign
193+
fi
165194
fi
166195
fi
167196

@@ -206,7 +235,7 @@ if [ -n "$DEBEMAIL" ]; then
206235
elif [ -n "$EMAIL" ]; then
207236
email=$EMAIL
208237
else
209-
email=$(id -nu)@$(hostname -f)
238+
email=$(id -nu)@$(hostname -f 2>/dev/null || hostname)
210239
fi
211240
if [ -n "$DEBFULLNAME" ]; then
212241
name=$DEBFULLNAME
@@ -220,7 +249,8 @@ maintainer="$name <$email>"
220249
# Try to determine distribution
221250
if [ -n "$KDEB_CHANGELOG_DIST" ]; then
222251
distribution=$KDEB_CHANGELOG_DIST
223-
elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ]; then
252+
# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
253+
elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
224254
: # nothing to do in this case
225255
else
226256
distribution="unstable"
@@ -230,7 +260,7 @@ fi
230260

231261
# Generate a simple changelog template
232262
cat <<EOF > debian/changelog
233-
linux-upstream ($packageversion) $distribution; urgency=low
263+
$sourcename ($packageversion) $distribution; urgency=low
234264
235265
* Custom built Linux kernel.
236266
@@ -257,12 +287,16 @@ On Debian GNU/Linux systems, the complete text of the GNU General Public
257287
License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
258288
EOF
259289

290+
291+
build_depends="bc, kmod, cpio "
292+
260293
# Generate a control file
261294
cat <<EOF > debian/control
262-
Source: linux-upstream
295+
Source: $sourcename
263296
Section: kernel
264297
Priority: optional
265298
Maintainer: $maintainer
299+
Build-Depends: $build_depends
266300
Standards-Version: 3.8.4
267301
Homepage: http://www.kernel.org/
268302
EOF
@@ -300,10 +334,16 @@ fi
300334

301335
# Build kernel header package
302336
(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles"
303-
(cd $srctree; find arch/$SRCARCH/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
337+
(cd $srctree; find arch/*/include include scripts -type f) >> "$objtree/debian/hdrsrcfiles"
304338
(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles"
305339
(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles"
340+
if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then
341+
(cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles"
342+
fi
306343
(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles"
344+
if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then
345+
(cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles"
346+
fi
307347
destdir=$kernel_headers_dir/usr/src/linux-headers-$version
308348
mkdir -p "$destdir"
309349
(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
@@ -383,4 +423,33 @@ EOF
383423
create_package "$dbg_packagename" "$dbg_dir"
384424
fi
385425

426+
if [ "x$1" = "xdeb-pkg" ]
427+
then
428+
cat <<EOF > debian/rules
429+
#!/usr/bin/make -f
430+
431+
build:
432+
\$(MAKE)
433+
434+
binary-arch:
435+
\$(MAKE) KDEB_SOURCENAME=${sourcename} KDEB_PKGVERSION=${packageversion} bindeb-pkg
436+
437+
clean:
438+
rm -rf debian/*tmp debian/files
439+
mv debian/ debian.backup # debian/ might be cleaned away
440+
\$(MAKE) clean
441+
mv debian.backup debian
442+
443+
binary: binary-arch
444+
EOF
445+
mv ${sourcename}.tar.gz ../${sourcename}_${version}.orig.tar.gz
446+
tar caf ../${sourcename}_${packageversion}.debian.tar.gz debian/{copyright,rules,changelog,control}
447+
dpkg-source -cdebian/control -ldebian/changelog --format="3.0 (custom)" --target-format="3.0 (quilt)" \
448+
-b / ../${sourcename}_${version}.orig.tar.gz ../${sourcename}_${packageversion}.debian.tar.gz
449+
mv ${sourcename}_${packageversion}*dsc ..
450+
dpkg-genchanges > ../${sourcename}_${packageversion}_${debarch}.changes
451+
else
452+
dpkg-genchanges -b > ../${sourcename}_${packageversion}_${debarch}.changes
453+
fi
454+
386455
exit 0

0 commit comments

Comments
 (0)