Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/sh
2#
3# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
4#
5# Simple script to generate a debian/ directory for a Linux kernel.
6
7set -eu
8
9is_enabled() {
10 grep -q "^$1=y" include/config/auto.conf
11}
12
13if_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
21set_debarch() {
22 if [ "${KBUILD_DEBARCH:+set}" ]; then
23 debarch="$KBUILD_DEBARCH"
24 return
25 fi
26
27 # Attempt to find the correct Debian architecture
28 case "$UTS_MACHINE" in
29 i386|alpha|m68k|riscv*)
30 debarch="$UTS_MACHINE" ;;
31 x86_64)
32 debarch=amd64 ;;
33 sparc*)
34 debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
35 s390*)
36 debarch=s390x ;;
37 ppc*)
38 if is_enabled CONFIG_64BIT; then
39 debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
40 else
41 debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
42 fi
43 ;;
44 parisc*)
45 debarch=hppa ;;
46 mips*)
47 if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then
48 debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el
49 elif is_enabled CONFIG_CPU_MIPSR6; then
50 debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6
51 else
52 debarch=mips
53 fi
54 ;;
55 aarch64|arm64)
56 debarch=arm64 ;;
57 arm*)
58 if is_enabled CONFIG_AEABI; then
59 debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
60 else
61 debarch=arm
62 fi
63 ;;
64 openrisc)
65 debarch=or1k ;;
66 sh)
67 if is_enabled CONFIG_CPU_SH3; then
68 debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
69 elif is_enabled CONFIG_CPU_SH4; then
70 debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
71 fi
72 ;;
73 um)
74 if is_enabled CONFIG_64BIT; then
75 debarch=amd64
76 else
77 debarch=i386
78 fi
79 ;;
80 loongarch64)
81 debarch=loong64 ;;
82 esac
83 if [ -z "$debarch" ]; then
84 debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
85 echo "" >&2
86 echo "** ** ** WARNING ** ** **" >&2
87 echo "" >&2
88 echo "Your architecture doesn't have its equivalent" >&2
89 echo "Debian userspace architecture defined!" >&2
90 echo "Falling back to the current host architecture ($debarch)." >&2
91 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
92 echo "" >&2
93 fi
94}
95
96# Create debian/source/ if it is a source package build
97gen_source ()
98{
99 mkdir -p debian/source
100
101 echo "3.0 (quilt)" > debian/source/format
102
103 {
104 echo "diff-ignore"
105 echo "extend-diff-ignore = .*"
106 } > debian/source/local-options
107
108 # Add .config as a patch
109 mkdir -p debian/patches
110 {
111 echo "Subject: Add .config"
112 echo "Author: ${maintainer}"
113 echo
114 echo "--- /dev/null"
115 echo "+++ linux/.config"
116 diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
117 } > debian/patches/config.patch
118 echo config.patch > debian/patches/series
119
120 "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
121 if [ -s debian/patches/diff.patch ]; then
122 sed -i "
123 1iSubject: Add local diff
124 1iAuthor: ${maintainer}
125 1i
126 " debian/patches/diff.patch
127
128 echo diff.patch >> debian/patches/series
129 else
130 rm -f debian/patches/diff.patch
131 fi
132}
133
134rm -rf debian
135mkdir debian
136
137user=${KBUILD_BUILD_USER:-$(id -nu)}
138name=${DEBFULLNAME:-${user}}
139if [ "${DEBEMAIL:+set}" ]; then
140 email=${DEBEMAIL}
141else
142 buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
143 email="${user}@${buildhost}"
144fi
145maintainer="${name} <${email}>"
146
147while [ $# -gt 0 ]; do
148 case "$1" in
149 --need-source)
150 gen_source
151 shift
152 ;;
153 *)
154 break
155 ;;
156 esac
157done
158
159# Some variables and settings used throughout the script
160if [ "${KDEB_PKGVERSION:+set}" ]; then
161 packageversion=$KDEB_PKGVERSION
162else
163 upstream_version=$("${srctree}/scripts/setlocalversion" --no-local "${srctree}" | sed 's/-\(rc[1-9]\)/~\1/')
164 debian_revision=$("${srctree}/scripts/build-version")
165 packageversion=${upstream_version}-${debian_revision}
166fi
167sourcename=${KDEB_SOURCENAME:-linux-upstream}
168
169if [ "$ARCH" = "um" ] ; then
170 packagename=user-mode-linux
171else
172 packagename=linux-image
173fi
174
175debarch=
176set_debarch
177
178# Try to determine distribution
179if [ "${KDEB_CHANGELOG_DIST:+set}" ]; then
180 distribution=$KDEB_CHANGELOG_DIST
181# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
182elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
183 : # nothing to do in this case
184else
185 distribution="unstable"
186 echo >&2 "Using default distribution of 'unstable' in the changelog"
187 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
188fi
189
190echo $debarch > debian/arch
191
192host_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g')
193
194# Generate a simple changelog template
195cat <<EOF > debian/changelog
196$sourcename ($packageversion) $distribution; urgency=low
197
198 * Custom built Linux kernel.
199
200 -- $maintainer $(date -R)
201EOF
202
203# Generate a control file
204cat <<EOF > debian/control
205Source: $sourcename
206Section: kernel
207Priority: optional
208Maintainer: $maintainer
209Rules-Requires-Root: no
210Build-Depends: debhelper-compat (= 12)
211Build-Depends-Arch: bc, bison, flex,
212 gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>,
213 kmod, libdw-dev:native, libelf-dev:native,
214 libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>,
215 python3:native, rsync
216Homepage: https://www.kernel.org/
217
218Package: $packagename-${KERNELRELEASE}
219Architecture: $debarch
220Description: Linux kernel, version ${KERNELRELEASE}
221 This package contains the Linux kernel, modules and corresponding other
222 files, version: ${KERNELRELEASE}.
223EOF
224
225if [ "${SRCARCH}" != um ]; then
226cat <<EOF >> debian/control
227
228Package: linux-libc-dev
229Section: devel
230Provides: linux-kernel-headers
231Architecture: $debarch
232Description: Linux support headers for userspace development
233 This package provides userspaces headers from the Linux kernel. These headers
234 are used by the installed headers for GNU glibc and other system libraries.
235Multi-Arch: same
236EOF
237
238if is_enabled CONFIG_MODULES; then
239cat <<EOF >> debian/control
240
241Package: linux-headers-${KERNELRELEASE}
242Architecture: $debarch
243Build-Profiles: <!pkg.${sourcename}.nokernelheaders>
244Description: Linux kernel headers for ${KERNELRELEASE} on $debarch
245 This package provides kernel header files for ${KERNELRELEASE} on $debarch
246 .
247 This is useful for people who need to build external modules
248EOF
249fi
250fi
251
252if is_enabled CONFIG_DEBUG_INFO; then
253cat <<EOF >> debian/control
254
255Package: linux-image-${KERNELRELEASE}-dbg
256Section: debug
257Architecture: $debarch
258Build-Profiles: <!pkg.${sourcename}.nokerneldbg>
259Description: Linux kernel debugging symbols for ${KERNELRELEASE}
260 This package will come in handy if you need to debug the kernel. It provides
261 all the necessary debug symbols for the kernel and its modules.
262EOF
263fi
264
265cat <<EOF > debian/rules.vars
266ARCH := ${ARCH}
267KERNELRELEASE := ${KERNELRELEASE}
268EOF
269
270cp "${srctree}/scripts/package/debian/copyright" debian/
271cp "${srctree}/scripts/package/debian/rules" debian/
272
273exit 0