cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

builddeb (7305B)


      1#!/bin/sh
      2#
      3# builddeb 1.3
      4# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
      5#
      6# Simple script to generate a deb package for a Linux kernel. All the
      7# complexity of what to do with a kernel after it is installed or removed
      8# is left to other scripts and packages: they can install scripts in the
      9# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
     10# specified in KDEB_HOOKDIR) that will be called on package install and
     11# removal.
     12
     13set -e
     14
     15is_enabled() {
     16	grep -q "^$1=y" include/config/auto.conf
     17}
     18
     19if_enabled_echo() {
     20	if is_enabled "$1"; then
     21		echo -n "$2"
     22	elif [ $# -ge 3 ]; then
     23		echo -n "$3"
     24	fi
     25}
     26
     27create_package() {
     28	local pname="$1" pdir="$2"
     29	local dpkg_deb_opts
     30
     31	mkdir -m 755 -p "$pdir/DEBIAN"
     32	mkdir -p "$pdir/usr/share/doc/$pname"
     33	cp debian/copyright "$pdir/usr/share/doc/$pname/"
     34	cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
     35	gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
     36	sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
     37		| xargs -r0 md5sum > DEBIAN/md5sums"
     38
     39	# Fix ownership and permissions
     40	if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then
     41		dpkg_deb_opts="--root-owner-group"
     42	else
     43		chown -R root:root "$pdir"
     44	fi
     45	chmod -R go-w "$pdir"
     46	# in case we are in a restrictive umask environment like 0077
     47	chmod -R a+rX "$pdir"
     48	# in case we build in a setuid/setgid directory
     49	chmod -R ug-s "$pdir"
     50
     51	# Create the package
     52	dpkg-gencontrol -p$pname -P"$pdir"
     53	dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" ..
     54}
     55
     56deploy_kernel_headers () {
     57	pdir=$1
     58
     59	rm -rf $pdir
     60
     61	(
     62		cd $srctree
     63		find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
     64		find include scripts -type f -o -type l
     65		find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
     66		find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
     67	) > debian/hdrsrcfiles
     68
     69	{
     70		if is_enabled CONFIG_OBJTOOL; then
     71			echo tools/objtool/objtool
     72		fi
     73
     74		find arch/$SRCARCH/include Module.symvers include scripts -type f
     75
     76		if is_enabled CONFIG_GCC_PLUGINS; then
     77			find scripts/gcc-plugins -name \*.so
     78		fi
     79	} > debian/hdrobjfiles
     80
     81	destdir=$pdir/usr/src/linux-headers-$version
     82	mkdir -p $destdir
     83	tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir
     84	tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir
     85	rm -f debian/hdrsrcfiles debian/hdrobjfiles
     86
     87	# copy .config manually to be where it's expected to be
     88	cp $KCONFIG_CONFIG $destdir/.config
     89
     90	mkdir -p $pdir/lib/modules/$version/
     91	ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build
     92}
     93
     94deploy_libc_headers () {
     95	pdir=$1
     96
     97	rm -rf $pdir
     98
     99	$MAKE -f $srctree/Makefile headers
    100	$MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr
    101
    102	# move asm headers to /usr/include/<libc-machine>/asm to match the structure
    103	# used by Debian-based distros (to support multi-arch)
    104	host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH)
    105	mkdir $pdir/usr/include/$host_arch
    106	mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/
    107}
    108
    109version=$KERNELRELEASE
    110tmpdir=debian/linux-image
    111dbg_dir=debian/linux-image-dbg
    112packagename=linux-image-$version
    113dbg_packagename=$packagename-dbg
    114
    115if [ "$ARCH" = "um" ] ; then
    116	packagename=user-mode-linux-$version
    117fi
    118
    119# Not all arches have the same installed path in debian
    120# XXX: have each arch Makefile export a variable of the canonical image install
    121# path instead
    122case $ARCH in
    123um)
    124	installed_image_path="usr/bin/linux-$version"
    125	;;
    126parisc|mips|powerpc)
    127	installed_image_path="boot/vmlinux-$version"
    128	;;
    129*)
    130	installed_image_path="boot/vmlinuz-$version"
    131esac
    132
    133BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes)
    134
    135# Setup the directory structure
    136rm -rf "$tmpdir" "$dbg_dir" debian/files
    137mkdir -m 755 -p "$tmpdir/DEBIAN"
    138mkdir -p "$tmpdir/lib" "$tmpdir/boot"
    139
    140# Install the kernel
    141if [ "$ARCH" = "um" ] ; then
    142	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
    143	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
    144	cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
    145	gzip "$tmpdir/usr/share/doc/$packagename/config"
    146else
    147	cp System.map "$tmpdir/boot/System.map-$version"
    148	cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
    149fi
    150cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path"
    151
    152if is_enabled CONFIG_OF_EARLY_FLATTREE; then
    153	# Only some architectures with OF support have this target
    154	if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then
    155		$MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
    156	fi
    157fi
    158
    159if is_enabled CONFIG_MODULES; then
    160	INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install
    161	rm -f "$tmpdir/lib/modules/$version/build"
    162	rm -f "$tmpdir/lib/modules/$version/source"
    163	if [ "$ARCH" = "um" ] ; then
    164		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
    165		rmdir "$tmpdir/lib/modules/$version"
    166	fi
    167	if [ -n "$BUILD_DEBUG" ] ; then
    168		for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
    169			module=lib/modules/$module
    170			mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
    171			# only keep debug symbols in the debug file
    172			$OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
    173			# strip original module from debug symbols
    174			$OBJCOPY --strip-debug $tmpdir/$module
    175			# then add a link to those
    176			$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
    177		done
    178
    179		# resign stripped modules
    180		if is_enabled CONFIG_MODULE_SIG_ALL; then
    181			INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign
    182		fi
    183	fi
    184fi
    185
    186# Install the maintainer scripts
    187# Note: hook scripts under /etc/kernel are also executed by official Debian
    188# kernel packages, as well as kernel packages built using make-kpkg.
    189# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
    190# so do we; recent versions of dracut and initramfs-tools will obey this.
    191debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
    192for script in postinst postrm preinst prerm ; do
    193	mkdir -p "$tmpdir$debhookdir/$script.d"
    194	cat <<EOF > "$tmpdir/DEBIAN/$script"
    195#!/bin/sh
    196
    197set -e
    198
    199# Pass maintainer script parameters to hook scripts
    200export DEB_MAINT_PARAMS="\$*"
    201
    202# Tell initramfs builder whether it's wanted
    203export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No)
    204
    205test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
    206exit 0
    207EOF
    208	chmod 755 "$tmpdir/DEBIAN/$script"
    209done
    210
    211if [ "$ARCH" != "um" ]; then
    212	if is_enabled CONFIG_MODULES; then
    213		deploy_kernel_headers debian/linux-headers
    214		create_package linux-headers-$version debian/linux-headers
    215	fi
    216
    217	deploy_libc_headers debian/linux-libc-dev
    218	create_package linux-libc-dev debian/linux-libc-dev
    219fi
    220
    221create_package "$packagename" "$tmpdir"
    222
    223if [ -n "$BUILD_DEBUG" ] ; then
    224	# Build debug package
    225	# Different tools want the image in different locations
    226	# perf
    227	mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
    228	cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
    229	# systemtap
    230	mkdir -p $dbg_dir/usr/lib/debug/boot/
    231	ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
    232	# kdump-tools
    233	ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
    234	create_package "$dbg_packagename" "$dbg_dir"
    235fi
    236
    237exit 0