xref: /utopia/UTPA2-700.0.x/projects/build/scripts/package/builddeb (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi#!/bin/sh
2*53ee8cc1Swenshuai.xi#
3*53ee8cc1Swenshuai.xi# builddeb 1.3
4*53ee8cc1Swenshuai.xi# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5*53ee8cc1Swenshuai.xi#
6*53ee8cc1Swenshuai.xi# Simple script to generate a deb package for a Linux kernel. All the
7*53ee8cc1Swenshuai.xi# complexity of what to do with a kernel after it is installed or removed
8*53ee8cc1Swenshuai.xi# is left to other scripts and packages: they can install scripts in the
9*53ee8cc1Swenshuai.xi# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10*53ee8cc1Swenshuai.xi# specified in KDEB_HOOKDIR) that will be called on package install and
11*53ee8cc1Swenshuai.xi# removal.
12*53ee8cc1Swenshuai.xi
13*53ee8cc1Swenshuai.xiset -e
14*53ee8cc1Swenshuai.xi
15*53ee8cc1Swenshuai.xicreate_package() {
16*53ee8cc1Swenshuai.xi	local pname="$1" pdir="$2"
17*53ee8cc1Swenshuai.xi
18*53ee8cc1Swenshuai.xi	cp debian/copyright "$pdir/usr/share/doc/$pname/"
19*53ee8cc1Swenshuai.xi	cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
20*53ee8cc1Swenshuai.xi	gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
21*53ee8cc1Swenshuai.xi	sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
22*53ee8cc1Swenshuai.xi		| xargs -r0 md5sum > DEBIAN/md5sums"
23*53ee8cc1Swenshuai.xi
24*53ee8cc1Swenshuai.xi	# Fix ownership and permissions
25*53ee8cc1Swenshuai.xi	chown -R root:root "$pdir"
26*53ee8cc1Swenshuai.xi	chmod -R go-w "$pdir"
27*53ee8cc1Swenshuai.xi
28*53ee8cc1Swenshuai.xi	# Attempt to find the correct Debian architecture
29*53ee8cc1Swenshuai.xi	local forcearch="" debarch=""
30*53ee8cc1Swenshuai.xi	case "$UTS_MACHINE" in
31*53ee8cc1Swenshuai.xi	i386|ia64|alpha)
32*53ee8cc1Swenshuai.xi		debarch="$UTS_MACHINE" ;;
33*53ee8cc1Swenshuai.xi	x86_64)
34*53ee8cc1Swenshuai.xi		debarch=amd64 ;;
35*53ee8cc1Swenshuai.xi	sparc*)
36*53ee8cc1Swenshuai.xi		debarch=sparc ;;
37*53ee8cc1Swenshuai.xi	s390*)
38*53ee8cc1Swenshuai.xi		debarch=s390 ;;
39*53ee8cc1Swenshuai.xi	ppc*)
40*53ee8cc1Swenshuai.xi		debarch=powerpc ;;
41*53ee8cc1Swenshuai.xi	parisc*)
42*53ee8cc1Swenshuai.xi		debarch=hppa ;;
43*53ee8cc1Swenshuai.xi	mips*)
44*53ee8cc1Swenshuai.xi		debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y .config && echo el) ;;
45*53ee8cc1Swenshuai.xi	arm*)
46*53ee8cc1Swenshuai.xi		debarch=arm$(grep -q CONFIG_AEABI=y .config && echo el) ;;
47*53ee8cc1Swenshuai.xi	*)
48*53ee8cc1Swenshuai.xi		echo "" >&2
49*53ee8cc1Swenshuai.xi		echo "** ** **  WARNING  ** ** **" >&2
50*53ee8cc1Swenshuai.xi		echo "" >&2
51*53ee8cc1Swenshuai.xi		echo "Your architecture doesn't have it's equivalent" >&2
52*53ee8cc1Swenshuai.xi		echo "Debian userspace architecture defined!" >&2
53*53ee8cc1Swenshuai.xi		echo "Falling back to using your current userspace instead!" >&2
54*53ee8cc1Swenshuai.xi		echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
55*53ee8cc1Swenshuai.xi		echo "" >&2
56*53ee8cc1Swenshuai.xi	esac
57*53ee8cc1Swenshuai.xi	if [ -n "$KBUILD_DEBARCH" ] ; then
58*53ee8cc1Swenshuai.xi		debarch="$KBUILD_DEBARCH"
59*53ee8cc1Swenshuai.xi	fi
60*53ee8cc1Swenshuai.xi	if [ -n "$debarch" ] ; then
61*53ee8cc1Swenshuai.xi		forcearch="-DArchitecture=$debarch"
62*53ee8cc1Swenshuai.xi	fi
63*53ee8cc1Swenshuai.xi
64*53ee8cc1Swenshuai.xi	# Create the package
65*53ee8cc1Swenshuai.xi	dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
66*53ee8cc1Swenshuai.xi	dpkg --build "$pdir" ..
67*53ee8cc1Swenshuai.xi}
68*53ee8cc1Swenshuai.xi
69*53ee8cc1Swenshuai.xi# Some variables and settings used throughout the script
70*53ee8cc1Swenshuai.xiversion=$KERNELRELEASE
71*53ee8cc1Swenshuai.xirevision=$(cat .version)
72*53ee8cc1Swenshuai.xiif [ -n "$KDEB_PKGVERSION" ]; then
73*53ee8cc1Swenshuai.xi	packageversion=$KDEB_PKGVERSION
74*53ee8cc1Swenshuai.xielse
75*53ee8cc1Swenshuai.xi	packageversion=$version-$revision
76*53ee8cc1Swenshuai.xifi
77*53ee8cc1Swenshuai.xitmpdir="$objtree/debian/tmp"
78*53ee8cc1Swenshuai.xifwdir="$objtree/debian/fwtmp"
79*53ee8cc1Swenshuai.xikernel_headers_dir="$objtree/debian/hdrtmp"
80*53ee8cc1Swenshuai.xilibc_headers_dir="$objtree/debian/headertmp"
81*53ee8cc1Swenshuai.xipackagename=linux-image-$version
82*53ee8cc1Swenshuai.xifwpackagename=linux-firmware-image
83*53ee8cc1Swenshuai.xikernel_headers_packagename=linux-headers-$version
84*53ee8cc1Swenshuai.xilibc_headers_packagename=linux-libc-dev
85*53ee8cc1Swenshuai.xi
86*53ee8cc1Swenshuai.xiif [ "$ARCH" = "um" ] ; then
87*53ee8cc1Swenshuai.xi	packagename=user-mode-linux-$version
88*53ee8cc1Swenshuai.xifi
89*53ee8cc1Swenshuai.xi
90*53ee8cc1Swenshuai.xi# Setup the directory structure
91*53ee8cc1Swenshuai.xirm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
92*53ee8cc1Swenshuai.ximkdir -m 755 -p "$tmpdir/DEBIAN"
93*53ee8cc1Swenshuai.ximkdir -p  "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
94*53ee8cc1Swenshuai.ximkdir -m 755 -p "$fwdir/DEBIAN"
95*53ee8cc1Swenshuai.ximkdir -p "$fwdir/lib" "$fwdir/usr/share/doc/$fwpackagename"
96*53ee8cc1Swenshuai.ximkdir -m 755 -p "$libc_headers_dir/DEBIAN"
97*53ee8cc1Swenshuai.ximkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
98*53ee8cc1Swenshuai.ximkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
99*53ee8cc1Swenshuai.ximkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
100*53ee8cc1Swenshuai.xiif [ "$ARCH" = "um" ] ; then
101*53ee8cc1Swenshuai.xi	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
102*53ee8cc1Swenshuai.xifi
103*53ee8cc1Swenshuai.xi
104*53ee8cc1Swenshuai.xi# Build and install the kernel
105*53ee8cc1Swenshuai.xiif [ "$ARCH" = "um" ] ; then
106*53ee8cc1Swenshuai.xi	$MAKE linux
107*53ee8cc1Swenshuai.xi	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
108*53ee8cc1Swenshuai.xi	cp .config "$tmpdir/usr/share/doc/$packagename/config"
109*53ee8cc1Swenshuai.xi	gzip "$tmpdir/usr/share/doc/$packagename/config"
110*53ee8cc1Swenshuai.xi	cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
111*53ee8cc1Swenshuai.xielse
112*53ee8cc1Swenshuai.xi	cp System.map "$tmpdir/boot/System.map-$version"
113*53ee8cc1Swenshuai.xi	cp .config "$tmpdir/boot/config-$version"
114*53ee8cc1Swenshuai.xi	# Not all arches include the boot path in KBUILD_IMAGE
115*53ee8cc1Swenshuai.xi	if [ -e $KBUILD_IMAGE ]; then
116*53ee8cc1Swenshuai.xi		cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
117*53ee8cc1Swenshuai.xi	else
118*53ee8cc1Swenshuai.xi		cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
119*53ee8cc1Swenshuai.xi	fi
120*53ee8cc1Swenshuai.xifi
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xiif grep -q '^CONFIG_MODULES=y' .config ; then
123*53ee8cc1Swenshuai.xi	INSTALL_MOD_PATH="$tmpdir" make KBUILD_SRC= modules_install
124*53ee8cc1Swenshuai.xi	if [ "$ARCH" = "um" ] ; then
125*53ee8cc1Swenshuai.xi		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
126*53ee8cc1Swenshuai.xi		rmdir "$tmpdir/lib/modules/$version"
127*53ee8cc1Swenshuai.xi	fi
128*53ee8cc1Swenshuai.xifi
129*53ee8cc1Swenshuai.xi
130*53ee8cc1Swenshuai.ximake headers_check
131*53ee8cc1Swenshuai.ximake headers_install INSTALL_HDR_PATH="$libc_headers_dir/usr"
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi# Install the maintainer scripts
134*53ee8cc1Swenshuai.xi# Note: hook scripts under /etc/kernel are also executed by official Debian
135*53ee8cc1Swenshuai.xi# kernel packages, as well as kernel packages built using make-kpkg
136*53ee8cc1Swenshuai.xidebhookdir=${KDEB_HOOKDIR:-/etc/kernel}
137*53ee8cc1Swenshuai.xifor script in postinst postrm preinst prerm ; do
138*53ee8cc1Swenshuai.xi	mkdir -p "$tmpdir$debhookdir/$script.d"
139*53ee8cc1Swenshuai.xi	cat <<EOF > "$tmpdir/DEBIAN/$script"
140*53ee8cc1Swenshuai.xi#!/bin/sh
141*53ee8cc1Swenshuai.xi
142*53ee8cc1Swenshuai.xiset -e
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi# Pass maintainer script parameters to hook scripts
145*53ee8cc1Swenshuai.xiexport DEB_MAINT_PARAMS="\$*"
146*53ee8cc1Swenshuai.xi
147*53ee8cc1Swenshuai.xitest -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
148*53ee8cc1Swenshuai.xiexit 0
149*53ee8cc1Swenshuai.xiEOF
150*53ee8cc1Swenshuai.xi	chmod 755 "$tmpdir/DEBIAN/$script"
151*53ee8cc1Swenshuai.xidone
152*53ee8cc1Swenshuai.xi
153*53ee8cc1Swenshuai.xi# Try to determine maintainer and email values
154*53ee8cc1Swenshuai.xiif [ -n "$DEBEMAIL" ]; then
155*53ee8cc1Swenshuai.xi       email=$DEBEMAIL
156*53ee8cc1Swenshuai.xielif [ -n "$EMAIL" ]; then
157*53ee8cc1Swenshuai.xi       email=$EMAIL
158*53ee8cc1Swenshuai.xielse
159*53ee8cc1Swenshuai.xi       email=$(id -nu)@$(hostname -f)
160*53ee8cc1Swenshuai.xifi
161*53ee8cc1Swenshuai.xiif [ -n "$DEBFULLNAME" ]; then
162*53ee8cc1Swenshuai.xi       name=$DEBFULLNAME
163*53ee8cc1Swenshuai.xielif [ -n "$NAME" ]; then
164*53ee8cc1Swenshuai.xi       name=$NAME
165*53ee8cc1Swenshuai.xielse
166*53ee8cc1Swenshuai.xi       name="Anonymous"
167*53ee8cc1Swenshuai.xifi
168*53ee8cc1Swenshuai.ximaintainer="$name <$email>"
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi# Generate a simple changelog template
171*53ee8cc1Swenshuai.xicat <<EOF > debian/changelog
172*53ee8cc1Swenshuai.xilinux-upstream ($packageversion) unstable; urgency=low
173*53ee8cc1Swenshuai.xi
174*53ee8cc1Swenshuai.xi  * Custom built Linux kernel.
175*53ee8cc1Swenshuai.xi
176*53ee8cc1Swenshuai.xi -- $maintainer  $(date -R)
177*53ee8cc1Swenshuai.xiEOF
178*53ee8cc1Swenshuai.xi
179*53ee8cc1Swenshuai.xi# Generate copyright file
180*53ee8cc1Swenshuai.xicat <<EOF > debian/copyright
181*53ee8cc1Swenshuai.xiThis is a packacked upstream version of the Linux kernel.
182*53ee8cc1Swenshuai.xi
183*53ee8cc1Swenshuai.xiThe sources may be found at most Linux ftp sites, including:
184*53ee8cc1Swenshuai.xiftp://ftp.kernel.org/pub/linux/kernel
185*53ee8cc1Swenshuai.xi
186*53ee8cc1Swenshuai.xiCopyright: 1991 - 2009 Linus Torvalds and others.
187*53ee8cc1Swenshuai.xi
188*53ee8cc1Swenshuai.xiThe git repository for mainline kernel development is at:
189*53ee8cc1Swenshuai.xigit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
190*53ee8cc1Swenshuai.xi
191*53ee8cc1Swenshuai.xi    This program is free software; you can redistribute it and/or modify
192*53ee8cc1Swenshuai.xi    it under the terms of the GNU General Public License as published by
193*53ee8cc1Swenshuai.xi    the Free Software Foundation; version 2 dated June, 1991.
194*53ee8cc1Swenshuai.xi
195*53ee8cc1Swenshuai.xiOn Debian GNU/Linux systems, the complete text of the GNU General Public
196*53ee8cc1Swenshuai.xiLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
197*53ee8cc1Swenshuai.xiEOF
198*53ee8cc1Swenshuai.xi
199*53ee8cc1Swenshuai.xi# Generate a control file
200*53ee8cc1Swenshuai.xicat <<EOF > debian/control
201*53ee8cc1Swenshuai.xiSource: linux-upstream
202*53ee8cc1Swenshuai.xiSection: kernel
203*53ee8cc1Swenshuai.xiPriority: optional
204*53ee8cc1Swenshuai.xiMaintainer: $maintainer
205*53ee8cc1Swenshuai.xiStandards-Version: 3.8.4
206*53ee8cc1Swenshuai.xiHomepage: http://www.kernel.org/
207*53ee8cc1Swenshuai.xiEOF
208*53ee8cc1Swenshuai.xi
209*53ee8cc1Swenshuai.xiif [ "$ARCH" = "um" ]; then
210*53ee8cc1Swenshuai.xi	cat <<EOF >> debian/control
211*53ee8cc1Swenshuai.xi
212*53ee8cc1Swenshuai.xiPackage: $packagename
213*53ee8cc1Swenshuai.xiProvides: linux-image, linux-image-2.6, linux-modules-$version
214*53ee8cc1Swenshuai.xiArchitecture: any
215*53ee8cc1Swenshuai.xiDescription: User Mode Linux kernel, version $version
216*53ee8cc1Swenshuai.xi User-mode Linux is a port of the Linux kernel to its own system call
217*53ee8cc1Swenshuai.xi interface.  It provides a kind of virtual machine, which runs Linux
218*53ee8cc1Swenshuai.xi as a user process under another Linux kernel.  This is useful for
219*53ee8cc1Swenshuai.xi kernel development, sandboxes, jails, experimentation, and
220*53ee8cc1Swenshuai.xi many other things.
221*53ee8cc1Swenshuai.xi .
222*53ee8cc1Swenshuai.xi This package contains the Linux kernel, modules and corresponding other
223*53ee8cc1Swenshuai.xi files, version: $version.
224*53ee8cc1Swenshuai.xiEOF
225*53ee8cc1Swenshuai.xi
226*53ee8cc1Swenshuai.xielse
227*53ee8cc1Swenshuai.xi	cat <<EOF >> debian/control
228*53ee8cc1Swenshuai.xi
229*53ee8cc1Swenshuai.xiPackage: $packagename
230*53ee8cc1Swenshuai.xiProvides: linux-image, linux-image-2.6, linux-modules-$version
231*53ee8cc1Swenshuai.xiSuggests: $fwpackagename
232*53ee8cc1Swenshuai.xiArchitecture: any
233*53ee8cc1Swenshuai.xiDescription: Linux kernel, version $version
234*53ee8cc1Swenshuai.xi This package contains the Linux kernel, modules and corresponding other
235*53ee8cc1Swenshuai.xi files, version: $version.
236*53ee8cc1Swenshuai.xiEOF
237*53ee8cc1Swenshuai.xi
238*53ee8cc1Swenshuai.xifi
239*53ee8cc1Swenshuai.xi
240*53ee8cc1Swenshuai.xi# Build header package
241*53ee8cc1Swenshuai.xi(cd $srctree; find . -name Makefile -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
242*53ee8cc1Swenshuai.xi(cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
243*53ee8cc1Swenshuai.xi(cd $objtree; find .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
244*53ee8cc1Swenshuai.xidestdir=$kernel_headers_dir/usr/src/linux-headers-$version
245*53ee8cc1Swenshuai.ximkdir -p "$destdir"
246*53ee8cc1Swenshuai.xi(cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
247*53ee8cc1Swenshuai.xi(cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
248*53ee8cc1Swenshuai.xirm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
249*53ee8cc1Swenshuai.xiarch=$(dpkg --print-architecture)
250*53ee8cc1Swenshuai.xi
251*53ee8cc1Swenshuai.xicat <<EOF >> debian/control
252*53ee8cc1Swenshuai.xi
253*53ee8cc1Swenshuai.xiPackage: $kernel_headers_packagename
254*53ee8cc1Swenshuai.xiProvides: linux-headers, linux-headers-2.6
255*53ee8cc1Swenshuai.xiArchitecture: $arch
256*53ee8cc1Swenshuai.xiDescription: Linux kernel headers for $KERNELRELEASE on $arch
257*53ee8cc1Swenshuai.xi This package provides kernel header files for $KERNELRELEASE on $arch
258*53ee8cc1Swenshuai.xi .
259*53ee8cc1Swenshuai.xi This is useful for people who need to build external modules
260*53ee8cc1Swenshuai.xiEOF
261*53ee8cc1Swenshuai.xi
262*53ee8cc1Swenshuai.xicreate_package "$kernel_headers_packagename" "$kernel_headers_dir"
263*53ee8cc1Swenshuai.xi
264*53ee8cc1Swenshuai.xi# Do we have firmware? Move it out of the way and build it into a package.
265*53ee8cc1Swenshuai.xiif [ -e "$tmpdir/lib/firmware" ]; then
266*53ee8cc1Swenshuai.xi	mv "$tmpdir/lib/firmware" "$fwdir/lib/"
267*53ee8cc1Swenshuai.xi
268*53ee8cc1Swenshuai.xi	cat <<EOF >> debian/control
269*53ee8cc1Swenshuai.xi
270*53ee8cc1Swenshuai.xiPackage: $fwpackagename
271*53ee8cc1Swenshuai.xiArchitecture: all
272*53ee8cc1Swenshuai.xiDescription: Linux kernel firmware, version $version
273*53ee8cc1Swenshuai.xi This package contains firmware from the Linux kernel, version $version.
274*53ee8cc1Swenshuai.xiEOF
275*53ee8cc1Swenshuai.xi
276*53ee8cc1Swenshuai.xi	create_package "$fwpackagename" "$fwdir"
277*53ee8cc1Swenshuai.xifi
278*53ee8cc1Swenshuai.xi
279*53ee8cc1Swenshuai.xicat <<EOF >> debian/control
280*53ee8cc1Swenshuai.xi
281*53ee8cc1Swenshuai.xiPackage: $libc_headers_packagename
282*53ee8cc1Swenshuai.xiSection: devel
283*53ee8cc1Swenshuai.xiProvides: linux-kernel-headers
284*53ee8cc1Swenshuai.xiArchitecture: any
285*53ee8cc1Swenshuai.xiDescription: Linux support headers for userspace development
286*53ee8cc1Swenshuai.xi This package provides userspaces headers from the Linux kernel.  These headers
287*53ee8cc1Swenshuai.xi are used by the installed headers for GNU glibc and other system libraries.
288*53ee8cc1Swenshuai.xiEOF
289*53ee8cc1Swenshuai.xi
290*53ee8cc1Swenshuai.xicreate_package "$libc_headers_packagename" "$libc_headers_dir"
291*53ee8cc1Swenshuai.xicreate_package "$packagename" "$tmpdir"
292*53ee8cc1Swenshuai.xi
293*53ee8cc1Swenshuai.xiexit 0
294