Created
October 23, 2015 14:34
-
-
Save spacepluk/e15cf99bb881ea56098b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# $Id: PKGBUILD 248964 2015-10-13 05:36:23Z tpowa $ | |
# Maintainer: Tobias Powalowski <tpowa@archlinux.org> | |
# Maintainer: Thomas Baechler <thomas@archlinux.org> | |
pkgbase=linux # Build stock -ARCH kernel | |
#pkgbase=linux-custom # Build kernel with a different name | |
_srcname=linux-4.2 | |
pkgver=4.2.3 | |
pkgrel=1 | |
arch=('i686' 'x86_64') | |
url="http://www.kernel.org/" | |
license=('GPL2') | |
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc') | |
options=('!strip') | |
source=("https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.xz" | |
"https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.sign" | |
"https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.xz" | |
"https://www.kernel.org/pub/linux/kernel/v4.x/patch-${pkgver}.sign" | |
# the main kernel config files | |
'config' 'config.x86_64' | |
# standard config files for mkinitcpio ramdisk | |
'linux.preset' | |
'change-default-console-loglevel.patch' | |
'0001-e1000e-Fix-tight-loop-implementation-of-systime-read.patch' | |
'0001-netfilter-conntrack-use-nf_ct_tmpl_free-in-CT-synpro.patch' | |
'https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/patch/?id=5fa836a9d85975c5f0f1219669523c1f0ac64349' | |
'https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/patch/?id=4e96c97742f4201edf1b0f8e1b1b6b2ac6ff33e7') | |
sha256sums=('cf20e044f17588d2a42c8f2a450b0fd84dfdbd579b489d93e9ab7d0e8b45dbeb' | |
'SKIP' | |
'e0e066f3fc5f310644e9f3f3ede47db7ac040f44782f0a5cf75ce2c940444972' | |
'SKIP' | |
'e6f6f804f98ad321ce3e4395924993b51decb89699fde369391ccbb4bae928b2' | |
'a071aaa327d2b3577fa4709b47ed5fe81c7914d168607f3db905fdbf226247e7' | |
'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' | |
'1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' | |
'0b1e41ba59ae45f5929963aa22fdc53bc8ffb4534e976cec046269d1a462197b' | |
'6ed9e31ae5614c289c4884620e45698e764c03670ebc45bab9319d741238cbd3' | |
'a6a762416c4e47347a87618b8778a39b58d46214318d0a9a4db23219c1130bbd' | |
'5b85462a18a15f27e01ad3e8a68e7dfd510111486f51fdc5e066430b16534e47') | |
validpgpkeys=( | |
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds | |
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman | |
) | |
_kernelname=${pkgbase#linux} | |
prepare() { | |
cd "${srcdir}/${_srcname}" | |
# add upstream patch | |
patch -p1 -i "${srcdir}/patch-${pkgver}" | |
# add latest fixes from stable queue, if needed | |
# http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git | |
# fix hard lockup in e1000e_cyclecounter_read() after 4 hours of uptime | |
# https://lkml.org/lkml/2015/8/18/292 | |
patch -p1 -i "${srcdir}/0001-e1000e-Fix-tight-loop-implementation-of-systime-read.patch" | |
# add not-yet-mainlined patch to fix network unavailability when iptables | |
# rules are applied during startup - happened with Shorewall; journal had | |
# many instances of this error: nf_conntrack: table full, dropping packet | |
patch -p1 -i "${srcdir}/0001-netfilter-conntrack-use-nf_ct_tmpl_free-in-CT-synpro.patch" | |
# Workaround i915 screen flickering | |
patch -p1 -R -i "${srcdir}/?id=5fa836a9d85975c5f0f1219669523c1f0ac64349" | |
patch -p1 -R -i "${srcdir}/?id=4e96c97742f4201edf1b0f8e1b1b6b2ac6ff33e7" | |
# set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param) | |
# remove this when a Kconfig knob is made available by upstream | |
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) | |
patch -p1 -i "${srcdir}/change-default-console-loglevel.patch" | |
if [ "${CARCH}" = "x86_64" ]; then | |
cat "${srcdir}/config.x86_64" > ./.config | |
else | |
cat "${srcdir}/config" > ./.config | |
fi | |
if [ "${_kernelname}" != "" ]; then | |
sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config | |
sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config | |
fi | |
# set extraversion to pkgrel | |
sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile | |
# don't run depmod on 'make install'. We'll do this ourselves in packaging | |
sed -i '2iexit 0' scripts/depmod.sh | |
# get kernel version | |
make prepare | |
# load configuration | |
# Configure the kernel. Replace the line below with one of your choice. | |
#make menuconfig # CLI menu for configuration | |
#make nconfig # new CLI menu for configuration | |
#make xconfig # X-based configuration | |
#make oldconfig # using old config from previous kernel version | |
# ... or manually edit .config | |
# rewrite configuration | |
yes "" | make config >/dev/null | |
} | |
build() { | |
cd "${srcdir}/${_srcname}" | |
make ${MAKEFLAGS} LOCALVERSION= bzImage modules | |
} | |
_package() { | |
pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" | |
[ "${pkgbase}" = "linux" ] && groups=('base') | |
depends=('coreutils' 'linux-firmware' 'kmod' 'mkinitcpio>=0.7') | |
optdepends=('crda: to set the correct wireless channels of your country') | |
backup=("etc/mkinitcpio.d/${pkgbase}.preset") | |
install=linux.install | |
cd "${srcdir}/${_srcname}" | |
KARCH=x86 | |
# get kernel version | |
_kernver="$(make LOCALVERSION= kernelrelease)" | |
_basekernel=${_kernver%%-*} | |
_basekernel=${_basekernel%.*} | |
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot} | |
make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install | |
cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgbase}" | |
# set correct depmod command for install | |
cp -f "${startdir}/${install}" "${startdir}/${install}.pkg" | |
true && install=${install}.pkg | |
sed \ | |
-e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/" \ | |
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" \ | |
-i "${startdir}/${install}" | |
# install mkinitcpio preset file for kernel | |
install -D -m644 "${srcdir}/linux.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" | |
sed \ | |
-e "1s|'linux.*'|'${pkgbase}'|" \ | |
-e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgbase}\"|" \ | |
-e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgbase}.img\"|" \ | |
-e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgbase}-fallback.img\"|" \ | |
-i "${pkgdir}/etc/mkinitcpio.d/${pkgbase}.preset" | |
# remove build and source links | |
rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build} | |
# remove the firmware | |
rm -rf "${pkgdir}/lib/firmware" | |
# make room for external modules | |
ln -s "../extramodules-${_basekernel}${_kernelname:--ARCH}" "${pkgdir}/lib/modules/${_kernver}/extramodules" | |
# add real version for building modules and running depmod from post_install/upgrade | |
mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--ARCH}" | |
echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--ARCH}/version" | |
# Now we call depmod... | |
depmod -b "${pkgdir}" -F System.map "${_kernver}" | |
# move module tree /lib -> /usr/lib | |
mkdir -p "${pkgdir}/usr" | |
mv "${pkgdir}/lib" "${pkgdir}/usr/" | |
# add vmlinux | |
install -D -m644 vmlinux "${pkgdir}/usr/lib/modules/${_kernver}/build/vmlinux" | |
} | |
_package-headers() { | |
pkgdesc="Header files and scripts for building modules for ${pkgbase/linux/Linux} kernel" | |
install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}" | |
cd "${srcdir}/${_srcname}" | |
install -D -m644 Makefile \ | |
"${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile" | |
install -D -m644 kernel/Makefile \ | |
"${pkgdir}/usr/lib/modules/${_kernver}/build/kernel/Makefile" | |
install -D -m644 .config \ | |
"${pkgdir}/usr/lib/modules/${_kernver}/build/.config" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include" | |
for i in acpi asm-generic config crypto drm generated keys linux math-emu \ | |
media net pcmcia scsi sound trace uapi video xen; do | |
cp -a include/${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/include/" | |
done | |
# copy arch includes for external modules | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86" | |
cp -a arch/x86/include "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86/" | |
# copy files necessary for later builds, like nvidia and vmware | |
cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build" | |
cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build" | |
# fix permissions on scripts dir | |
chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel" | |
cp arch/${KARCH}/Makefile "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" | |
if [ "${CARCH}" = "i686" ]; then | |
cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/" | |
fi | |
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel/" | |
# add docbook makefile | |
install -D -m644 Documentation/DocBook/Makefile \ | |
"${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile" | |
# add dm headers | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md" | |
cp drivers/md/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md" | |
# add inotify.h | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux" | |
cp include/linux/inotify.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux/" | |
# add wireless headers | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/" | |
cp net/mac80211/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/" | |
# add dvb headers for external modules | |
# in reference to: | |
# http://bugs.archlinux.org/task/9912 | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core" | |
cp drivers/media/dvb-core/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core/" | |
# and... | |
# http://bugs.archlinux.org/task/11194 | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/" | |
cp include/config/dvb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/" | |
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new | |
# in reference to: | |
# http://bugs.archlinux.org/task/13146 | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/" | |
cp drivers/media/dvb-frontends/lgdt330x.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/" | |
cp drivers/media/i2c/msp3400-driver.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/" | |
# add dvb headers | |
# in reference to: | |
# http://bugs.archlinux.org/task/20402 | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb" | |
cp drivers/media/usb/dvb-usb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb/" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends" | |
cp drivers/media/dvb-frontends/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners" | |
cp drivers/media/tuners/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners/" | |
# add xfs and shmem for aufs building | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/mm" | |
# removed in 3.17 series | |
# cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h" | |
# copy in Kconfig files | |
for i in $(find . -name "Kconfig*"); do | |
mkdir -p "${pkgdir}"/usr/lib/modules/${_kernver}/build/`echo ${i} | sed 's|/Kconfig.*||'` | |
cp ${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/${i}" | |
done | |
chown -R root.root "${pkgdir}/usr/lib/modules/${_kernver}/build" | |
find "${pkgdir}/usr/lib/modules/${_kernver}/build" -type d -exec chmod 755 {} \; | |
# strip scripts directory | |
find "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do | |
case "$(file -bi "${binary}")" in | |
*application/x-sharedlib*) # Libraries (.so) | |
/usr/bin/strip ${STRIP_SHARED} "${binary}";; | |
*application/x-archive*) # Libraries (.a) | |
/usr/bin/strip ${STRIP_STATIC} "${binary}";; | |
*application/x-executable*) # Binaries | |
/usr/bin/strip ${STRIP_BINARIES} "${binary}";; | |
esac | |
done | |
# remove unneeded architectures | |
rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arc,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,metag,mips,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa} | |
} | |
_package-docs() { | |
pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase/linux/Linux} kernel" | |
cd "${srcdir}/${_srcname}" | |
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build" | |
cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build" | |
find "${pkgdir}" -type f -exec chmod 444 {} \; | |
find "${pkgdir}" -type d -exec chmod 755 {} \; | |
# remove a file already in linux package | |
rm -f "${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile" | |
} | |
pkgname=("${pkgbase}" "${pkgbase}-headers" "${pkgbase}-docs") | |
for _p in ${pkgname[@]}; do | |
eval "package_${_p}() { | |
$(declare -f "_package${_p#${pkgbase}}") | |
_package${_p#${pkgbase}} | |
}" | |
done | |
# vim:set ts=8 sts=2 sw=2 et: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment