core/linux/PKGBUILD

256 lines
9.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-25 15:34:22 +08:00
pkgrel=2
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
0005-Revert-drm-amd-display-disable-CRTCs-with-NULL-FB-on.patch
0006-net-aquantia-Regression-on-reset-with-1.x-firmware.patch
)
sha256sums=('63f6dc8e3c9f3a0273d5d6f4dca38a2413ca3a5f689329d05b750e4c87bb21b9'
2016-04-03 02:40:44 +08:00
'SKIP'
2018-04-24 04:48:35 +08:00
'336252cb15f2f2574461c1d3daabf5dc207842526085802270e1e5223f645db3'
2016-04-13 05:09:12 +08:00
'SKIP'
2018-04-25 15:34:22 +08:00
'50b72cb7e96708c60958374aafd146bafc016e7714d7c3722c3b4320e0a9978d'
'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21'
2018-04-24 04:48:35 +08:00
'75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919'
'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c'
'a6119b46856ed2652c509fed380052e6df2be89c69a0d748cf7d8745bf35b871'
'545566a7358d711b8d4f9924df685e2410549e20d99e5d1c0dfaccdfeafda60d'
'bef6dd7b3a749ec072614ea4ed0bd5ea1d90519731f3438e4938d5b957032cc5'
'd647211e288436bcc010019a69f4ebf9a94c33b423c650aea8098969208ec836'
'6fb4fb81dab69ff432767e02585b3eb6a5a39c941e4bc2a6d4940ee17116c14e'
'd49a70d3b3f60c81d93735871f01ea60cafca87588d8d0d01801b2aec92e0e93')
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
# https://bugs.archlinux.org/task/58158
patch -Np1 -i ../0005-Revert-drm-amd-display-disable-CRTCs-with-NULL-FB-on.patch
# https://bugs.archlinux.org/task/58174
patch -Np1 -i ../0006-net-aquantia-Regression-on-reset-with-1.x-firmware.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
# set extraversion to pkgrel
sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" 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
2013-12-29 01:42:49 +08:00
make ${MAKEFLAGS} LOCALVERSION= 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}
2011-08-08 17:00:07 +08:00
# get kernel version
2018-04-24 04:48:35 +08:00
_kernver="$(make kernelrelease)"
2016-04-03 02:40:44 +08:00
_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}
make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}/usr" modules_install
cp arch/x86/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgname}"
2011-08-08 17:00:07 +08:00
# set correct depmod command for install
2016-04-03 02:40:44 +08:00
cp -f "${startdir}/${install}" "${startdir}/${install}.pkg"
true && install=${install}.pkg
2011-08-08 17:00:07 +08:00
sed \
-e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \
2016-04-03 02:40:44 +08:00
-i "${startdir}/${install}"
# install fallback mkinitcpio.conf file and preset file for kernel
install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/linux${_kernelname}.preset"
2011-08-08 17:00:07 +08:00
sed \
-e "1s|'linux.*'|'${pkgname}'|" \
-e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgname}\"|" \
-e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgname}.img\"|" \
-e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgname}-fallback.img\"|" \
-i "${pkgdir}/etc/mkinitcpio.d/linux${_kernelname}.preset"
2011-08-08 17:00:07 +08:00
# remove build and source links
2018-01-06 08:32:17 +08:00
rm -f "${pkgdir}"/usr/lib/modules/${_kernver}/{source,build}
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 {} \;
2018-01-06 08:32:17 +08:00
2011-11-02 00:21:31 +08:00
# make room for external modules
2018-01-06 08:32:17 +08:00
ln -s "../extramodules-${_basekernel}${_kernelname:--CHAKRA}" "${pkgdir}/usr/lib/modules/${_kernver}/extramodules"
2011-11-02 00:21:31 +08:00
# add real version for building modules and running depmod from post_install/upgrade
2018-01-06 08:32:17 +08:00
mkdir -p "${pkgdir}/usr/lib/modules/extramodules-${_basekernel}${_kernelname:--CHAKRA}"
echo "${_kernver}" > "${pkgdir}/usr/lib/modules/extramodules-${_basekernel}${_kernelname:--CHAKRA}/version"
2013-12-29 01:42:49 +08:00
2018-01-06 08:32:17 +08:00
# now we call depmod...
depmod -b "${pkgdir}/usr" -F System.map "${_kernver}"
2016-04-03 02:40:44 +08:00
# add vmlinux
2018-01-06 08:32:17 +08:00
install -Dt "${pkgdir}/usr/lib/modules/${_kernver}/build" -m644 vmlinux
2018-04-25 15:34:22 +08:00
# install pacman hooks
local _subst="
s|%PKGBASE%|${pkgbase}-CHAKRA|g
s|%KERNVER%|${_kernver}|g
s|%EXTRAMODULES%|${_extramodules}|g
"
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}
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
2016-04-03 02:40:44 +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
}
2018-04-25 15:34:22 +08:00
# vim:set ts=8 sts=2 sw=2 et: