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 74email=${DEBEMAIL-$EMAIL} 75 76# use email string directly if it contains <email> 77if echo $email | grep -q '<.*>'; then 78 maintainer=$email 79else 80 # or construct the maintainer string 81 user=${KBUILD_BUILD_USER-$(id -nu)} 82 name=${DEBFULLNAME-$user} 83 if [ -z "$email" ]; then 84 buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} 85 email="$user@$buildhost" 86 fi 87 maintainer="$name <$email>" 88fi 89 90# Try to determine distribution 91if [ -n "$KDEB_CHANGELOG_DIST" ]; then 92 distribution=$KDEB_CHANGELOG_DIST 93# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 94elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 95 : # nothing to do in this case 96else 97 distribution="unstable" 98 echo >&2 "Using default distribution of 'unstable' in the changelog" 99 echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 100fi 101 102mkdir -p debian/ 103echo $debarch > debian/arch 104 105# Generate a simple changelog template 106cat <<EOF > debian/changelog 107$sourcename ($packageversion) $distribution; urgency=low 108 109 * Custom built Linux kernel. 110 111 -- $maintainer $(date -R) 112EOF 113 114# Generate copyright file 115cat <<EOF > debian/copyright 116This is a packacked upstream version of the Linux kernel. 117 118The sources may be found at most Linux archive sites, including: 119https://www.kernel.org/pub/linux/kernel 120 121Copyright: 1991 - 2018 Linus Torvalds and others. 122 123The git repository for mainline kernel development is at: 124git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 125 126 This program is free software; you can redistribute it and/or modify 127 it under the terms of the GNU General Public License as published by 128 the Free Software Foundation; version 2 dated June, 1991. 129 130On Debian GNU/Linux systems, the complete text of the GNU General Public 131License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. 132EOF 133 134# Generate a control file 135cat <<EOF > debian/control 136Source: $sourcename 137Section: kernel 138Priority: optional 139Maintainer: $maintainer 140Build-Depends: bc, kmod, cpio 141Homepage: http://www.kernel.org/ 142 143Package: $packagename 144Architecture: $debarch 145Description: Linux kernel, version $version 146 This package contains the Linux kernel, modules and corresponding other 147 files, version: $version. 148 149Package: $kernel_headers_packagename 150Architecture: $debarch 151Description: Linux kernel headers for $version on $debarch 152 This package provides kernel header files for $version on $debarch 153 . 154 This is useful for people who need to build external modules 155 156Package: linux-libc-dev 157Section: devel 158Provides: linux-kernel-headers 159Architecture: $debarch 160Description: Linux support headers for userspace development 161 This package provides userspaces headers from the Linux kernel. These headers 162 are used by the installed headers for GNU glibc and other system libraries. 163 164Package: $dbg_packagename 165Section: debug 166Architecture: $debarch 167Description: Linux kernel debugging symbols for $version 168 This package will come in handy if you need to debug the kernel. It provides 169 all the necessary debug symbols for the kernel and its modules. 170EOF 171 172cat <<EOF > debian/rules 173#!$(command -v $MAKE) -f 174 175build: 176 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= 177 178binary-arch: 179 \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} KBUILD_SRC= intdeb-pkg 180 181clean: 182 rm -rf debian/*tmp debian/files 183 \$(MAKE) clean 184 185binary: binary-arch 186EOF 187 188exit 0 189