1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Copyright 2003 Wichert Akkerman <wichert@wiggy.net> 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# Simple script to generate a debian/ directory for a Linux kernel. 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunset -e 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunis_enabled() { 10*4882a593Smuzhiyun grep -q "^$1=y" include/config/auto.conf 11*4882a593Smuzhiyun} 12*4882a593Smuzhiyun 13*4882a593Smuzhiyunif_enabled_echo() { 14*4882a593Smuzhiyun if is_enabled "$1"; then 15*4882a593Smuzhiyun echo -n "$2" 16*4882a593Smuzhiyun elif [ $# -ge 3 ]; then 17*4882a593Smuzhiyun echo -n "$3" 18*4882a593Smuzhiyun fi 19*4882a593Smuzhiyun} 20*4882a593Smuzhiyun 21*4882a593Smuzhiyunset_debarch() { 22*4882a593Smuzhiyun if [ -n "$KBUILD_DEBARCH" ] ; then 23*4882a593Smuzhiyun debarch="$KBUILD_DEBARCH" 24*4882a593Smuzhiyun return 25*4882a593Smuzhiyun fi 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun # Attempt to find the correct Debian architecture 28*4882a593Smuzhiyun case "$UTS_MACHINE" in 29*4882a593Smuzhiyun i386|ia64|alpha|m68k|riscv*) 30*4882a593Smuzhiyun debarch="$UTS_MACHINE" ;; 31*4882a593Smuzhiyun x86_64) 32*4882a593Smuzhiyun debarch=amd64 ;; 33*4882a593Smuzhiyun sparc*) 34*4882a593Smuzhiyun debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; 35*4882a593Smuzhiyun s390*) 36*4882a593Smuzhiyun debarch=s390x ;; 37*4882a593Smuzhiyun ppc*) 38*4882a593Smuzhiyun if is_enabled CONFIG_64BIT; then 39*4882a593Smuzhiyun debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) 40*4882a593Smuzhiyun else 41*4882a593Smuzhiyun debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) 42*4882a593Smuzhiyun fi 43*4882a593Smuzhiyun ;; 44*4882a593Smuzhiyun parisc*) 45*4882a593Smuzhiyun debarch=hppa ;; 46*4882a593Smuzhiyun mips*) 47*4882a593Smuzhiyun if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then 48*4882a593Smuzhiyun debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el 49*4882a593Smuzhiyun elif is_enabled CONFIG_CPU_MIPSR6; then 50*4882a593Smuzhiyun debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 51*4882a593Smuzhiyun else 52*4882a593Smuzhiyun debarch=mips 53*4882a593Smuzhiyun fi 54*4882a593Smuzhiyun ;; 55*4882a593Smuzhiyun aarch64|arm64) 56*4882a593Smuzhiyun debarch=arm64 ;; 57*4882a593Smuzhiyun arm*) 58*4882a593Smuzhiyun if is_enabled CONFIG_AEABI; then 59*4882a593Smuzhiyun debarch=arm$(if_enabled_echo CONFIG_VFP hf el) 60*4882a593Smuzhiyun else 61*4882a593Smuzhiyun debarch=arm 62*4882a593Smuzhiyun fi 63*4882a593Smuzhiyun ;; 64*4882a593Smuzhiyun openrisc) 65*4882a593Smuzhiyun debarch=or1k ;; 66*4882a593Smuzhiyun sh) 67*4882a593Smuzhiyun if is_enabled CONFIG_CPU_SH3; then 68*4882a593Smuzhiyun debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 69*4882a593Smuzhiyun elif is_enabled CONFIG_CPU_SH4; then 70*4882a593Smuzhiyun debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) 71*4882a593Smuzhiyun fi 72*4882a593Smuzhiyun ;; 73*4882a593Smuzhiyun esac 74*4882a593Smuzhiyun if [ -z "$debarch" ]; then 75*4882a593Smuzhiyun debarch=$(dpkg-architecture -qDEB_HOST_ARCH) 76*4882a593Smuzhiyun echo "" >&2 77*4882a593Smuzhiyun echo "** ** ** WARNING ** ** **" >&2 78*4882a593Smuzhiyun echo "" >&2 79*4882a593Smuzhiyun echo "Your architecture doesn't have its equivalent" >&2 80*4882a593Smuzhiyun echo "Debian userspace architecture defined!" >&2 81*4882a593Smuzhiyun echo "Falling back to the current host architecture ($debarch)." >&2 82*4882a593Smuzhiyun echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 83*4882a593Smuzhiyun echo "" >&2 84*4882a593Smuzhiyun fi 85*4882a593Smuzhiyun} 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun# Some variables and settings used throughout the script 88*4882a593Smuzhiyunversion=$KERNELRELEASE 89*4882a593Smuzhiyunif [ -n "$KDEB_PKGVERSION" ]; then 90*4882a593Smuzhiyun packageversion=$KDEB_PKGVERSION 91*4882a593Smuzhiyun revision=${packageversion##*-} 92*4882a593Smuzhiyunelse 93*4882a593Smuzhiyun revision=$(cat .version 2>/dev/null||echo 1) 94*4882a593Smuzhiyun packageversion=$version-$revision 95*4882a593Smuzhiyunfi 96*4882a593Smuzhiyunsourcename=$KDEB_SOURCENAME 97*4882a593Smuzhiyun 98*4882a593Smuzhiyunif [ "$ARCH" = "um" ] ; then 99*4882a593Smuzhiyun packagename=user-mode-linux 100*4882a593Smuzhiyunelse 101*4882a593Smuzhiyun packagename=linux-image 102*4882a593Smuzhiyunfi 103*4882a593Smuzhiyun 104*4882a593Smuzhiyundebarch= 105*4882a593Smuzhiyunset_debarch 106*4882a593Smuzhiyun 107*4882a593Smuzhiyunemail=${DEBEMAIL-$EMAIL} 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun# use email string directly if it contains <email> 110*4882a593Smuzhiyunif echo $email | grep -q '<.*>'; then 111*4882a593Smuzhiyun maintainer=$email 112*4882a593Smuzhiyunelse 113*4882a593Smuzhiyun # or construct the maintainer string 114*4882a593Smuzhiyun user=${KBUILD_BUILD_USER-$(id -nu)} 115*4882a593Smuzhiyun name=${DEBFULLNAME-$user} 116*4882a593Smuzhiyun if [ -z "$email" ]; then 117*4882a593Smuzhiyun buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} 118*4882a593Smuzhiyun email="$user@$buildhost" 119*4882a593Smuzhiyun fi 120*4882a593Smuzhiyun maintainer="$name <$email>" 121*4882a593Smuzhiyunfi 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun# Try to determine distribution 124*4882a593Smuzhiyunif [ -n "$KDEB_CHANGELOG_DIST" ]; then 125*4882a593Smuzhiyun distribution=$KDEB_CHANGELOG_DIST 126*4882a593Smuzhiyun# In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog 127*4882a593Smuzhiyunelif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then 128*4882a593Smuzhiyun : # nothing to do in this case 129*4882a593Smuzhiyunelse 130*4882a593Smuzhiyun distribution="unstable" 131*4882a593Smuzhiyun echo >&2 "Using default distribution of 'unstable' in the changelog" 132*4882a593Smuzhiyun echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" 133*4882a593Smuzhiyunfi 134*4882a593Smuzhiyun 135*4882a593Smuzhiyunmkdir -p debian/source/ 136*4882a593Smuzhiyunecho "1.0" > debian/source/format 137*4882a593Smuzhiyun 138*4882a593Smuzhiyunecho $debarch > debian/arch 139*4882a593Smuzhiyunextra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" 140*4882a593Smuzhiyunextra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun# Generate a simple changelog template 143*4882a593Smuzhiyuncat <<EOF > debian/changelog 144*4882a593Smuzhiyun$sourcename ($packageversion) $distribution; urgency=low 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun * Custom built Linux kernel. 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun -- $maintainer $(date -R) 149*4882a593SmuzhiyunEOF 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun# Generate copyright file 152*4882a593Smuzhiyuncat <<EOF > debian/copyright 153*4882a593SmuzhiyunThis is a packacked upstream version of the Linux kernel. 154*4882a593Smuzhiyun 155*4882a593SmuzhiyunThe sources may be found at most Linux archive sites, including: 156*4882a593Smuzhiyunhttps://www.kernel.org/pub/linux/kernel 157*4882a593Smuzhiyun 158*4882a593SmuzhiyunCopyright: 1991 - 2018 Linus Torvalds and others. 159*4882a593Smuzhiyun 160*4882a593SmuzhiyunThe git repository for mainline kernel development is at: 161*4882a593Smuzhiyungit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun This program is free software; you can redistribute it and/or modify 164*4882a593Smuzhiyun it under the terms of the GNU General Public License as published by 165*4882a593Smuzhiyun the Free Software Foundation; version 2 dated June, 1991. 166*4882a593Smuzhiyun 167*4882a593SmuzhiyunOn Debian GNU/Linux systems, the complete text of the GNU General Public 168*4882a593SmuzhiyunLicense version 2 can be found in \`/usr/share/common-licenses/GPL-2'. 169*4882a593SmuzhiyunEOF 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun# Generate a control file 172*4882a593Smuzhiyuncat <<EOF > debian/control 173*4882a593SmuzhiyunSource: $sourcename 174*4882a593SmuzhiyunSection: kernel 175*4882a593SmuzhiyunPriority: optional 176*4882a593SmuzhiyunMaintainer: $maintainer 177*4882a593SmuzhiyunRules-Requires-Root: no 178*4882a593SmuzhiyunBuild-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends 179*4882a593SmuzhiyunHomepage: https://www.kernel.org/ 180*4882a593Smuzhiyun 181*4882a593SmuzhiyunPackage: $packagename-$version 182*4882a593SmuzhiyunArchitecture: $debarch 183*4882a593SmuzhiyunDescription: Linux kernel, version $version 184*4882a593Smuzhiyun This package contains the Linux kernel, modules and corresponding other 185*4882a593Smuzhiyun files, version: $version. 186*4882a593Smuzhiyun 187*4882a593SmuzhiyunPackage: linux-libc-dev 188*4882a593SmuzhiyunSection: devel 189*4882a593SmuzhiyunProvides: linux-kernel-headers 190*4882a593SmuzhiyunArchitecture: $debarch 191*4882a593SmuzhiyunDescription: Linux support headers for userspace development 192*4882a593Smuzhiyun This package provides userspaces headers from the Linux kernel. These headers 193*4882a593Smuzhiyun are used by the installed headers for GNU glibc and other system libraries. 194*4882a593SmuzhiyunMulti-Arch: same 195*4882a593SmuzhiyunEOF 196*4882a593Smuzhiyun 197*4882a593Smuzhiyunif is_enabled CONFIG_MODULES; then 198*4882a593Smuzhiyuncat <<EOF >> debian/control 199*4882a593Smuzhiyun 200*4882a593SmuzhiyunPackage: linux-headers-$version 201*4882a593SmuzhiyunArchitecture: $debarch 202*4882a593SmuzhiyunDescription: Linux kernel headers for $version on $debarch 203*4882a593Smuzhiyun This package provides kernel header files for $version on $debarch 204*4882a593Smuzhiyun . 205*4882a593Smuzhiyun This is useful for people who need to build external modules 206*4882a593SmuzhiyunEOF 207*4882a593Smuzhiyunfi 208*4882a593Smuzhiyun 209*4882a593Smuzhiyunif is_enabled CONFIG_DEBUG_INFO; then 210*4882a593Smuzhiyuncat <<EOF >> debian/control 211*4882a593Smuzhiyun 212*4882a593SmuzhiyunPackage: linux-image-$version-dbg 213*4882a593SmuzhiyunSection: debug 214*4882a593SmuzhiyunArchitecture: $debarch 215*4882a593SmuzhiyunDescription: Linux kernel debugging symbols for $version 216*4882a593Smuzhiyun This package will come in handy if you need to debug the kernel. It provides 217*4882a593Smuzhiyun all the necessary debug symbols for the kernel and its modules. 218*4882a593SmuzhiyunEOF 219*4882a593Smuzhiyunfi 220*4882a593Smuzhiyun 221*4882a593Smuzhiyuncat <<EOF > debian/rules 222*4882a593Smuzhiyun#!$(command -v $MAKE) -f 223*4882a593Smuzhiyun 224*4882a593Smuzhiyunsrctree ?= . 225*4882a593Smuzhiyun 226*4882a593Smuzhiyunbuild-indep: 227*4882a593Smuzhiyunbuild-arch: 228*4882a593Smuzhiyun \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ 229*4882a593Smuzhiyun KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile 230*4882a593Smuzhiyun 231*4882a593Smuzhiyunbuild: build-arch 232*4882a593Smuzhiyun 233*4882a593Smuzhiyunbinary-indep: 234*4882a593Smuzhiyunbinary-arch: build-arch 235*4882a593Smuzhiyun \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ 236*4882a593Smuzhiyun KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg 237*4882a593Smuzhiyun 238*4882a593Smuzhiyunclean: 239*4882a593Smuzhiyun rm -rf debian/*tmp debian/files 240*4882a593Smuzhiyun \$(MAKE) clean 241*4882a593Smuzhiyun 242*4882a593Smuzhiyunbinary: binary-arch 243*4882a593SmuzhiyunEOF 244*4882a593Smuzhiyunchmod +x debian/rules 245*4882a593Smuzhiyun 246*4882a593Smuzhiyunexit 0 247