xref: /linux/scripts/package/mkdebian (revision 8b824220bd6641976676ae7a1e925db63eb89c4b)
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
7b41d920aSRiku Voipioset -e
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() {
22f2abcc13SBen Hutchings	if [ -n "$KBUILD_DEBARCH" ] ; 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
2975ebcee7SBen Hutchings	i386|ia64|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		;;
7379a85b55SBen Hutchings	esac
7479a85b55SBen Hutchings	if [ -z "$debarch" ]; then
75091d30aeSBen Hutchings		debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
76b41d920aSRiku Voipio		echo "" >&2
77b41d920aSRiku Voipio		echo "** ** **  WARNING  ** ** **" >&2
78b41d920aSRiku Voipio		echo "" >&2
79b41d920aSRiku Voipio		echo "Your architecture doesn't have its equivalent" >&2
80b41d920aSRiku Voipio		echo "Debian userspace architecture defined!" >&2
81091d30aeSBen Hutchings		echo "Falling back to the current host architecture ($debarch)." >&2
82b41d920aSRiku Voipio		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
83b41d920aSRiku Voipio		echo "" >&2
8479a85b55SBen Hutchings	fi
85b41d920aSRiku Voipio}
86b41d920aSRiku Voipio
87aa7d233fSMasahiro Yamada# Create debian/source/ if it is a source package build
88aa7d233fSMasahiro Yamadagen_source ()
89aa7d233fSMasahiro Yamada{
90aa7d233fSMasahiro Yamada	mkdir -p debian/source
91aa7d233fSMasahiro Yamada
92aa7d233fSMasahiro Yamada	echo "3.0 (quilt)" > debian/source/format
93aa7d233fSMasahiro Yamada
94aa7d233fSMasahiro Yamada	{
95aa7d233fSMasahiro Yamada		echo "diff-ignore"
96aa7d233fSMasahiro Yamada		echo "extend-diff-ignore = .*"
97aa7d233fSMasahiro Yamada	} > debian/source/local-options
98aa7d233fSMasahiro Yamada
99aa7d233fSMasahiro Yamada	# Add .config as a patch
100aa7d233fSMasahiro Yamada	mkdir -p debian/patches
101aa7d233fSMasahiro Yamada	{
102aa7d233fSMasahiro Yamada		echo "Subject: Add .config"
103aa7d233fSMasahiro Yamada		echo "Author: ${maintainer}"
104aa7d233fSMasahiro Yamada		echo
105aa7d233fSMasahiro Yamada		echo "--- /dev/null"
106aa7d233fSMasahiro Yamada		echo "+++ linux/.config"
107aa7d233fSMasahiro Yamada		diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
108aa7d233fSMasahiro Yamada	} > debian/patches/config.patch
109aa7d233fSMasahiro Yamada	echo config.patch > debian/patches/series
110aa7d233fSMasahiro Yamada
111aa7d233fSMasahiro Yamada	"${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
112aa7d233fSMasahiro Yamada	if [ -s debian/patches/diff.patch ]; then
113aa7d233fSMasahiro Yamada		sed -i "
114aa7d233fSMasahiro Yamada			1iSubject: Add local diff
115aa7d233fSMasahiro Yamada			1iAuthor: ${maintainer}
116aa7d233fSMasahiro Yamada			1i
117aa7d233fSMasahiro Yamada		" debian/patches/diff.patch
118aa7d233fSMasahiro Yamada
119aa7d233fSMasahiro Yamada		echo diff.patch >> debian/patches/series
120aa7d233fSMasahiro Yamada	else
121aa7d233fSMasahiro Yamada		rm -f debian/patches/diff.patch
122aa7d233fSMasahiro Yamada	fi
123aa7d233fSMasahiro Yamada}
124aa7d233fSMasahiro Yamada
1257bf4582dSMasahiro Yamadarm -rf debian
126aa7d233fSMasahiro Yamadamkdir debian
127aa7d233fSMasahiro Yamada
128aa7d233fSMasahiro Yamadaemail=${DEBEMAIL-$EMAIL}
129aa7d233fSMasahiro Yamada
130aa7d233fSMasahiro Yamada# use email string directly if it contains <email>
131aa7d233fSMasahiro Yamadaif echo "${email}" | grep -q '<.*>'; then
132aa7d233fSMasahiro Yamada	maintainer=${email}
133aa7d233fSMasahiro Yamadaelse
134aa7d233fSMasahiro Yamada	# or construct the maintainer string
135aa7d233fSMasahiro Yamada	user=${KBUILD_BUILD_USER-$(id -nu)}
136aa7d233fSMasahiro Yamada	name=${DEBFULLNAME-${user}}
137aa7d233fSMasahiro Yamada	if [ -z "${email}" ]; then
138aa7d233fSMasahiro Yamada		buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
139aa7d233fSMasahiro Yamada		email="${user}@${buildhost}"
140aa7d233fSMasahiro Yamada	fi
141aa7d233fSMasahiro Yamada	maintainer="${name} <${email}>"
142aa7d233fSMasahiro Yamadafi
143aa7d233fSMasahiro Yamada
144aa7d233fSMasahiro Yamadaif [ "$1" = --need-source ]; then
145aa7d233fSMasahiro Yamada	gen_source
146aa7d233fSMasahiro Yamadafi
1477bf4582dSMasahiro Yamada
148b41d920aSRiku Voipio# Some variables and settings used throughout the script
149b41d920aSRiku Voipioversion=$KERNELRELEASE
150b41d920aSRiku Voipioif [ -n "$KDEB_PKGVERSION" ]; then
151b41d920aSRiku Voipio	packageversion=$KDEB_PKGVERSION
152b41d920aSRiku Voipioelse
15305e96e96SMasahiro Yamada	packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/init/build-version)
154b41d920aSRiku Voipiofi
1556eabebb1SMasahiro Yamadasourcename=${KDEB_SOURCENAME:-linux-upstream}
156b41d920aSRiku Voipio
157b41d920aSRiku Voipioif [ "$ARCH" = "um" ] ; then
1580fa21cf4SMasahiro Yamada	packagename=user-mode-linux
1590fa21cf4SMasahiro Yamadaelse
1600fa21cf4SMasahiro Yamada	packagename=linux-image
161b41d920aSRiku Voipiofi
162b41d920aSRiku Voipio
1630fa21cf4SMasahiro Yamadadebarch=
1640fa21cf4SMasahiro Yamadaset_debarch
1650fa21cf4SMasahiro Yamada
166b41d920aSRiku Voipio# Try to determine distribution
167b41d920aSRiku Voipioif [ -n "$KDEB_CHANGELOG_DIST" ]; then
168b41d920aSRiku Voipio        distribution=$KDEB_CHANGELOG_DIST
169b41d920aSRiku Voipio# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
170b41d920aSRiku Voipioelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
171b41d920aSRiku Voipio        : # nothing to do in this case
172b41d920aSRiku Voipioelse
173b41d920aSRiku Voipio        distribution="unstable"
174b41d920aSRiku Voipio        echo >&2 "Using default distribution of 'unstable' in the changelog"
175b41d920aSRiku Voipio        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
176b41d920aSRiku Voipiofi
177b41d920aSRiku Voipio
178b41d920aSRiku Voipioecho $debarch > debian/arch
1798ffdc54bSArd Biesheuvelextra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)"
1807e548e9aSMasahiro Yamadaextra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)"
181b41d920aSRiku Voipio
182b41d920aSRiku Voipio# Generate a simple changelog template
183b41d920aSRiku Voipiocat <<EOF > debian/changelog
184b41d920aSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low
185b41d920aSRiku Voipio
186b41d920aSRiku Voipio  * Custom built Linux kernel.
187b41d920aSRiku Voipio
188b41d920aSRiku Voipio -- $maintainer  $(date -R)
189b41d920aSRiku VoipioEOF
190b41d920aSRiku Voipio
191b41d920aSRiku Voipio# Generate copyright file
192b41d920aSRiku Voipiocat <<EOF > debian/copyright
193*8b824220SWoody SuwalskiThis is a packaged upstream version of the Linux kernel.
194b41d920aSRiku Voipio
195b41d920aSRiku VoipioThe sources may be found at most Linux archive sites, including:
196b41d920aSRiku Voipiohttps://www.kernel.org/pub/linux/kernel
197b41d920aSRiku Voipio
198b41d920aSRiku VoipioCopyright: 1991 - 2018 Linus Torvalds and others.
199b41d920aSRiku Voipio
200b41d920aSRiku VoipioThe git repository for mainline kernel development is at:
201b41d920aSRiku Voipiogit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
202b41d920aSRiku Voipio
203b41d920aSRiku Voipio    This program is free software; you can redistribute it and/or modify
204b41d920aSRiku Voipio    it under the terms of the GNU General Public License as published by
205b41d920aSRiku Voipio    the Free Software Foundation; version 2 dated June, 1991.
206b41d920aSRiku Voipio
207b41d920aSRiku VoipioOn Debian GNU/Linux systems, the complete text of the GNU General Public
208b41d920aSRiku VoipioLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
209b41d920aSRiku VoipioEOF
210b41d920aSRiku Voipio
211b41d920aSRiku Voipio# Generate a control file
212b41d920aSRiku Voipiocat <<EOF > debian/control
213b41d920aSRiku VoipioSource: $sourcename
214b41d920aSRiku VoipioSection: kernel
215b41d920aSRiku VoipioPriority: optional
216b41d920aSRiku VoipioMaintainer: $maintainer
2173e854180SGuillem JoverRules-Requires-Root: no
21836862e14SMasahiro YamadaBuild-Depends: bc, debhelper, rsync, kmod, cpio, bison, flex $extra_build_depends
21916a122c7SAlexander A. KlimovHomepage: https://www.kernel.org/
220b41d920aSRiku Voipio
2210fa21cf4SMasahiro YamadaPackage: $packagename-$version
222b41d920aSRiku VoipioArchitecture: $debarch
223b41d920aSRiku VoipioDescription: Linux kernel, version $version
224b41d920aSRiku Voipio This package contains the Linux kernel, modules and corresponding other
225b41d920aSRiku Voipio files, version: $version.
22636862e14SMasahiro YamadaEOF
22736862e14SMasahiro Yamada
22836862e14SMasahiro Yamadaif [ "${SRCARCH}" != um ]; then
22936862e14SMasahiro Yamadacat <<EOF >> debian/control
230b41d920aSRiku Voipio
231b41d920aSRiku VoipioPackage: linux-libc-dev
232b41d920aSRiku VoipioSection: devel
233b41d920aSRiku VoipioProvides: linux-kernel-headers
234b41d920aSRiku VoipioArchitecture: $debarch
235b41d920aSRiku VoipioDescription: Linux support headers for userspace development
236b41d920aSRiku Voipio This package provides userspaces headers from the Linux kernel.  These headers
237b41d920aSRiku Voipio are used by the installed headers for GNU glibc and other system libraries.
2385a464217SCedric HombourgerMulti-Arch: same
239d9dac147SReinhard KarcherEOF
240d9dac147SReinhard Karcher
241bac977cbSMasahiro Yamadaif is_enabled CONFIG_MODULES; then
242bac977cbSMasahiro Yamadacat <<EOF >> debian/control
243bac977cbSMasahiro Yamada
2440fa21cf4SMasahiro YamadaPackage: linux-headers-$version
245bac977cbSMasahiro YamadaArchitecture: $debarch
246bac977cbSMasahiro YamadaDescription: Linux kernel headers for $version on $debarch
247bac977cbSMasahiro Yamada This package provides kernel header files for $version on $debarch
248bac977cbSMasahiro Yamada .
249bac977cbSMasahiro Yamada This is useful for people who need to build external modules
250bac977cbSMasahiro YamadaEOF
251bac977cbSMasahiro Yamadafi
25236862e14SMasahiro Yamadafi
253bac977cbSMasahiro Yamada
254d9dac147SReinhard Karcherif is_enabled CONFIG_DEBUG_INFO; then
255d9dac147SReinhard Karchercat <<EOF >> debian/control
256b41d920aSRiku Voipio
2570fa21cf4SMasahiro YamadaPackage: linux-image-$version-dbg
258b41d920aSRiku VoipioSection: debug
259b41d920aSRiku VoipioArchitecture: $debarch
260b41d920aSRiku VoipioDescription: Linux kernel debugging symbols for $version
261b41d920aSRiku Voipio This package will come in handy if you need to debug the kernel. It provides
262b41d920aSRiku Voipio all the necessary debug symbols for the kernel and its modules.
263b41d920aSRiku VoipioEOF
264d9dac147SReinhard Karcherfi
265b41d920aSRiku Voipio
266b41d920aSRiku Voipiocat <<EOF > debian/rules
267b41d920aSRiku Voipio#!$(command -v $MAKE) -f
268b41d920aSRiku Voipio
269175209ccSMasahiro Yamadasrctree ?= .
2702fd6c455SMasahiro YamadaKERNELRELEASE = ${KERNELRELEASE}
271175209ccSMasahiro Yamada
27276c37668SGuillem Joverbuild-indep:
27376c37668SGuillem Joverbuild-arch:
2743ab18a62SMasahiro Yamada	\$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
2757a531c21SMasahiro Yamada	KERNELRELEASE=\$(KERNELRELEASE) \
2763ab18a62SMasahiro Yamada	\$(shell \$(srctree)/scripts/package/deb-build-option) \
2773ab18a62SMasahiro Yamada	olddefconfig all
278b41d920aSRiku Voipio
27976c37668SGuillem Joverbuild: build-arch
28076c37668SGuillem Jover
28176c37668SGuillem Joverbinary-indep:
28276c37668SGuillem Joverbinary-arch: build-arch
2832fd6c455SMasahiro Yamada	\$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} \
2842fd6c455SMasahiro Yamada	KERNELRELEASE=\$(KERNELRELEASE) intdeb-pkg
2852fd6c455SMasahiro Yamada
286b41d920aSRiku Voipioclean:
287c9f9cf25SBastian Germann	rm -rf debian/files debian/linux-*
288c5bf2efbSMasahiro Yamada	\$(MAKE) -f \$(srctree)/Makefile ARCH=${ARCH} clean
289b41d920aSRiku Voipio
290b41d920aSRiku Voipiobinary: binary-arch
291b41d920aSRiku VoipioEOF
292f6d9db63SArseny Maslennikovchmod +x debian/rules
293b41d920aSRiku Voipio
294b41d920aSRiku Voipioexit 0
295