#!/bin/bash set -e set -x CWD=$(pwd) THIS_HOST=${THIS_HOST:-$(hostname -s)} PRGNAM=$(basename "$CWD")-$THIS_HOST BUILD=${BUILD:-6} BRANCH=${BRANCH:-mainline} # stable ; mainline ARCH=$(uname -m) TAG=gwh TMP=/tmp/$TAG PKG=$TMP/pkg-$PRGNAM OUTPUT=/tmp NUMJOBS=${NUMJOBS:-$(nproc)} ANEW=${ANEW:-true} CONFIG=${CONFIG:-""} rm -fr "$PKG" VERSION=${VERSION:-$(curl https://www.kernel.org/feeds/kdist.xml | grep -o "[0-9.rc-]*: $BRANCH" | head -n1 | cut -d: -f1)} mkdir -p "$PKG/usr/src/" if [ -e "/usr/src/linux-$VERSION" ] && [[ "$ANEW" != "true" ]]; then cp -a "/usr/src/linux-$VERSION" "$PKG/usr/src/" else if [ "$BRANCH" == "stable" ]; then SRC_URL="https://cdn.kernel.org/pub/linux/kernel/v$(echo "$VERSION" | cut -d. -f1).x" else SRC_URL="https://git.kernel.org/torvalds/t" fi [ ! -e "$CWD"/linux-"$VERSION".tar.gz ] && wget -c "$SRC_URL/linux-$VERSION.tar.gz" -O "$CWD/linux-$VERSION.tar.gz" tar xf "$CWD/linux-$VERSION.tar.gz" -C "$PKG/usr/src/" fi cd "$PKG/usr/src/" || exit 1 mv "linux-$VERSION" "linux-${VERSION}-gwh" #ln -s "linux-$VERSION" linux cd "linux-${VERSION}-gwh" if [ -n "$CONFIG" ] && [ -e "$CONFIG" ]; then cat "$CONFIG" > .config fi if [ ! -f .config ]; then zcat /proc/config.gz > .config fi read make oldconfig "$@" make -j"$NUMJOBS" make modules -j"$NUMJOBS" make modules_install INSTALL_MOD_PATH="$PKG" if [ -z "${HEADERS_ARCH}" ]; then case "$(uname -m)" in i?86) HEADERS_ARCH=x86 ;; x86_64) HEADERS_ARCH=x86 ;; aarch64) HEADERS_ARCH=arm64 ;; # Use uname -m for all other archs: *) HEADERS_ARCH=$(uname -m) ;; esac fi # Generate the kernel headers and clean them up: ( echo "Generating headers from the Linux kernel source tree in ${KERNEL_SOURCE}:" make headers_install ARCH="${HEADERS_ARCH}" INSTALL_HDR_PATH="$PKG/usr" cd "$PKG/usr/include" || exit 1 # You won't want these files. The ones in libdrm work better. rm -rf drm # This next part seems pretty much cosmetic, but since we've been doing this # for a long time (and others also do), we'll stick with it: mv asm "asm-${HEADERS_ARCH}" ln -sf "asm-${HEADERS_ARCH}" asm # Remove unneeded dotfiles: find . -name ".??*" -exec rm -f {} \+ ) VERSION=$(basename "$(find "$PKG/lib/modules/" -type d -maxdepth 1 -mindepth 1 | head -n1)") mkdir -p "$PKG/boot/" # cp System.map "$PKG/boot/System.map-gwh-$VERSION" # cp .config "$PKG/boot/config-gwh-$VERSION" # cp "arch/${ARCH}/boot/bzImage" "$PKG/boot/vmlinuz-gwh-$VERSION" cp System.map "$PKG/boot/System.map-gwh" cp .config "$PKG/boot/config-gwh" cp "arch/${ARCH}/boot/bzImage" "$PKG/boot/vmlinuz-gwh" make clean cd "$PKG/boot/" || exit 1 # ln -s "vmlinuz-gwh-$VERSION" vmlinuz-gwh # ln -s "config-gwh-$VERSION" config-gwh # ln -s "System.map-gwh-$VERSION" System.map-gwh ln -s vmlinuz-gwh "vmlinuz-gwh-$VERSION" ln -s config-gwh "config-gwh-$VERSION" ln -s System.map-gwh "System.map-gwh-$VERSION" mkdir -p "$PKG/install" cat < "$PKG/install/doinst.sh" echo -n "updating grub... " grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub echo OK echo -n "building initrd… " cd / eval \$(/usr/share/mkinitrd/mkinitrd_command_generator.sh -k $VERSION -r | sed "s|/boot/initrd.gz|/boot/initrd-gwh-${VERSION}.gz|") echo "OK" [ -L /boot/initrd-gwh.gz ] && rm /boot/initrd-gwh.gz ln -s /boot/initrd-gwh-${VERSION}.gz /boot/initrd-gwh.gz grub-mkconfig -o /boot/grub/grub.cfg EOF cat < "$PKG/install/slack-desc" $PRGNAM: $PRGNAM (kernel) $PRGNAM: $PRGNAM: Linux is a clone of the operating system Unix, written from scratch by $PRGNAM: Linus Torvalds with assistance from a loosely-knit team of hackers $PRGNAM: across the Net. It aims towards POSIX and Single UNIX Specification $PRGNAM: compliance. $PRGNAM: $PRGNAM: It has all the features you would expect in a modern fully-fledged Unix $PRGNAM: $PRGNAM: http://www.kernel.org $PRGNAM: EOF cd "$PKG" || exit 1 rm -f "$PKG/{,usr/}lib$(uname -m | grep -o 64)/*.la" /sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-$(echo "$VERSION" | tr - _)-$ARCH-$BUILD$TAG.txz"