.. | .. |
---|
12 | 12 | |
---|
13 | 13 | set -e |
---|
14 | 14 | |
---|
| 15 | +is_enabled() { |
---|
| 16 | + grep -q "^$1=y" include/config/auto.conf |
---|
| 17 | +} |
---|
| 18 | + |
---|
| 19 | +if_enabled_echo() { |
---|
| 20 | + if is_enabled "$1"; then |
---|
| 21 | + echo -n "$2" |
---|
| 22 | + elif [ $# -ge 3 ]; then |
---|
| 23 | + echo -n "$3" |
---|
| 24 | + fi |
---|
| 25 | +} |
---|
| 26 | + |
---|
15 | 27 | create_package() { |
---|
16 | 28 | local pname="$1" pdir="$2" |
---|
| 29 | + local dpkg_deb_opts |
---|
17 | 30 | |
---|
18 | 31 | mkdir -m 755 -p "$pdir/DEBIAN" |
---|
19 | 32 | mkdir -p "$pdir/usr/share/doc/$pname" |
---|
20 | 33 | cp debian/copyright "$pdir/usr/share/doc/$pname/" |
---|
21 | 34 | cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian" |
---|
22 | | - gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian" |
---|
| 35 | + gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian" |
---|
23 | 36 | sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \ |
---|
24 | 37 | | xargs -r0 md5sum > DEBIAN/md5sums" |
---|
25 | 38 | |
---|
26 | 39 | # Fix ownership and permissions |
---|
27 | | - chown -R root:root "$pdir" |
---|
| 40 | + if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then |
---|
| 41 | + dpkg_deb_opts="--root-owner-group" |
---|
| 42 | + else |
---|
| 43 | + chown -R root:root "$pdir" |
---|
| 44 | + fi |
---|
28 | 45 | chmod -R go-w "$pdir" |
---|
29 | 46 | # in case we are in a restrictive umask environment like 0077 |
---|
30 | 47 | chmod -R a+rX "$pdir" |
---|
| 48 | + # in case we build in a setuid/setgid directory |
---|
| 49 | + chmod -R ug-s "$pdir" |
---|
31 | 50 | |
---|
32 | 51 | # Create the package |
---|
33 | 52 | dpkg-gencontrol -p$pname -P"$pdir" |
---|
34 | | - dpkg --build "$pdir" .. |
---|
| 53 | + dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" .. |
---|
| 54 | +} |
---|
| 55 | + |
---|
| 56 | +deploy_kernel_headers () { |
---|
| 57 | + pdir=$1 |
---|
| 58 | + |
---|
| 59 | + rm -rf $pdir |
---|
| 60 | + |
---|
| 61 | + ( |
---|
| 62 | + cd $srctree |
---|
| 63 | + find . arch/$SRCARCH -maxdepth 1 -name Makefile\* |
---|
| 64 | + find include scripts -type f -o -type l |
---|
| 65 | + find arch/$SRCARCH -name Kbuild.platforms -o -name Platform |
---|
| 66 | + find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f |
---|
| 67 | + ) > debian/hdrsrcfiles |
---|
| 68 | + |
---|
| 69 | + { |
---|
| 70 | + if is_enabled CONFIG_STACK_VALIDATION; then |
---|
| 71 | + echo tools/objtool/objtool |
---|
| 72 | + fi |
---|
| 73 | + |
---|
| 74 | + find arch/$SRCARCH/include Module.symvers include scripts -type f |
---|
| 75 | + |
---|
| 76 | + if is_enabled CONFIG_GCC_PLUGINS; then |
---|
| 77 | + find scripts/gcc-plugins -name \*.so |
---|
| 78 | + fi |
---|
| 79 | + } > debian/hdrobjfiles |
---|
| 80 | + |
---|
| 81 | + destdir=$pdir/usr/src/linux-headers-$version |
---|
| 82 | + mkdir -p $destdir |
---|
| 83 | + tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir |
---|
| 84 | + tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir |
---|
| 85 | + rm -f debian/hdrsrcfiles debian/hdrobjfiles |
---|
| 86 | + |
---|
| 87 | + # copy .config manually to be where it's expected to be |
---|
| 88 | + cp $KCONFIG_CONFIG $destdir/.config |
---|
| 89 | + |
---|
| 90 | + mkdir -p $pdir/lib/modules/$version/ |
---|
| 91 | + ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build |
---|
| 92 | +} |
---|
| 93 | + |
---|
| 94 | +deploy_libc_headers () { |
---|
| 95 | + pdir=$1 |
---|
| 96 | + |
---|
| 97 | + rm -rf $pdir |
---|
| 98 | + |
---|
| 99 | + $MAKE -f $srctree/Makefile headers |
---|
| 100 | + $MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr |
---|
| 101 | + |
---|
| 102 | + # move asm headers to /usr/include/<libc-machine>/asm to match the structure |
---|
| 103 | + # used by Debian-based distros (to support multi-arch) |
---|
| 104 | + host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH) |
---|
| 105 | + mkdir $pdir/usr/include/$host_arch |
---|
| 106 | + mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/ |
---|
35 | 107 | } |
---|
36 | 108 | |
---|
37 | 109 | version=$KERNELRELEASE |
---|
38 | | -tmpdir="$objtree/debian/tmp" |
---|
39 | | -kernel_headers_dir="$objtree/debian/hdrtmp" |
---|
40 | | -libc_headers_dir="$objtree/debian/headertmp" |
---|
41 | | -dbg_dir="$objtree/debian/dbgtmp" |
---|
| 110 | +tmpdir=debian/linux-image |
---|
| 111 | +dbg_dir=debian/linux-image-dbg |
---|
42 | 112 | packagename=linux-image-$version |
---|
43 | | -kernel_headers_packagename=linux-headers-$version |
---|
44 | | -libc_headers_packagename=linux-libc-dev |
---|
45 | 113 | dbg_packagename=$packagename-dbg |
---|
46 | 114 | |
---|
47 | 115 | if [ "$ARCH" = "um" ] ; then |
---|
.. | .. |
---|
62 | 130 | installed_image_path="boot/vmlinuz-$version" |
---|
63 | 131 | esac |
---|
64 | 132 | |
---|
65 | | -BUILD_DEBUG="$(grep -s '^CONFIG_DEBUG_INFO=y' $KCONFIG_CONFIG || true)" |
---|
| 133 | +BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes) |
---|
66 | 134 | |
---|
67 | 135 | # Setup the directory structure |
---|
68 | | -rm -rf "$tmpdir" "$kernel_headers_dir" "$libc_headers_dir" "$dbg_dir" $objtree/debian/files |
---|
| 136 | +rm -rf "$tmpdir" "$dbg_dir" debian/files |
---|
69 | 137 | mkdir -m 755 -p "$tmpdir/DEBIAN" |
---|
70 | 138 | mkdir -p "$tmpdir/lib" "$tmpdir/boot" |
---|
71 | | -mkdir -p "$kernel_headers_dir/lib/modules/$version/" |
---|
72 | 139 | |
---|
73 | | -# Build and install the kernel |
---|
| 140 | +# Install the kernel |
---|
74 | 141 | if [ "$ARCH" = "um" ] ; then |
---|
75 | 142 | mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename" |
---|
76 | | - $MAKE linux |
---|
77 | 143 | cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map" |
---|
78 | 144 | cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config" |
---|
79 | 145 | gzip "$tmpdir/usr/share/doc/$packagename/config" |
---|
.. | .. |
---|
83 | 149 | fi |
---|
84 | 150 | cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path" |
---|
85 | 151 | |
---|
86 | | -if grep -q "^CONFIG_OF=y" $KCONFIG_CONFIG ; then |
---|
| 152 | +if is_enabled CONFIG_OF_EARLY_FLATTREE; then |
---|
87 | 153 | # Only some architectures with OF support have this target |
---|
88 | | - if grep -q dtbs_install "${srctree}/arch/$SRCARCH/Makefile"; then |
---|
89 | | - $MAKE KBUILD_SRC= INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install |
---|
| 154 | + if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then |
---|
| 155 | + $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install |
---|
90 | 156 | fi |
---|
91 | 157 | fi |
---|
92 | 158 | |
---|
93 | | -if grep -q '^CONFIG_MODULES=y' $KCONFIG_CONFIG ; then |
---|
94 | | - INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install |
---|
| 159 | +if is_enabled CONFIG_MODULES; then |
---|
| 160 | + INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install |
---|
95 | 161 | rm -f "$tmpdir/lib/modules/$version/build" |
---|
96 | 162 | rm -f "$tmpdir/lib/modules/$version/source" |
---|
97 | 163 | if [ "$ARCH" = "um" ] ; then |
---|
.. | .. |
---|
111 | 177 | done |
---|
112 | 178 | |
---|
113 | 179 | # resign stripped modules |
---|
114 | | - MODULE_SIG_ALL="$(grep -s '^CONFIG_MODULE_SIG_ALL=y' $KCONFIG_CONFIG || true)" |
---|
115 | | - if [ -n "$MODULE_SIG_ALL" ]; then |
---|
116 | | - INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_sign |
---|
| 180 | + if is_enabled CONFIG_MODULE_SIG_ALL; then |
---|
| 181 | + INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign |
---|
117 | 182 | fi |
---|
118 | 183 | fi |
---|
119 | | -fi |
---|
120 | | - |
---|
121 | | -if [ "$ARCH" != "um" ]; then |
---|
122 | | - $MAKE headers_check KBUILD_SRC= |
---|
123 | | - $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr" |
---|
124 | 184 | fi |
---|
125 | 185 | |
---|
126 | 186 | # Install the maintainer scripts |
---|
.. | .. |
---|
129 | 189 | # make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and |
---|
130 | 190 | # so do we; recent versions of dracut and initramfs-tools will obey this. |
---|
131 | 191 | debhookdir=${KDEB_HOOKDIR:-/etc/kernel} |
---|
132 | | -if grep -q '^CONFIG_BLK_DEV_INITRD=y' $KCONFIG_CONFIG; then |
---|
133 | | - want_initrd=Yes |
---|
134 | | -else |
---|
135 | | - want_initrd=No |
---|
136 | | -fi |
---|
137 | 192 | for script in postinst postrm preinst prerm ; do |
---|
138 | 193 | mkdir -p "$tmpdir$debhookdir/$script.d" |
---|
139 | 194 | cat <<EOF > "$tmpdir/DEBIAN/$script" |
---|
.. | .. |
---|
145 | 200 | export DEB_MAINT_PARAMS="\$*" |
---|
146 | 201 | |
---|
147 | 202 | # Tell initramfs builder whether it's wanted |
---|
148 | | -export INITRD=$want_initrd |
---|
| 203 | +export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No) |
---|
149 | 204 | |
---|
150 | 205 | test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d |
---|
151 | 206 | exit 0 |
---|
.. | .. |
---|
153 | 208 | chmod 755 "$tmpdir/DEBIAN/$script" |
---|
154 | 209 | done |
---|
155 | 210 | |
---|
156 | | -# Build kernel header package |
---|
157 | | -(cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" |
---|
158 | | -(cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" |
---|
159 | | -(cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" |
---|
160 | | -(cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" |
---|
161 | | -if grep -q '^CONFIG_STACK_VALIDATION=y' $KCONFIG_CONFIG ; then |
---|
162 | | - (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" |
---|
163 | | -fi |
---|
164 | | -(cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" |
---|
165 | | -if grep -q '^CONFIG_GCC_PLUGINS=y' $KCONFIG_CONFIG ; then |
---|
166 | | - (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" |
---|
167 | | -fi |
---|
168 | | -destdir=$kernel_headers_dir/usr/src/linux-headers-$version |
---|
169 | | -mkdir -p "$destdir" |
---|
170 | | -(cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) |
---|
171 | | -(cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) |
---|
172 | | -(cd $objtree; cp $KCONFIG_CONFIG $destdir/.config) # copy .config manually to be where it's expected to be |
---|
173 | | -ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" |
---|
174 | | -rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" |
---|
175 | | - |
---|
176 | 211 | if [ "$ARCH" != "um" ]; then |
---|
177 | | - create_package "$kernel_headers_packagename" "$kernel_headers_dir" |
---|
178 | | - create_package "$libc_headers_packagename" "$libc_headers_dir" |
---|
| 212 | + if is_enabled CONFIG_MODULES; then |
---|
| 213 | + deploy_kernel_headers debian/linux-headers |
---|
| 214 | + create_package linux-headers-$version debian/linux-headers |
---|
| 215 | + fi |
---|
| 216 | + |
---|
| 217 | + deploy_libc_headers debian/linux-libc-dev |
---|
| 218 | + create_package linux-libc-dev debian/linux-libc-dev |
---|
179 | 219 | fi |
---|
180 | 220 | |
---|
181 | 221 | create_package "$packagename" "$tmpdir" |
---|