xref: /linux/scripts/package/mkdebian (revision 088d13246a4672bc03aec664675138e3f5bff68c)
1b41d920aSRiku Voipio#!/bin/sh
2b41d920aSRiku Voipio#
3b41d920aSRiku Voipio# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
4b41d920aSRiku Voipio#
5b41d920aSRiku Voipio# Simple script to generate a debian/ directory for a Linux kernel.
6b41d920aSRiku Voipio
7c0414419SMasahiro Yamadaset -eu
8b41d920aSRiku Voipio
908d3892cSBen Hutchingsis_enabled() {
106fb7ef5aSMasahiro Yamada	grep -q "^$1=y" include/config/auto.conf
1108d3892cSBen Hutchings}
1208d3892cSBen Hutchings
1308d3892cSBen Hutchingsif_enabled_echo() {
1408d3892cSBen Hutchings	if is_enabled "$1"; then
1508d3892cSBen Hutchings		echo -n "$2"
1608d3892cSBen Hutchings	elif [ $# -ge 3 ]; then
1708d3892cSBen Hutchings		echo -n "$3"
1808d3892cSBen Hutchings	fi
1908d3892cSBen Hutchings}
2008d3892cSBen Hutchings
21b41d920aSRiku Voipioset_debarch() {
22c0414419SMasahiro Yamada	if [ "${KBUILD_DEBARCH:+set}" ]; then
23f2abcc13SBen Hutchings		debarch="$KBUILD_DEBARCH"
24f2abcc13SBen Hutchings		return
25f2abcc13SBen Hutchings	fi
26f2abcc13SBen Hutchings
27b41d920aSRiku Voipio	# Attempt to find the correct Debian architecture
28b41d920aSRiku Voipio	case "$UTS_MACHINE" in
290df8e970SMasahiro Yamada	i386|alpha|m68k|riscv*)
30b41d920aSRiku Voipio		debarch="$UTS_MACHINE" ;;
31b41d920aSRiku Voipio	x86_64)
32b41d920aSRiku Voipio		debarch=amd64 ;;
33b41d920aSRiku Voipio	sparc*)
347e548e9aSMasahiro Yamada		debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;;
35b41d920aSRiku Voipio	s390*)
364260ecd0SBen Hutchings		debarch=s390x ;;
37b41d920aSRiku Voipio	ppc*)
387e548e9aSMasahiro Yamada		if is_enabled CONFIG_64BIT; then
397e548e9aSMasahiro Yamada			debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el)
4050d511baSBen Hutchings		else
417e548e9aSMasahiro Yamada			debarch=powerpc$(if_enabled_echo CONFIG_SPE spe)
4250d511baSBen Hutchings		fi
4350d511baSBen Hutchings		;;
44b41d920aSRiku Voipio	parisc*)
45b41d920aSRiku Voipio		debarch=hppa ;;
46b41d920aSRiku Voipio	mips*)
477e548e9aSMasahiro Yamada		if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then
487e548e9aSMasahiro Yamada			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el
497e548e9aSMasahiro Yamada		elif is_enabled CONFIG_CPU_MIPSR6; then
507e548e9aSMasahiro Yamada			debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6
51159b3794SBen Hutchings		else
52159b3794SBen Hutchings			debarch=mips
53159b3794SBen Hutchings		fi
54159b3794SBen Hutchings		;;
55b41d920aSRiku Voipio	aarch64|arm64)
56b41d920aSRiku Voipio		debarch=arm64 ;;
57b41d920aSRiku Voipio	arm*)
587e548e9aSMasahiro Yamada		if is_enabled CONFIG_AEABI; then
597e548e9aSMasahiro Yamada			debarch=arm$(if_enabled_echo CONFIG_VFP hf el)
60b41d920aSRiku Voipio		else
61b41d920aSRiku Voipio			debarch=arm
62b41d920aSRiku Voipio		fi
63b41d920aSRiku Voipio		;;
64822f44fbSBen Hutchings	openrisc)
65822f44fbSBen Hutchings		debarch=or1k ;;
6679a85b55SBen Hutchings	sh)
677e548e9aSMasahiro Yamada		if is_enabled CONFIG_CPU_SH3; then
687e548e9aSMasahiro Yamada			debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
697e548e9aSMasahiro Yamada		elif is_enabled CONFIG_CPU_SH4; then
707e548e9aSMasahiro Yamada			debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb)
7179a85b55SBen Hutchings		fi
7279a85b55SBen Hutchings		;;
73a34e92d2SMasahiro Yamada	um)
74a34e92d2SMasahiro Yamada		if is_enabled CONFIG_64BIT; then
75a34e92d2SMasahiro Yamada			debarch=amd64
76a34e92d2SMasahiro Yamada		else
77a34e92d2SMasahiro Yamada			debarch=i386
78a34e92d2SMasahiro Yamada		fi
79a34e92d2SMasahiro Yamada		;;
801195306eSWangYuli	loongarch64)
811195306eSWangYuli		debarch=loong64 ;;
8279a85b55SBen Hutchings	esac
8379a85b55SBen Hutchings	if [ -z "$debarch" ]; then
84091d30aeSBen Hutchings		debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
85b41d920aSRiku Voipio		echo "" >&2
86b41d920aSRiku Voipio		echo "** ** **  WARNING  ** ** **" >&2
87b41d920aSRiku Voipio		echo "" >&2
88b41d920aSRiku Voipio		echo "Your architecture doesn't have its equivalent" >&2
89b41d920aSRiku Voipio		echo "Debian userspace architecture defined!" >&2
90091d30aeSBen Hutchings		echo "Falling back to the current host architecture ($debarch)." >&2
91b41d920aSRiku Voipio		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
92b41d920aSRiku Voipio		echo "" >&2
9379a85b55SBen Hutchings	fi
94b41d920aSRiku Voipio}
95b41d920aSRiku Voipio
96aa7d233fSMasahiro Yamada# Create debian/source/ if it is a source package build
97aa7d233fSMasahiro Yamadagen_source ()
98aa7d233fSMasahiro Yamada{
99aa7d233fSMasahiro Yamada	mkdir -p debian/source
100aa7d233fSMasahiro Yamada
101aa7d233fSMasahiro Yamada	echo "3.0 (quilt)" > debian/source/format
102aa7d233fSMasahiro Yamada
103aa7d233fSMasahiro Yamada	{
104aa7d233fSMasahiro Yamada		echo "diff-ignore"
105aa7d233fSMasahiro Yamada		echo "extend-diff-ignore = .*"
106aa7d233fSMasahiro Yamada	} > debian/source/local-options
107aa7d233fSMasahiro Yamada
108aa7d233fSMasahiro Yamada	# Add .config as a patch
109aa7d233fSMasahiro Yamada	mkdir -p debian/patches
110aa7d233fSMasahiro Yamada	{
111aa7d233fSMasahiro Yamada		echo "Subject: Add .config"
112aa7d233fSMasahiro Yamada		echo "Author: ${maintainer}"
113aa7d233fSMasahiro Yamada		echo
114aa7d233fSMasahiro Yamada		echo "--- /dev/null"
115aa7d233fSMasahiro Yamada		echo "+++ linux/.config"
116aa7d233fSMasahiro Yamada		diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
117aa7d233fSMasahiro Yamada	} > debian/patches/config.patch
118aa7d233fSMasahiro Yamada	echo config.patch > debian/patches/series
119aa7d233fSMasahiro Yamada
120aa7d233fSMasahiro Yamada	"${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
121aa7d233fSMasahiro Yamada	if [ -s debian/patches/diff.patch ]; then
122aa7d233fSMasahiro Yamada		sed -i "
123aa7d233fSMasahiro Yamada			1iSubject: Add local diff
124aa7d233fSMasahiro Yamada			1iAuthor: ${maintainer}
125aa7d233fSMasahiro Yamada			1i
126aa7d233fSMasahiro Yamada		" debian/patches/diff.patch
127aa7d233fSMasahiro Yamada
128aa7d233fSMasahiro Yamada		echo diff.patch >> debian/patches/series
129aa7d233fSMasahiro Yamada	else
130aa7d233fSMasahiro Yamada		rm -f debian/patches/diff.patch
131aa7d233fSMasahiro Yamada	fi
132aa7d233fSMasahiro Yamada}
133aa7d233fSMasahiro Yamada
1347bf4582dSMasahiro Yamadarm -rf debian
135aa7d233fSMasahiro Yamadamkdir debian
136aa7d233fSMasahiro Yamada
137d67015eeSMasahiro Yamadauser=${KBUILD_BUILD_USER:-$(id -nu)}
138d67015eeSMasahiro Yamadaname=${DEBFULLNAME:-${user}}
139c5209080SMasahiro Yamadaif [ "${DEBEMAIL:+set}" ]; then
140c5209080SMasahiro Yamada	email=${DEBEMAIL}
141c5209080SMasahiro Yamadaelse
142d67015eeSMasahiro Yamada	buildhost=${KBUILD_BUILD_HOST:-$(hostname -f 2>/dev/null || hostname)}
143aa7d233fSMasahiro Yamada	email="${user}@${buildhost}"
144aa7d233fSMasahiro Yamadafi
145aa7d233fSMasahiro Yamadamaintainer="${name} <${email}>"
146aa7d233fSMasahiro Yamada
147c0414419SMasahiro Yamadawhile [ $# -gt 0 ]; do
148c0414419SMasahiro Yamada	case "$1" in
149c0414419SMasahiro Yamada	--need-source)
150aa7d233fSMasahiro Yamada		gen_source
151c0414419SMasahiro Yamada		shift
152c0414419SMasahiro Yamada		;;
153c0414419SMasahiro Yamada	*)
154c0414419SMasahiro Yamada		break
155c0414419SMasahiro Yamada		;;
156c0414419SMasahiro Yamada	esac
157c0414419SMasahiro Yamadadone
1587bf4582dSMasahiro Yamada
159b41d920aSRiku Voipio# Some variables and settings used throughout the script
160c0414419SMasahiro Yamadaif [ "${KDEB_PKGVERSION:+set}" ]; then
161b41d920aSRiku Voipio	packageversion=$KDEB_PKGVERSION
162b41d920aSRiku Voipioelse
1637e752910SMasahiro Yamada	upstream_version=$("${srctree}/scripts/setlocalversion" --no-local "${srctree}" | sed 's/-\(rc[1-9]\)/~\1/')
1647e752910SMasahiro Yamada	debian_revision=$("${srctree}/scripts/build-version")
1657e752910SMasahiro Yamada	packageversion=${upstream_version}-${debian_revision}
166b41d920aSRiku Voipiofi
1676eabebb1SMasahiro Yamadasourcename=${KDEB_SOURCENAME:-linux-upstream}
168b41d920aSRiku Voipio
169b41d920aSRiku Voipioif [ "$ARCH" = "um" ] ; then
1700fa21cf4SMasahiro Yamada	packagename=user-mode-linux
1710fa21cf4SMasahiro Yamadaelse
1720fa21cf4SMasahiro Yamada	packagename=linux-image
173b41d920aSRiku Voipiofi
174b41d920aSRiku Voipio
1750fa21cf4SMasahiro Yamadadebarch=
1760fa21cf4SMasahiro Yamadaset_debarch
1770fa21cf4SMasahiro Yamada
178b41d920aSRiku Voipio# Try to determine distribution
179c0414419SMasahiro Yamadaif [ "${KDEB_CHANGELOG_DIST:+set}" ]; then
180b41d920aSRiku Voipio        distribution=$KDEB_CHANGELOG_DIST
181b41d920aSRiku Voipio# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
182b41d920aSRiku Voipioelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
183b41d920aSRiku Voipio        : # nothing to do in this case
184b41d920aSRiku Voipioelse
185b41d920aSRiku Voipio        distribution="unstable"
186b41d920aSRiku Voipio        echo >&2 "Using default distribution of 'unstable' in the changelog"
187b41d920aSRiku Voipio        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
188b41d920aSRiku Voipiofi
189b41d920aSRiku Voipio
190b41d920aSRiku Voipioecho $debarch > debian/arch
191b41d920aSRiku Voipio
192e2c31822SMasahiro Yamadahost_gnu=$(dpkg-architecture -a "${debarch}" -q DEB_HOST_GNU_TYPE | sed 's/_/-/g')
193e2c31822SMasahiro Yamada
194b41d920aSRiku Voipio# Generate a simple changelog template
195b41d920aSRiku Voipiocat <<EOF > debian/changelog
196b41d920aSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low
197b41d920aSRiku Voipio
198b41d920aSRiku Voipio  * Custom built Linux kernel.
199b41d920aSRiku Voipio
200b41d920aSRiku Voipio -- $maintainer  $(date -R)
201b41d920aSRiku VoipioEOF
202b41d920aSRiku Voipio
203b41d920aSRiku Voipio# Generate a control file
204b41d920aSRiku Voipiocat <<EOF > debian/control
205b41d920aSRiku VoipioSource: $sourcename
206b41d920aSRiku VoipioSection: kernel
207b41d920aSRiku VoipioPriority: optional
208b41d920aSRiku VoipioMaintainer: $maintainer
2093e854180SGuillem JoverRules-Requires-Root: no
2105e73758bSMasahiro YamadaBuild-Depends: debhelper-compat (= 12)
21182a1978dSMasahiro YamadaBuild-Depends-Arch: bc, bison, flex,
212e2c31822SMasahiro Yamada gcc-${host_gnu} <!pkg.${sourcename}.nokernelheaders>,
213*657f96cbSWangYuli kmod, libdw-dev:native, libelf-dev:native,
214e2c31822SMasahiro Yamada libssl-dev:native, libssl-dev <!pkg.${sourcename}.nokernelheaders>,
2156b1fabceSMasahiro Yamada python3:native, rsync
21616a122c7SAlexander A. KlimovHomepage: https://www.kernel.org/
217b41d920aSRiku Voipio
2181c3107ecSMasahiro YamadaPackage: $packagename-${KERNELRELEASE}
219b41d920aSRiku VoipioArchitecture: $debarch
2201c3107ecSMasahiro YamadaDescription: Linux kernel, version ${KERNELRELEASE}
221b41d920aSRiku Voipio This package contains the Linux kernel, modules and corresponding other
2221c3107ecSMasahiro Yamada files, version: ${KERNELRELEASE}.
22336862e14SMasahiro YamadaEOF
22436862e14SMasahiro Yamada
22536862e14SMasahiro Yamadaif [ "${SRCARCH}" != um ]; then
22636862e14SMasahiro Yamadacat <<EOF >> debian/control
227b41d920aSRiku Voipio
228b41d920aSRiku VoipioPackage: linux-libc-dev
229b41d920aSRiku VoipioSection: devel
230b41d920aSRiku VoipioProvides: linux-kernel-headers
231b41d920aSRiku VoipioArchitecture: $debarch
232b41d920aSRiku VoipioDescription: Linux support headers for userspace development
233b41d920aSRiku Voipio This package provides userspaces headers from the Linux kernel.  These headers
234b41d920aSRiku Voipio are used by the installed headers for GNU glibc and other system libraries.
2355a464217SCedric HombourgerMulti-Arch: same
236d9dac147SReinhard KarcherEOF
237d9dac147SReinhard Karcher
238bac977cbSMasahiro Yamadaif is_enabled CONFIG_MODULES; then
239bac977cbSMasahiro Yamadacat <<EOF >> debian/control
240bac977cbSMasahiro Yamada
2411c3107ecSMasahiro YamadaPackage: linux-headers-${KERNELRELEASE}
242bac977cbSMasahiro YamadaArchitecture: $debarch
243e2c31822SMasahiro YamadaBuild-Profiles: <!pkg.${sourcename}.nokernelheaders>
2441c3107ecSMasahiro YamadaDescription: Linux kernel headers for ${KERNELRELEASE} on $debarch
2451c3107ecSMasahiro Yamada This package provides kernel header files for ${KERNELRELEASE} on $debarch
246bac977cbSMasahiro Yamada .
247bac977cbSMasahiro Yamada This is useful for people who need to build external modules
248bac977cbSMasahiro YamadaEOF
249bac977cbSMasahiro Yamadafi
25036862e14SMasahiro Yamadafi
251bac977cbSMasahiro Yamada
252d9dac147SReinhard Karcherif is_enabled CONFIG_DEBUG_INFO; then
253d9dac147SReinhard Karchercat <<EOF >> debian/control
254b41d920aSRiku Voipio
2551c3107ecSMasahiro YamadaPackage: linux-image-${KERNELRELEASE}-dbg
256b41d920aSRiku VoipioSection: debug
257b41d920aSRiku VoipioArchitecture: $debarch
2582ad7126cSMasahiro YamadaBuild-Profiles: <!pkg.${sourcename}.nokerneldbg>
2591c3107ecSMasahiro YamadaDescription: Linux kernel debugging symbols for ${KERNELRELEASE}
260b41d920aSRiku Voipio This package will come in handy if you need to debug the kernel. It provides
261b41d920aSRiku Voipio all the necessary debug symbols for the kernel and its modules.
262b41d920aSRiku VoipioEOF
263d9dac147SReinhard Karcherfi
264b41d920aSRiku Voipio
265d9287ea8SMasahiro Yamadacat <<EOF > debian/rules.vars
266d9287ea8SMasahiro YamadaARCH := ${ARCH}
267d9287ea8SMasahiro YamadaKERNELRELEASE := ${KERNELRELEASE}
268b41d920aSRiku VoipioEOF
269d9287ea8SMasahiro Yamada
2709c65810cSMasahiro Yamadacp "${srctree}/scripts/package/debian/copyright" debian/
271d9287ea8SMasahiro Yamadacp "${srctree}/scripts/package/debian/rules" debian/
272b41d920aSRiku Voipio
273b41d920aSRiku Voipioexit 0
274