xref: /linux/scripts/package/mkdebian (revision 75ebcee7699739c0f6c63abcb9f5754538107c62)
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() {
1008d3892cSBen Hutchings	grep -q "^CONFIG_$1=y" $KCONFIG_CONFIG
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
29*75ebcee7SBen Hutchings	i386|ia64|alpha|m68k|riscv*)
30b41d920aSRiku Voipio		debarch="$UTS_MACHINE" ;;
31b41d920aSRiku Voipio	x86_64)
32b41d920aSRiku Voipio		debarch=amd64 ;;
33b41d920aSRiku Voipio	sparc*)
34a27ae285SBen Hutchings		debarch=sparc$(if_enabled_echo 64BIT 64) ;;
35b41d920aSRiku Voipio	s390*)
364260ecd0SBen Hutchings		debarch=s390x ;;
37b41d920aSRiku Voipio	ppc*)
3850d511baSBen Hutchings		if is_enabled 64BIT; then
3950d511baSBen Hutchings			debarch=ppc64$(if_enabled_echo CPU_LITTLE_ENDIAN el)
4050d511baSBen Hutchings		else
4150d511baSBen Hutchings			debarch=powerpc$(if_enabled_echo SPE spe)
4250d511baSBen Hutchings		fi
4350d511baSBen Hutchings		;;
44b41d920aSRiku Voipio	parisc*)
45b41d920aSRiku Voipio		debarch=hppa ;;
46b41d920aSRiku Voipio	mips*)
47159b3794SBen Hutchings		if is_enabled CPU_LITTLE_ENDIAN; then
48679caaf3SBen Hutchings			debarch=mips$(if_enabled_echo 64BIT 64)$(if_enabled_echo CPU_MIPSR6 r6)el
49679caaf3SBen Hutchings		elif is_enabled CPU_MIPSR6; then
50679caaf3SBen Hutchings			debarch=mips$(if_enabled_echo 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*)
5808d3892cSBen Hutchings		if is_enabled AEABI; then
5908d3892cSBen Hutchings			debarch=arm$(if_enabled_echo VFP hf el)
60b41d920aSRiku Voipio		else
61b41d920aSRiku Voipio			debarch=arm
62b41d920aSRiku Voipio		fi
63b41d920aSRiku Voipio		;;
64822f44fbSBen Hutchings	openrisc)
65822f44fbSBen Hutchings		debarch=or1k ;;
66b41d920aSRiku Voipio	*)
67091d30aeSBen Hutchings		debarch=$(dpkg-architecture -qDEB_HOST_ARCH)
68b41d920aSRiku Voipio		echo "" >&2
69b41d920aSRiku Voipio		echo "** ** **  WARNING  ** ** **" >&2
70b41d920aSRiku Voipio		echo "" >&2
71b41d920aSRiku Voipio		echo "Your architecture doesn't have its equivalent" >&2
72b41d920aSRiku Voipio		echo "Debian userspace architecture defined!" >&2
73091d30aeSBen Hutchings		echo "Falling back to the current host architecture ($debarch)." >&2
74b41d920aSRiku Voipio		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
75b41d920aSRiku Voipio		echo "" >&2
76f2abcc13SBen Hutchings		;;
77b41d920aSRiku Voipio	esac
78b41d920aSRiku Voipio}
79b41d920aSRiku Voipio
80b41d920aSRiku Voipio# Some variables and settings used throughout the script
81b41d920aSRiku Voipioversion=$KERNELRELEASE
82b41d920aSRiku Voipioif [ -n "$KDEB_PKGVERSION" ]; then
83b41d920aSRiku Voipio	packageversion=$KDEB_PKGVERSION
84b41d920aSRiku Voipioelse
85b41d920aSRiku Voipio	revision=$(cat .version 2>/dev/null||echo 1)
86b41d920aSRiku Voipio	packageversion=$version-$revision
87b41d920aSRiku Voipiofi
88b41d920aSRiku Voipiosourcename=$KDEB_SOURCENAME
89b41d920aSRiku Voipiopackagename=linux-image-$version
90b41d920aSRiku Voipiokernel_headers_packagename=linux-headers-$version
91b41d920aSRiku Voipiodbg_packagename=$packagename-dbg
92b41d920aSRiku Voipiodebarch=
93b41d920aSRiku Voipioset_debarch
94b41d920aSRiku Voipio
95b41d920aSRiku Voipioif [ "$ARCH" = "um" ] ; then
96b41d920aSRiku Voipio	packagename=user-mode-linux-$version
97b41d920aSRiku Voipiofi
98b41d920aSRiku Voipio
99d5940c60SRiku Voipioemail=${DEBEMAIL-$EMAIL}
100d5940c60SRiku Voipio
101d5940c60SRiku Voipio# use email string directly if it contains <email>
102d5940c60SRiku Voipioif echo $email | grep -q '<.*>'; then
103d5940c60SRiku Voipio	maintainer=$email
104b41d920aSRiku Voipioelse
105d5940c60SRiku Voipio	# or construct the maintainer string
106d5940c60SRiku Voipio	user=${KBUILD_BUILD_USER-$(id -nu)}
107d5940c60SRiku Voipio	name=${DEBFULLNAME-$user}
108d5940c60SRiku Voipio	if [ -z "$email" ]; then
109d5940c60SRiku Voipio		buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
110d5940c60SRiku Voipio		email="$user@$buildhost"
111b41d920aSRiku Voipio	fi
112b41d920aSRiku Voipio	maintainer="$name <$email>"
113d5940c60SRiku Voipiofi
114b41d920aSRiku Voipio
115b41d920aSRiku Voipio# Try to determine distribution
116b41d920aSRiku Voipioif [ -n "$KDEB_CHANGELOG_DIST" ]; then
117b41d920aSRiku Voipio        distribution=$KDEB_CHANGELOG_DIST
118b41d920aSRiku Voipio# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog
119b41d920aSRiku Voipioelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then
120b41d920aSRiku Voipio        : # nothing to do in this case
121b41d920aSRiku Voipioelse
122b41d920aSRiku Voipio        distribution="unstable"
123b41d920aSRiku Voipio        echo >&2 "Using default distribution of 'unstable' in the changelog"
124b41d920aSRiku Voipio        echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
125b41d920aSRiku Voipiofi
126b41d920aSRiku Voipio
127b41d920aSRiku Voipiomkdir -p debian/
128b41d920aSRiku Voipioecho $debarch > debian/arch
129b41d920aSRiku Voipio
130b41d920aSRiku Voipio# Generate a simple changelog template
131b41d920aSRiku Voipiocat <<EOF > debian/changelog
132b41d920aSRiku Voipio$sourcename ($packageversion) $distribution; urgency=low
133b41d920aSRiku Voipio
134b41d920aSRiku Voipio  * Custom built Linux kernel.
135b41d920aSRiku Voipio
136b41d920aSRiku Voipio -- $maintainer  $(date -R)
137b41d920aSRiku VoipioEOF
138b41d920aSRiku Voipio
139b41d920aSRiku Voipio# Generate copyright file
140b41d920aSRiku Voipiocat <<EOF > debian/copyright
141b41d920aSRiku VoipioThis is a packacked upstream version of the Linux kernel.
142b41d920aSRiku Voipio
143b41d920aSRiku VoipioThe sources may be found at most Linux archive sites, including:
144b41d920aSRiku Voipiohttps://www.kernel.org/pub/linux/kernel
145b41d920aSRiku Voipio
146b41d920aSRiku VoipioCopyright: 1991 - 2018 Linus Torvalds and others.
147b41d920aSRiku Voipio
148b41d920aSRiku VoipioThe git repository for mainline kernel development is at:
149b41d920aSRiku Voipiogit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
150b41d920aSRiku Voipio
151b41d920aSRiku Voipio    This program is free software; you can redistribute it and/or modify
152b41d920aSRiku Voipio    it under the terms of the GNU General Public License as published by
153b41d920aSRiku Voipio    the Free Software Foundation; version 2 dated June, 1991.
154b41d920aSRiku Voipio
155b41d920aSRiku VoipioOn Debian GNU/Linux systems, the complete text of the GNU General Public
156b41d920aSRiku VoipioLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
157b41d920aSRiku VoipioEOF
158b41d920aSRiku Voipio
159b41d920aSRiku Voipio# Generate a control file
160b41d920aSRiku Voipiocat <<EOF > debian/control
161b41d920aSRiku VoipioSource: $sourcename
162b41d920aSRiku VoipioSection: kernel
163b41d920aSRiku VoipioPriority: optional
164b41d920aSRiku VoipioMaintainer: $maintainer
165b41d920aSRiku VoipioBuild-Depends: bc, kmod, cpio
166b41d920aSRiku VoipioHomepage: http://www.kernel.org/
167b41d920aSRiku Voipio
168b41d920aSRiku VoipioPackage: $packagename
169b41d920aSRiku VoipioArchitecture: $debarch
170b41d920aSRiku VoipioDescription: Linux kernel, version $version
171b41d920aSRiku Voipio This package contains the Linux kernel, modules and corresponding other
172b41d920aSRiku Voipio files, version: $version.
173b41d920aSRiku Voipio
174b41d920aSRiku VoipioPackage: $kernel_headers_packagename
175b41d920aSRiku VoipioArchitecture: $debarch
176b41d920aSRiku VoipioDescription: Linux kernel headers for $version on $debarch
177b41d920aSRiku Voipio This package provides kernel header files for $version on $debarch
178b41d920aSRiku Voipio .
179b41d920aSRiku Voipio This is useful for people who need to build external modules
180b41d920aSRiku Voipio
181b41d920aSRiku VoipioPackage: linux-libc-dev
182b41d920aSRiku VoipioSection: devel
183b41d920aSRiku VoipioProvides: linux-kernel-headers
184b41d920aSRiku VoipioArchitecture: $debarch
185b41d920aSRiku VoipioDescription: Linux support headers for userspace development
186b41d920aSRiku Voipio This package provides userspaces headers from the Linux kernel.  These headers
187b41d920aSRiku Voipio are used by the installed headers for GNU glibc and other system libraries.
188b41d920aSRiku Voipio
189b41d920aSRiku VoipioPackage: $dbg_packagename
190b41d920aSRiku VoipioSection: debug
191b41d920aSRiku VoipioArchitecture: $debarch
192b41d920aSRiku VoipioDescription: Linux kernel debugging symbols for $version
193b41d920aSRiku Voipio This package will come in handy if you need to debug the kernel. It provides
194b41d920aSRiku Voipio all the necessary debug symbols for the kernel and its modules.
195b41d920aSRiku VoipioEOF
196b41d920aSRiku Voipio
197b41d920aSRiku Voipiocat <<EOF > debian/rules
198b41d920aSRiku Voipio#!$(command -v $MAKE) -f
199b41d920aSRiku Voipio
200b41d920aSRiku Voipiobuild:
201b41d920aSRiku Voipio	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC=
202b41d920aSRiku Voipio
203b41d920aSRiku Voipiobinary-arch:
204b41d920aSRiku Voipio	\$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg
205b41d920aSRiku Voipio
206b41d920aSRiku Voipioclean:
207b41d920aSRiku Voipio	rm -rf debian/*tmp debian/files
208b41d920aSRiku Voipio	\$(MAKE) clean
209b41d920aSRiku Voipio
210b41d920aSRiku Voipiobinary: binary-arch
211b41d920aSRiku VoipioEOF
212b41d920aSRiku Voipio
213b41d920aSRiku Voipioexit 0
214