| .. | .. |
|---|
| 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" |
|---|