core/linux/PKGBUILD

241 lines
8.5 KiB
Bash
Raw Normal View History

# Source global configuration
source ../linux.conf
pkgbase=linux
2016-04-03 02:40:44 +08:00
pkgname=('linux' 'linux-headers' 'linux-docs')
_srcname=linux-${_basekernel}
pkgver=${_kernelver}
2018-04-27 02:54:41 +08:00
pkgrel=1
arch=('x86_64')
url="http://www.kernel.org/"
2011-08-08 17:00:07 +08:00
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'libelf')
options=('!strip')
2018-04-24 04:48:35 +08:00
source=(
https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.{xz,sign}
https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.{xz,sign}
config.x86_64 # the main kernel config file
60-linux.hook # pacman hook for depmod
90-linux.hook # pacman hook for initramfs regeneration
linux.preset # standard config files for mkinitcpio ramdisk
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
0003-Partially-revert-swiotlb-remove-various-exports.patch
0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
)
sha256sums=('63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9'
2016-04-03 02:40:44 +08:00
'SKIP'
2018-05-02 04:34:20 +08:00
'634d3fd97e5d9d90262db0a9d62ed0a40043eb691d68bd4a545f907079610b56'
2016-04-13 05:09:12 +08:00
'SKIP'
2018-05-02 04:34:20 +08:00
'c3bb5ce947d8fbde8e6ff0f2a482e3fd00ee6cf73200b6a343d94286fa67ceff'
2018-04-27 02:54:41 +08:00
'287b43e83535d0aba2797b8fe4c1527788995cbfd858097be37214345e781a25'
2018-04-24 04:48:35 +08:00
'75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919'
'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c'
2018-04-27 02:54:41 +08:00
'113b1fe603f61b749c4cb3902a4f5d4fbec9d1e5081f008bac485cc345defa5f'
'9db235c5edfc9a81a0f5866f9942e74d896243c37d50298288fbbe2f79169fd3'
'd57665a468f93c94b92924fdbdc72ea50def74d9c8999104c9594e64fb196328'
2018-05-02 04:34:20 +08:00
'079180ceaae87a4851eb56e80f6e33b0199dad3343c73275ddb710e0824feb73')
2016-04-03 02:40:44 +08:00
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
)
2011-08-08 17:00:07 +08:00
2013-12-29 01:42:49 +08:00
prepare() {
2016-04-03 02:40:44 +08:00
cd ${_srcname}
# add upstream patch
2016-04-13 05:09:12 +08:00
msg "adding upstream patch"
2018-04-24 04:48:35 +08:00
patch -p1 -i ../patch-${pkgver}
2018-01-06 08:32:17 +08:00
# add latest fixes from stable queue, if needed
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git
2018-04-24 04:48:35 +08:00
# disable USER_NS for non-root users by default
patch -Np1 -i ../0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
# https://bugs.archlinux.org/task/56711
patch -Np1 -i ../0002-drm-i915-edp-Only-use-the-alternate-fixed-mode-if-it.patch
# NVIDIA driver compat
patch -Np1 -i ../0003-Partially-revert-swiotlb-remove-various-exports.patch
# https://bugs.archlinux.org/task/58153
patch -Np1 -i ../0004-Fix-vboxguest-on-guests-with-more-than-4G-RAM.patch
cat "${srcdir}/config.x86_64" > ./.config
2011-08-08 17:00:07 +08:00
if [ "${_kernelname}" != "" ]; then
sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
2013-12-29 01:42:49 +08:00
sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config
2011-08-08 17:00:07 +08:00
fi
2011-11-02 00:21:31 +08:00
2018-05-02 04:34:20 +08:00
# set extraversion to pkgrel and empty localversion
sed -e "/^EXTRAVERSION =/s/=.*/= -${pkgrel}/" \
-e "/^EXTRAVERSION =/aLOCALVERSION =" \
-i Makefile
2013-12-29 01:42:49 +08:00
# don't run depmod on 'make install'. We'll do this ourselves in packaging
sed -i '2iexit 0' scripts/depmod.sh
2011-11-02 00:21:31 +08:00
# get kernel version
2011-08-08 17:00:07 +08:00
make prepare
2011-11-02 00:21:31 +08:00
2011-08-08 17:00:07 +08:00
# load configuration
# Configure the kernel. Replace the line below with one of your choice.
2017-08-02 01:21:09 +08:00
#make menuconfig # CLI menu for configuration
2014-04-06 06:09:38 +08:00
#make nconfig # new CLI menu for configuration
2011-08-08 17:00:07 +08:00
#make xconfig # X-based configuration
#make oldconfig # using old config from previous kernel version
# ... or manually edit .config
2016-04-03 02:40:44 +08:00
# rewrite configuration
yes "" | make config >/dev/null
2011-11-02 00:21:31 +08:00
2013-12-29 01:42:49 +08:00
# save configuration for later reuse
cat .config > "${startdir}/config.x86_64.last"
2014-08-27 05:16:09 +08:00
}
2011-11-02 00:21:31 +08:00
2014-08-27 05:16:09 +08:00
build() {
2016-04-03 02:40:44 +08:00
cd "$_srcname"
2018-01-06 08:32:17 +08:00
2018-04-27 02:54:41 +08:00
make ${MAKEFLAGS} bzImage modules
2011-08-08 17:00:07 +08:00
}
package_linux() {
pkgdesc="The Linux Kernel and modules"
groups=('base')
depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7')
2011-08-08 17:00:07 +08:00
optdepends=('crda: to set the correct wireless channels of your country')
backup=("etc/mkinitcpio.d/${pkgname}.preset")
install=linux.install
2011-08-08 17:00:07 +08:00
2016-04-03 02:40:44 +08:00
cd ${_srcname}
2018-05-02 04:34:20 +08:00
# get kernel version
_kernver="$(make kernelrelease)"
_basekernel=${_kernver%%-*}
_basekernel=${_basekernel%.*}
2011-08-08 17:00:07 +08:00
2018-01-06 08:32:17 +08:00
mkdir -p "${pkgdir}"/{boot,usr/lib/modules}
2018-04-27 02:54:41 +08:00
make INSTALL_MOD_PATH="${pkgdir}/usr" modules_install
2018-01-06 08:32:17 +08:00
cp arch/x86/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgname}"
2011-08-08 17:00:07 +08:00
2018-04-27 02:54:41 +08:00
# make room for external modules
#local _extramodules="extramodules-${_basekernel}${_kernelname:--CHAKRA}"
2018-05-02 04:34:20 +08:00
ln -s "../${_extramodules}" "${pkgdir}/usr/lib/modules/${_kernver}/extramodules"
2018-04-27 02:54:41 +08:00
# add real version for building modules and running depmod from hook
2018-05-02 04:34:20 +08:00
echo "${_kernver}" |
2018-04-27 02:54:41 +08:00
install -Dm644 /dev/stdin "${pkgdir}/usr/lib/modules/${_extramodules}/version"
2011-08-08 17:00:07 +08:00
# remove build and source links
2018-05-02 04:34:20 +08:00
rm -f "${pkgdir}"/usr/lib/modules/${_kernver}/{source,build}
2018-01-06 08:32:17 +08:00
2011-11-02 00:21:31 +08:00
# gzip -9 all modules to save 100MB of space
2011-08-08 17:00:07 +08:00
find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
2013-12-29 01:42:49 +08:00
2018-01-06 08:32:17 +08:00
# now we call depmod...
2018-05-02 04:34:20 +08:00
depmod -b "${pkgdir}/usr" -F System.map "${_kernver}"
2016-04-03 02:40:44 +08:00
# add vmlinux
2018-05-02 04:34:20 +08:00
install -Dt "${pkgdir}/usr/lib/modules/${_kernver}/build" -m644 vmlinux
2018-04-27 02:54:41 +08:00
# sed expression for following substitutions
2018-04-25 15:34:22 +08:00
local _subst="
2018-04-27 02:54:41 +08:00
s|%PKGBASE%|${pkgbase}/|g
2018-05-02 04:34:20 +08:00
s|%KERNVER%|${_kernver}|g
2018-04-25 15:34:22 +08:00
s|%EXTRAMODULES%|${_extramodules}|g
"
2018-04-27 02:54:41 +08:00
# hack to allow specifying an initially nonexisting install file
sed "${_subst}" "${startdir}/${install}" > "${startdir}/${install}.pkg"
true && install=${install}.pkg
# install mkinitcpio preset file
sed "${_subst}" ../linux.preset |
install -Dm644 /dev/stdin "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset"
# install pacman hooks
2018-04-25 15:34:22 +08:00
sed "${_subst}" ../60-linux.hook |
install -Dm644 /dev/stdin "${pkgdir}/usr/share/libalpm/hooks/60-${pkgbase}.hook"
sed "${_subst}" ../90-linux.hook |
install -Dm644 /dev/stdin "${pkgdir}/usr/share/libalpm/hooks/90-${pkgbase}.hook"
2011-08-08 17:00:07 +08:00
}
package_linux-headers() {
pkgdesc="Header files and scripts for building modules for linux kernel"
2017-11-05 19:18:23 +08:00
cd ${_srcname}
2018-05-02 04:34:20 +08:00
local _builddir="${pkgdir}/usr/lib/modules/${_kernver}/build"
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
install -Dt "${_builddir}" -m644 Makefile .config Module.symvers
install -Dt "${_builddir}/kernel" -m644 kernel/Makefile
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
mkdir "${_builddir}/.tmp_versions"
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
cp -t "${_builddir}" -a include scripts
2011-08-08 17:00:07 +08:00
2018-01-06 08:32:17 +08:00
install -Dt "${_builddir}/arch/x86" -m644 arch/x86/Makefile
install -Dt "${_builddir}/arch/x86/kernel" -m644 arch/x86/kernel/asm-offsets.s
2016-04-03 02:40:44 +08:00
2018-01-06 08:32:17 +08:00
cp -t "${_builddir}/arch/x86" -a arch/x86/include
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
install -Dt "${_builddir}/drivers/md" -m644 drivers/md/*.h
install -Dt "${_builddir}/net/mac80211" -m644 net/mac80211/*.h
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
# http://bugs.archlinux.org/task/13146
install -Dt "${_builddir}/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/lgdt330x.h
install -Dt "${_builddir}/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
# http://bugs.archlinux.org/task/20402
install -Dt "${_builddir}/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
install -Dt "${_builddir}/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
install -Dt "${_builddir}/drivers/media/tuners" -m644 drivers/media/tuners/*.h
2011-08-08 17:00:07 +08:00
# add xfs and shmem for aufs building
2017-11-05 19:18:23 +08:00
mkdir -p "${_builddir}"/{fs/xfs,mm}
2011-08-08 17:00:07 +08:00
# copy in Kconfig files
2017-11-05 19:18:23 +08:00
find . -name Kconfig\* -exec install -Dm644 {} "${_builddir}/{}" \;
# add objtool for external module building and enabled VALIDATION_STACK option
2018-01-06 08:32:17 +08:00
install -Dt "${_builddir}/tools/objtool" tools/objtool/objtool
2011-08-08 17:00:07 +08:00
2017-11-05 19:18:23 +08:00
# remove unneeded architectures
local _arch
for _arch in "${_builddir}"/arch/*/; do
2018-01-06 08:32:17 +08:00
if [[ ${_arch} != */x86/ ]]; then
2017-11-05 19:18:23 +08:00
rm -r "${_arch}"
fi
2011-08-08 17:00:07 +08:00
done
2017-11-05 19:18:23 +08:00
# remove files already in linux-docs package
rm -r "${_builddir}/Documentation"
2016-04-03 02:40:44 +08:00
2017-11-05 19:18:23 +08:00
# Fix permissions
chmod -R u=rwX,go=rX "${_builddir}"
# strip scripts directory
local _binary _strip
while read -rd '' _binary; do
case "$(file -bi "${_binary}")" in
*application/x-sharedlib*) _strip="${STRIP_SHARED}" ;; # Libraries (.so)
*application/x-archive*) _strip="${STRIP_STATIC}" ;; # Libraries (.a)
*application/x-executable*) _strip="${STRIP_BINARIES}" ;; # Binaries
*) continue ;;
esac
/usr/bin/strip ${_strip} "${_binary}"
done < <(find "${_builddir}/scripts" -type f -perm -u+w -print0 2>/dev/null)
2011-08-08 17:00:07 +08:00
}
package_linux-docs() {
pkgdesc="Kernel hackers manual - HTML documentation that comes with the Linux kernel."
2016-04-03 02:40:44 +08:00
cd $_srcname
2011-08-08 17:00:07 +08:00
2018-05-02 04:34:20 +08:00
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build"
cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build"
2011-08-08 17:00:07 +08:00
find "${pkgdir}" -type f -exec chmod 444 {} \;
find "${pkgdir}" -type d -exec chmod 755 {} \;
2013-05-02 00:28:53 +08:00
}