1515create_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
7690else
7791 packageversion=$version -$revision
7892fi
93+ sourcename=$KDEB_SOURCENAME
7994tmpdir=" $objtree /debian/tmp"
8095fwdir=" $objtree /debian/fwtmp"
8196kernel_headers_dir=" $objtree /debian/hdrtmp"
@@ -86,6 +101,9 @@ fwpackagename=linux-firmware-image-$version
86101kernel_headers_packagename=linux-headers-$version
87102libc_headers_packagename=linux-libc-dev
88103dbg_packagename=$packagename -dbg
104+ debarch=
105+ forcearch=
106+ set_debarch
89107
90108if [ " $ARCH " = " um" ] ; then
91109 packagename=user-mode-linux-$version
@@ -108,26 +126,15 @@ esac
108126BUILD_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
112130mkdir -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 /"
120133mkdir -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
130136if [ " $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 "
144151fi
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+
146169if 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
166195fi
167196
@@ -206,7 +235,7 @@ if [ -n "$DEBEMAIL" ]; then
206235elif [ -n " $EMAIL " ]; then
207236 email=$EMAIL
208237else
209- email=$( id -nu) @$( hostname -f)
238+ email=$( id -nu) @$( hostname -f 2> /dev/null || hostname )
210239fi
211240if [ -n " $DEBFULLNAME " ]; then
212241 name=$DEBFULLNAME
@@ -220,7 +249,8 @@ maintainer="$name <$email>"
220249# Try to determine distribution
221250if [ -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
225255else
226256 distribution=" unstable"
230260
231261# Generate a simple changelog template
232262cat << 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
257287License version 2 can be found in \` /usr/share/common-licenses/GPL-2'.
258288EOF
259289
290+
291+ build_depends=" bc, kmod, cpio "
292+
260293# Generate a control file
261294cat << EOF > debian/control
262- Source: linux-upstream
295+ Source: $sourcename
263296Section: kernel
264297Priority: optional
265298Maintainer: $maintainer
299+ Build-Depends: $build_depends
266300Standards-Version: 3.8.4
267301Homepage: http://www.kernel.org/
268302EOF
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
307347destdir=$kernel_headers_dir /usr/src/linux-headers-$version
308348mkdir -p " $destdir "
309349(cd $srctree ; tar -c -f - -T -) < " $objtree /debian/hdrsrcfiles" | (cd $destdir ; tar -xf -)
383423 create_package " $dbg_packagename " " $dbg_dir "
384424fi
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+
386455exit 0
0 commit comments