| #!/bin/sh | |
| # | |
| # Copyright 2003 Wichert Akkerman <wichert@wiggy.net> | |
| # | |
| # Simple script to generate a debian/ directory for a Linux kernel. | |
| set -e | |
| is_enabled() { | |
| grep -q "^$1=y" include/config/auto.conf | |
| } | |
| if_enabled_echo() { | |
| if is_enabled "$1"; then | |
| echo -n "$2" | |
| elif [ $# -ge 3 ]; then | |
| echo -n "$3" | |
| fi | |
| } | |
| set_debarch() { | |
| if [ -n "$KBUILD_DEBARCH" ] ; then | |
| debarch="$KBUILD_DEBARCH" | |
| return | |
| fi | |
| # Attempt to find the correct Debian architecture | |
| case "$UTS_MACHINE" in | |
| i386|ia64|alpha|m68k|riscv*) | |
| debarch="$UTS_MACHINE" ;; | |
| x86_64) | |
| debarch=amd64 ;; | |
| sparc*) | |
| debarch=sparc$(if_enabled_echo CONFIG_64BIT 64) ;; | |
| s390*) | |
| debarch=s390x ;; | |
| ppc*) | |
| if is_enabled CONFIG_64BIT; then | |
| debarch=ppc64$(if_enabled_echo CONFIG_CPU_LITTLE_ENDIAN el) | |
| else | |
| debarch=powerpc$(if_enabled_echo CONFIG_SPE spe) | |
| fi | |
| ;; | |
| parisc*) | |
| debarch=hppa ;; | |
| mips*) | |
| if is_enabled CONFIG_CPU_LITTLE_ENDIAN; then | |
| debarch=mips$(if_enabled_echo CONFIG_64BIT 64)$(if_enabled_echo CONFIG_CPU_MIPSR6 r6)el | |
| elif is_enabled CONFIG_CPU_MIPSR6; then | |
| debarch=mips$(if_enabled_echo CONFIG_64BIT 64)r6 | |
| else | |
| debarch=mips | |
| fi | |
| ;; | |
| aarch64|arm64) | |
| debarch=arm64 ;; | |
| arm*) | |
| if is_enabled CONFIG_AEABI; then | |
| debarch=arm$(if_enabled_echo CONFIG_VFP hf el) | |
| else | |
| debarch=arm | |
| fi | |
| ;; | |
| openrisc) | |
| debarch=or1k ;; | |
| sh) | |
| if is_enabled CONFIG_CPU_SH3; then | |
| debarch=sh3$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | |
| elif is_enabled CONFIG_CPU_SH4; then | |
| debarch=sh4$(if_enabled_echo CONFIG_CPU_BIG_ENDIAN eb) | |
| fi | |
| ;; | |
| esac | |
| if [ -z "$debarch" ]; then | |
| debarch=$(dpkg-architecture -qDEB_HOST_ARCH) | |
| echo "" >&2 | |
| echo "** ** ** WARNING ** ** **" >&2 | |
| echo "" >&2 | |
| echo "Your architecture doesn't have its equivalent" >&2 | |
| echo "Debian userspace architecture defined!" >&2 | |
| echo "Falling back to the current host architecture ($debarch)." >&2 | |
| echo "Please add support for $UTS_MACHINE to ${0} ..." >&2 | |
| echo "" >&2 | |
| fi | |
| } | |
| # Create debian/source/ if it is a source package build | |
| gen_source () | |
| { | |
| mkdir -p debian/source | |
| echo "3.0 (quilt)" > debian/source/format | |
| { | |
| echo "diff-ignore" | |
| echo "extend-diff-ignore = .*" | |
| } > debian/source/local-options | |
| # Add .config as a patch | |
| mkdir -p debian/patches | |
| { | |
| echo "Subject: Add .config" | |
| echo "Author: ${maintainer}" | |
| echo | |
| echo "--- /dev/null" | |
| echo "+++ linux/.config" | |
| diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3 | |
| } > debian/patches/config.patch | |
| echo config.patch > debian/patches/series | |
| "${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch | |
| if [ -s debian/patches/diff.patch ]; then | |
| sed -i " | |
| 1iSubject: Add local diff | |
| 1iAuthor: ${maintainer} | |
| 1i | |
| " debian/patches/diff.patch | |
| echo diff.patch >> debian/patches/series | |
| else | |
| rm -f debian/patches/diff.patch | |
| fi | |
| } | |
| rm -rf debian | |
| mkdir debian | |
| email=${DEBEMAIL-$EMAIL} | |
| # use email string directly if it contains <email> | |
| if echo "${email}" | grep -q '<.*>'; then | |
| maintainer=${email} | |
| else | |
| # or construct the maintainer string | |
| user=${KBUILD_BUILD_USER-$(id -nu)} | |
| name=${DEBFULLNAME-${user}} | |
| if [ -z "${email}" ]; then | |
| buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)} | |
| email="${user}@${buildhost}" | |
| fi | |
| maintainer="${name} <${email}>" | |
| fi | |
| if [ "$1" = --need-source ]; then | |
| gen_source | |
| fi | |
| # Some variables and settings used throughout the script | |
| version=$KERNELRELEASE | |
| if [ -n "$KDEB_PKGVERSION" ]; then | |
| packageversion=$KDEB_PKGVERSION | |
| else | |
| packageversion=$(${srctree}/scripts/setlocalversion --no-local ${srctree})-$($srctree/init/build-version) | |
| fi | |
| sourcename=${KDEB_SOURCENAME:-linux-upstream} | |
| if [ "$ARCH" = "um" ] ; then | |
| packagename=user-mode-linux | |
| else | |
| packagename=linux-image | |
| fi | |
| debarch= | |
| set_debarch | |
| # Try to determine distribution | |
| if [ -n "$KDEB_CHANGELOG_DIST" ]; then | |
| distribution=$KDEB_CHANGELOG_DIST | |
| # In some cases lsb_release returns the codename as n/a, which breaks dpkg-parsechangelog | |
| elif distribution=$(lsb_release -cs 2>/dev/null) && [ -n "$distribution" ] && [ "$distribution" != "n/a" ]; then | |
| : # nothing to do in this case | |
| else | |
| distribution="unstable" | |
| echo >&2 "Using default distribution of 'unstable' in the changelog" | |
| echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly" | |
| fi | |
| echo $debarch > debian/arch | |
| extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)" | |
| extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)" | |
| # Generate a simple changelog template | |
| cat <<EOF > debian/changelog | |
| $sourcename ($packageversion) $distribution; urgency=low | |
| * Custom built Linux kernel. | |
| -- $maintainer $(date -R) | |
| EOF | |
| # Generate copyright file | |
| cat <<EOF > debian/copyright | |
| This is a packaged upstream version of the Linux kernel. | |
| The sources may be found at most Linux archive sites, including: | |
| https://www.kernel.org/pub/linux/kernel | |
| Copyright: 1991 - 2018 Linus Torvalds and others. | |
| The git repository for mainline kernel development is at: | |
| git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git | |
| This program is free software; you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation; version 2 dated June, 1991. | |
| On Debian GNU/Linux systems, the complete text of the GNU General Public | |
| License version 2 can be found in \`/usr/share/common-licenses/GPL-2'. | |
| EOF | |
| # Generate a control file | |
| cat <<EOF > debian/control | |
| Source: $sourcename | |
| Section: kernel | |
| Priority: optional | |
| Maintainer: $maintainer | |
| Rules-Requires-Root: no | |
| Build-Depends: bc, debhelper, rsync, kmod, cpio, bison, flex $extra_build_depends | |
| Homepage: https://www.kernel.org/ | |
| Package: $packagename-$version | |
| Architecture: $debarch | |
| Description: Linux kernel, version $version | |
| This package contains the Linux kernel, modules and corresponding other | |
| files, version: $version. | |
| EOF | |
| if [ "${SRCARCH}" != um ]; then | |
| cat <<EOF >> debian/control | |
| Package: linux-libc-dev | |
| Section: devel | |
| Provides: linux-kernel-headers | |
| Architecture: $debarch | |
| Description: Linux support headers for userspace development | |
| This package provides userspaces headers from the Linux kernel. These headers | |
| are used by the installed headers for GNU glibc and other system libraries. | |
| Multi-Arch: same | |
| EOF | |
| if is_enabled CONFIG_MODULES; then | |
| cat <<EOF >> debian/control | |
| Package: linux-headers-$version | |
| Architecture: $debarch | |
| Description: Linux kernel headers for $version on $debarch | |
| This package provides kernel header files for $version on $debarch | |
| . | |
| This is useful for people who need to build external modules | |
| EOF | |
| fi | |
| fi | |
| if is_enabled CONFIG_DEBUG_INFO; then | |
| cat <<EOF >> debian/control | |
| Package: linux-image-$version-dbg | |
| Section: debug | |
| Architecture: $debarch | |
| Description: Linux kernel debugging symbols for $version | |
| This package will come in handy if you need to debug the kernel. It provides | |
| all the necessary debug symbols for the kernel and its modules. | |
| EOF | |
| fi | |
| cat <<EOF > debian/rules.vars | |
| ARCH := ${ARCH} | |
| KERNELRELEASE := ${KERNELRELEASE} | |
| EOF | |
| cp "${srctree}/scripts/package/debian/rules" debian/ | |
| exit 0 |