#!/bin/sh # # Copyright 2003 Wichert Akkerman # # Simple script to generate a debian/ directory for a GNU Linux-libre. 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 } # Some variables and settings used throughout the script version=$KERNELRELEASE if [ -n "$KDEB_PKGVERSION" ]; then packageversion=$KDEB_PKGVERSION revision=${packageversion##*-} else revision=$(cat .version 2>/dev/null||echo 1) packageversion=$version-$revision fi sourcename=$KDEB_SOURCENAME if [ "$ARCH" = "um" ] ; then packagename=user-mode-linux else packagename=linux-image fi debarch= set_debarch email=${DEBEMAIL-$EMAIL} # use email string directly if it contains 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 # 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 mkdir -p debian/source/ echo "1.0" > debian/source/format 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 < debian/changelog $sourcename ($packageversion) $distribution; urgency=low * Custom built GNU Linux-libre. -- $maintainer $(date -R) EOF # Generate copyright file cat < debian/copyright This is a packacked upstream version of the GNU Linux-libre. The sources may be found at most Linux archive sites, including: https://linux-libre.fsfla.org/ Copyright: 1991 - 2018 Linus Torvalds and others. The git repository for mainline kernel development is at: /*(DEBLOBBED)*/ 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 < debian/control Source: $sourcename Section: kernel Priority: optional Maintainer: $maintainer Rules-Requires-Root: no Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends Homepage: https://linux-libre.fsfla.org/ Package: $packagename-$version Architecture: $debarch Description: GNU Linux-libre, version $version This package contains the GNU Linux-libre, modules and corresponding other files, version: $version. 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 GNU Linux-libre. 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 <> debian/control Package: linux-headers-$version Architecture: $debarch Description: GNU Linux-libre 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 if is_enabled CONFIG_DEBUG_INFO; then cat <> debian/control Package: linux-image-$version-dbg Section: debug Architecture: $debarch Description: GNU Linux-libre 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 < debian/rules #!$(command -v $MAKE) -f srctree ?= . build-indep: build-arch: \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile build: build-arch binary-indep: binary-arch: build-arch \$(MAKE) KERNELRELEASE=${version} ARCH=${ARCH} \ KBUILD_BUILD_VERSION=${revision} -f \$(srctree)/Makefile intdeb-pkg clean: rm -rf debian/*tmp debian/files \$(MAKE) clean binary: binary-arch EOF chmod +x debian/rules exit 0