1 #!/bin/sh 1 #!/bin/sh 2 # 2 # 3 # Copyright 2003 Wichert Akkerman <wichert@wigg 3 # Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 4 # 4 # 5 # Simple script to generate a debian/ director 5 # Simple script to generate a debian/ directory for a Linux kernel. 6 6 7 set -eu !! 7 set -e 8 << 9 is_enabled() { << 10 grep -q "^$1=y" include/config/auto.co << 11 } << 12 << 13 if_enabled_echo() { << 14 if is_enabled "$1"; then << 15 echo -n "$2" << 16 elif [ $# -ge 3 ]; then << 17 echo -n "$3" << 18 fi << 19 } << 20 8 21 set_debarch() { 9 set_debarch() { 22 if [ "${KBUILD_DEBARCH:+set}" ]; then << 23 debarch="$KBUILD_DEBARCH" << 24 return << 25 fi << 26 << 27 # Attempt to find the correct Debian a 10 # Attempt to find the correct Debian architecture 28 case "$UTS_MACHINE" in 11 case "$UTS_MACHINE" in 29 i386|alpha|m68k|riscv*) !! 12 i386|ia64|alpha) 30 debarch="$UTS_MACHINE" ;; 13 debarch="$UTS_MACHINE" ;; 31 x86_64) 14 x86_64) 32 debarch=amd64 ;; 15 debarch=amd64 ;; 33 sparc*) 16 sparc*) 34 debarch=sparc$(if_enabled_echo !! 17 debarch=sparc ;; 35 s390*) 18 s390*) 36 debarch=s390x ;; !! 19 debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;; 37 ppc*) 20 ppc*) 38 if is_enabled CONFIG_64BIT; th !! 21 debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;; 39 debarch=ppc64$(if_enab << 40 else << 41 debarch=powerpc$(if_en << 42 fi << 43 ;; << 44 parisc*) 22 parisc*) 45 debarch=hppa ;; 23 debarch=hppa ;; 46 mips*) 24 mips*) 47 if is_enabled CONFIG_CPU_LITTL !! 25 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;; 48 debarch=mips$(if_enabl << 49 elif is_enabled CONFIG_CPU_MIP << 50 debarch=mips$(if_enabl << 51 else << 52 debarch=mips << 53 fi << 54 ;; << 55 aarch64|arm64) 26 aarch64|arm64) 56 debarch=arm64 ;; 27 debarch=arm64 ;; 57 arm*) 28 arm*) 58 if is_enabled CONFIG_AEABI; th !! 29 if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then 59 debarch=arm$(if_enable !! 30 if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then >> 31 debarch=armhf >> 32 else >> 33 debarch=armel >> 34 fi 60 else 35 else 61 debarch=arm !! 36 debarch=arm 62 fi 37 fi 63 ;; 38 ;; 64 openrisc) !! 39 *) 65 debarch=or1k ;; !! 40 debarch=$(dpkg --print-architecture) 66 sh) << 67 if is_enabled CONFIG_CPU_SH3; << 68 debarch=sh3$(if_enable << 69 elif is_enabled CONFIG_CPU_SH4 << 70 debarch=sh4$(if_enable << 71 fi << 72 ;; << 73 esac << 74 if [ -z "$debarch" ]; then << 75 debarch=$(dpkg-architecture -q << 76 echo "" >&2 41 echo "" >&2 77 echo "** ** ** WARNING ** ** 42 echo "** ** ** WARNING ** ** **" >&2 78 echo "" >&2 43 echo "" >&2 79 echo "Your architecture doesn' 44 echo "Your architecture doesn't have its equivalent" >&2 80 echo "Debian userspace archite 45 echo "Debian userspace architecture defined!" >&2 81 echo "Falling back to the curr !! 46 echo "Falling back to using your current userspace instead!" >&2 82 echo "Please add support for $ 47 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 83 echo "" >&2 48 echo "" >&2 >> 49 esac >> 50 if [ -n "$KBUILD_DEBARCH" ] ; then >> 51 debarch="$KBUILD_DEBARCH" 84 fi 52 fi 85 } 53 } 86 54 87 # Create debian/source/ if it is a source pack << 88 gen_source () << 89 { << 90 mkdir -p debian/source << 91 << 92 echo "3.0 (quilt)" > debian/source/for << 93 << 94 { << 95 echo "diff-ignore" << 96 echo "extend-diff-ignore = .*" << 97 } > debian/source/local-options << 98 << 99 # Add .config as a patch << 100 mkdir -p debian/patches << 101 { << 102 echo "Subject: Add .config" << 103 echo "Author: ${maintainer}" << 104 echo << 105 echo "--- /dev/null" << 106 echo "+++ linux/.config" << 107 diff -u /dev/null "${KCONFIG_C << 108 } > debian/patches/config.patch << 109 echo config.patch > debian/patches/ser << 110 << 111 "${srctree}/scripts/package/gen-diff-p << 112 if [ -s debian/patches/diff.patch ]; t << 113 sed -i " << 114 1iSubject: Add local d << 115 1iAuthor: ${maintainer << 116 1i << 117 " debian/patches/diff.patch << 118 << 119 echo diff.patch >> debian/patc << 120 else << 121 rm -f debian/patches/diff.patc << 122 fi << 123 } << 124 << 125 rm -rf debian << 126 mkdir debian << 127 << 128 user=${KBUILD_BUILD_USER:-$(id -nu)} << 129 name=${DEBFULLNAME:-${user}} << 130 if [ "${DEBEMAIL:+set}" ]; then << 131 email=${DEBEMAIL} << 132 else << 133 buildhost=${KBUILD_BUILD_HOST:-$(hostn << 134 email="${user}@${buildhost}" << 135 fi << 136 maintainer="${name} <${email}>" << 137 << 138 while [ $# -gt 0 ]; do << 139 case "$1" in << 140 --need-source) << 141 gen_source << 142 shift << 143 ;; << 144 *) << 145 break << 146 ;; << 147 esac << 148 done << 149 << 150 # Some variables and settings used throughout 55 # Some variables and settings used throughout the script 151 version=$KERNELRELEASE 56 version=$KERNELRELEASE 152 if [ "${KDEB_PKGVERSION:+set}" ]; then !! 57 if [ -n "$KDEB_PKGVERSION" ]; then 153 packageversion=$KDEB_PKGVERSION 58 packageversion=$KDEB_PKGVERSION 154 else 59 else 155 packageversion=$(${srctree}/scripts/se !! 60 revision=$(cat .version 2>/dev/null||echo 1) >> 61 packageversion=$version-$revision 156 fi 62 fi 157 sourcename=${KDEB_SOURCENAME:-linux-upstream} !! 63 sourcename=$KDEB_SOURCENAME >> 64 packagename=linux-image-$version >> 65 kernel_headers_packagename=linux-headers-$version >> 66 dbg_packagename=$packagename-dbg >> 67 debarch= >> 68 set_debarch 158 69 159 if [ "$ARCH" = "um" ] ; then 70 if [ "$ARCH" = "um" ] ; then 160 packagename=user-mode-linux !! 71 packagename=user-mode-linux-$version 161 else << 162 packagename=linux-image << 163 fi 72 fi 164 73 165 debarch= !! 74 # Try to determine maintainer and email values 166 set_debarch !! 75 if [ -n "$DEBEMAIL" ]; then >> 76 email=$DEBEMAIL >> 77 elif [ -n "$EMAIL" ]; then >> 78 email=$EMAIL >> 79 else >> 80 email=$(id -nu)@$(hostname -f 2>/dev/null || hostname) >> 81 fi >> 82 if [ -n "$DEBFULLNAME" ]; then >> 83 name=$DEBFULLNAME >> 84 elif [ -n "$NAME" ]; then >> 85 name=$NAME >> 86 else >> 87 name="Anonymous" >> 88 fi >> 89 maintainer="$name <$email>" 167 90 168 # Try to determine distribution 91 # Try to determine distribution 169 if [ "${KDEB_CHANGELOG_DIST:+set}" ]; then !! 92 if [ -n "$KDEB_CHANGELOG_DIST" ]; then 170 distribution=$KDEB_CHANGELOG_DIST 93 distribution=$KDEB_CHANGELOG_DIST 171 # In some cases lsb_release returns the codena 94 # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 172 elif distribution=$(lsb_release -cs 2>/dev/nul 95 elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 173 : # nothing to do in this case 96 : # nothing to do in this case 174 else 97 else 175 distribution="unstable" 98 distribution="unstable" 176 echo >&2 "Using default distribution o 99 echo >&2 "Using default distribution of 'unstable' in the changelog" 177 echo >&2 "Install lsb-release or set \ 100 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 178 fi 101 fi 179 102 >> 103 mkdir -p debian/ 180 echo $debarch > debian/arch 104 echo $debarch > debian/arch 181 105 182 host_gnu=$(dpkg-architecture -a "${debarch}" - << 183 << 184 # Generate a simple changelog template 106 # Generate a simple changelog template 185 cat <<EOF > debian/changelog 107 cat <<EOF > debian/changelog 186 $sourcename ($packageversion) $distribution; u 108 $sourcename ($packageversion) $distribution; urgency=low 187 109 188 * Custom built Linux kernel. 110 * Custom built Linux kernel. 189 111 190 -- $maintainer $(date -R) 112 -- $maintainer $(date -R) 191 EOF 113 EOF 192 114 >> 115 # Generate copyright file >> 116 cat <<EOF > debian/copyright >> 117 This is a packacked upstream version of the Linux kernel. >> 118 >> 119 The sources may be found at most Linux archive sites, including: >> 120 https://www.kernel.org/pub/linux/kernel >> 121 >> 122 Copyright: 1991 - 2018 Linus Torvalds and others. >> 123 >> 124 The git repository for mainline kernel development is at: >> 125 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git >> 126 >> 127 This program is free software; you can redistribute it and/or modify >> 128 it under the terms of the GNU General Public License as published by >> 129 the Free Software Foundation; version 2 dated June, 1991. >> 130 >> 131 On Debian GNU/Linux systems, the complete text of the GNU General Public >> 132 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. >> 133 EOF >> 134 193 # Generate a control file 135 # Generate a control file 194 cat <<EOF > debian/control 136 cat <<EOF > debian/control 195 Source: $sourcename 137 Source: $sourcename 196 Section: kernel 138 Section: kernel 197 Priority: optional 139 Priority: optional 198 Maintainer: $maintainer 140 Maintainer: $maintainer 199 Rules-Requires-Root: no !! 141 Build-Depends: bc, kmod, cpio 200 Build-Depends: debhelper-compat (= 12) !! 142 Homepage: http://www.kernel.org/ 201 Build-Depends-Arch: bc, bison, cpio, flex, << 202 gcc-${host_gnu} <!pkg.${sourcename}.nokernelh << 203 kmod, libelf-dev:native, << 204 libssl-dev:native, libssl-dev <!pkg.${sourcen << 205 rsync << 206 Homepage: https://www.kernel.org/ << 207 143 208 Package: $packagename-$version !! 144 Package: $packagename 209 Architecture: $debarch 145 Architecture: $debarch 210 Description: Linux kernel, version $version 146 Description: Linux kernel, version $version 211 This package contains the Linux kernel, modul 147 This package contains the Linux kernel, modules and corresponding other 212 files, version: $version. 148 files, version: $version. 213 EOF << 214 149 215 if [ "${SRCARCH}" != um ]; then !! 150 Package: $kernel_headers_packagename 216 cat <<EOF >> debian/control !! 151 Architecture: $debarch >> 152 Description: Linux kernel headers for $version on $debarch >> 153 This package provides kernel header files for $version on $debarch >> 154 . >> 155 This is useful for people who need to build external modules 217 156 218 Package: linux-libc-dev 157 Package: linux-libc-dev 219 Section: devel 158 Section: devel 220 Provides: linux-kernel-headers 159 Provides: linux-kernel-headers 221 Architecture: $debarch 160 Architecture: $debarch 222 Description: Linux support headers for userspa 161 Description: Linux support headers for userspace development 223 This package provides userspaces headers from 162 This package provides userspaces headers from the Linux kernel. These headers 224 are used by the installed headers for GNU gli 163 are used by the installed headers for GNU glibc and other system libraries. 225 Multi-Arch: same << 226 EOF << 227 << 228 if is_enabled CONFIG_MODULES; then << 229 cat <<EOF >> debian/control << 230 << 231 Package: linux-headers-$version << 232 Architecture: $debarch << 233 Build-Profiles: <!pkg.${sourcename}.nokernelhe << 234 Description: Linux kernel headers for $version << 235 This package provides kernel header files for << 236 . << 237 This is useful for people who need to build e << 238 EOF << 239 fi << 240 fi << 241 << 242 if is_enabled CONFIG_DEBUG_INFO; then << 243 cat <<EOF >> debian/control << 244 164 245 Package: linux-image-$version-dbg !! 165 Package: $dbg_packagename 246 Section: debug 166 Section: debug 247 Architecture: $debarch 167 Architecture: $debarch 248 Build-Profiles: <!pkg.${sourcename}.nokerneldb << 249 Description: Linux kernel debugging symbols fo 168 Description: Linux kernel debugging symbols for $version 250 This package will come in handy if you need t 169 This package will come in handy if you need to debug the kernel. It provides 251 all the necessary debug symbols for the kerne 170 all the necessary debug symbols for the kernel and its modules. 252 EOF 171 EOF 253 fi << 254 172 255 cat <<EOF > debian/rules.vars !! 173 cat <<EOF > debian/rules 256 ARCH := ${ARCH} !! 174 #!$(command -v $MAKE) -f 257 KERNELRELEASE := ${KERNELRELEASE} << 258 EOF << 259 175 260 cp "${srctree}/scripts/package/debian/copyrigh !! 176 build: 261 cp "${srctree}/scripts/package/debian/rules" d !! 177 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= >> 178 >> 179 binary-arch: >> 180 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg >> 181 >> 182 clean: >> 183 rm -rf debian/*tmp debian/files >> 184 \$(MAKE) clean >> 185 >> 186 binary: binary-arch >> 187 EOF 262 188 263 exit 0 189 exit 0
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.