1#!/bin/sh 2# 3# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 4# 5# Simple script to generate a debian/ directory for a Linux kernel. 6 7set -e 8 9set_debarch() { 10 # Attempt to find the correct Debian architecture 11 case "$UTS_MACHINE" in 12 i386|ia64|alpha) 13 debarch="$UTS_MACHINE" ;; 14 x86_64) 15 debarch=amd64 ;; 16 sparc*) 17 debarch=sparc ;; 18 s390*) 19 debarch=s390$(grep -q CONFIG_64BIT=y $KCONFIG_CONFIG && echo x || true) ;; 20 ppc*) 21 debarch=$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo ppc64el || echo powerpc) ;; 22 parisc*) 23 debarch=hppa ;; 24 mips*) 25 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y $KCONFIG_CONFIG && echo el || true) ;; 26 aarch64|arm64) 27 debarch=arm64 ;; 28 arm*) 29 if grep -q CONFIG_AEABI=y $KCONFIG_CONFIG; then 30 if grep -q CONFIG_VFP=y $KCONFIG_CONFIG; then 31 debarch=armhf 32 else 33 debarch=armel 34 fi 35 else 36 debarch=arm 37 fi 38 ;; 39 *) 40 debarch=$(dpkg --print-architecture) 41 echo "" >&2 42 echo "** ** ** WARNING ** ** **" >&2 43 echo "" >&2 44 echo "Your architecture doesn't have its equivalent" >&2 45 echo "Debian userspace architecture defined!" >&2 46 echo "Falling back to using your current userspace instead!" >&2 47 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 48 echo "" >&2 49 esac 50 if [ -n "$KBUILD_DEBARCH" ] ; then 51 debarch="$KBUILD_DEBARCH" 52 fi 53} 54 55# Some variables and settings used throughout the script 56version=$KERNELRELEASE 57if [ -n "$KDEB_PKGVERSION" ]; then 58 packageversion=$KDEB_PKGVERSION 59else 60 revision=$(cat .version 2>/dev/null||echo 1) 61 packageversion=$version-$revision 62fi 63sourcename=$KDEB_SOURCENAME 64packagename=linux-image-$version 65kernel_headers_packagename=linux-headers-$version 66dbg_packagename=$packagename-dbg 67debarch= 68set_debarch 69 70if [ "$ARCH" = "um" ] ; then 71 packagename=user-mode-linux-$version 72fi 73 74# Try to determine maintainer and email values 75if [ -n "$DEBEMAIL" ]; then 76 email=$DEBEMAIL 77elif [ -n "$EMAIL" ]; then 78 email=$EMAIL 79else 80 email=$(id -nu)@$(hostname -f 2>/dev/null || hostname) 81fi 82if [ -n "$DEBFULLNAME" ]; then 83 name=$DEBFULLNAME 84elif [ -n "$NAME" ]; then 85 name=$NAME 86else 87 name="Anonymous" 88fi 89maintainer="$name <$email>" 90 91# Try to determine distribution 92if [ -n "$KDEB_CHANGELOG_DIST" ]; then 93 distribution=$KDEB_CHANGELOG_DIST 94# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 95elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 96 : # nothing to do in this case 97else 98 distribution="unstable" 99 echo >&2 "Using default distribution of 'unstable' in the changelog" 100 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 101fi 102 103mkdir -p debian/ 104echo $debarch > debian/arch 105 106# Generate a simple changelog template 107cat <<EOF > debian/changelog 108$sourcename ($packageversion) $distribution; urgency=low 109 110 * Custom built Linux kernel. 111 112 -- $maintainer $(date -R) 113EOF 114 115# Generate copyright file 116cat <<EOF > debian/copyright 117This is a packacked upstream version of the Linux kernel. 118 119The sources may be found at most Linux archive sites, including: 120https://www.kernel.org/pub/linux/kernel 121 122Copyright: 1991 - 2018 Linus Torvalds and others. 123 124The git repository for mainline kernel development is at: 125git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 126 127 This program is free software; you can redistribute it and/or modify 128 it under the terms of the GNU General Public License as published by 129 the Free Software Foundation; version 2 dated June, 1991. 130 131On Debian GNU/Linux systems, the complete text of the GNU General Public 132License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. 133EOF 134 135# Generate a control file 136cat <<EOF > debian/control 137Source: $sourcename 138Section: kernel 139Priority: optional 140Maintainer: $maintainer 141Build-Depends: bc, kmod, cpio 142Homepage: http://www.kernel.org/ 143 144Package: $packagename 145Architecture: $debarch 146Description: Linux kernel, version $version 147 This package contains the Linux kernel, modules and corresponding other 148 files, version: $version. 149 150Package: $kernel_headers_packagename 151Architecture: $debarch 152Description: Linux kernel headers for $version on $debarch 153 This package provides kernel header files for $version on $debarch 154 . 155 This is useful for people who need to build external modules 156 157Package: linux-libc-dev 158Section: devel 159Provides: linux-kernel-headers 160Architecture: $debarch 161Description: Linux support headers for userspace development 162 This package provides userspaces headers from the Linux kernel. These headers 163 are used by the installed headers for GNU glibc and other system libraries. 164 165Package: $dbg_packagename 166Section: debug 167Architecture: $debarch 168Description: Linux kernel debugging symbols for $version 169 This package will come in handy if you need to debug the kernel. It provides 170 all the necessary debug symbols for the kernel and its modules. 171EOF 172 173cat <<EOF > debian/rules 174#!$(command -v $MAKE) -f 175 176build: 177 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= 178 179binary-arch: 180 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg 181 182clean: 183 rm -rf debian/*tmp debian/files 184 \$(MAKE) clean 185 186binary: binary-arch 187EOF 188 189exit 0 190