You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
6.3 KiB
229 lines
6.3 KiB
#!/bin/sh
|
|
set -e
|
|
|
|
# This is a SlackBuild script for building as-original-as-possible kernel packages.
|
|
# It combines existing SlackBuilds and other files in the slackware source tree with vanilla SlackBuild conventions in a way that is clean and functional.
|
|
# Unlike the "official" method of building a Slackware kernel, it builds and installs everything in $TMP, so it doesn't taint the host system, and you can build it as a regular user under fakeroot, if you wanted to.
|
|
# This often means that the $PKG directory is used as an intermediate directory to run a SlackBuild in, and that said SlackBuilds may need to be modified to run properly in $PKG.
|
|
|
|
# This script is tailored for x86_64. i?86 support is untested, and would need more modifications (such as building the -smp kernels and fixing $TMP in the packaging SlackBuilds).
|
|
# Other architectures can be added, provided the source tree for them is anywhere close to the original slackware tree.
|
|
|
|
# This SlackBuild should be placed in the "source/k" directory of the source DVD.
|
|
# However, this directory doesn't contain all the files we need, as they're scattered all throughout the slackware tree.
|
|
|
|
# This code may help prepare the source directory:
|
|
if [ "$1" = prepare ]; then
|
|
shift
|
|
|
|
if [ $# -lt 3 ]; then
|
|
echo Usage: $0 prepare \<source\> \<install\> \<output\> 1>&2
|
|
echo e.g. $0 prepare /mnt/tmp/slackware-14.2-source-dvd/source /mnt/tmp/slackware64-14.2-install-dvd/slackware64 ./kernel 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
SOURCE=$1
|
|
INSTALL=$2
|
|
OUT=$3
|
|
|
|
# Copy the "source/k" directory
|
|
cp -aT $SOURCE/k $OUT
|
|
|
|
# Copy the "source/d/kernel-headers" and "source/a/kernel-firmware" directories into it
|
|
cp -at $OUT $SOURCE/d/kernel-headers $SOURCE/a/kernel-firmware
|
|
|
|
# Copy "slackware*/k/kernel-source-*-noarch-*.txt" to use as slack-desc for kernel-source into it
|
|
mkdir -p $OUT/kernel-source
|
|
cp -aT $INSTALL/k/kernel-source-*-noarch-*.txt $OUT/kernel-source/slack-desc
|
|
|
|
# Copy the SlackBuild
|
|
cp -at $OUT $0
|
|
|
|
exit
|
|
fi
|
|
|
|
PKGNAM=${PKGNAM:-linux}
|
|
BASEVER=${BASEVER:-4.4.14}
|
|
VERSION=${VERSION:-$BASEVER}
|
|
ARCH=${ARCH:-x86_64}
|
|
KARCH=${KARCH:-x86}
|
|
BUILD=${BUILD:-1}
|
|
|
|
CWD=$(pwd)
|
|
TMP=${TMP:-/tmp/kernel}
|
|
|
|
NUMJOBS=${NUMJOBS:-" -j7 "}
|
|
|
|
export VERSION ARCH BUILD TMP
|
|
|
|
# Extract the kernel source
|
|
mkdir -p $TMP
|
|
cd $TMP
|
|
rm -rf $PKGNAM-$BASEVER $PKGNAM-$VERSION
|
|
tar xvf $CWD/$PKGNAM-$BASEVER.tar.xz
|
|
|
|
# Rename the kernel source directory to the proper VERSION
|
|
# This is useful if you're applying stable patches and the actual VERSION is different from the one the tarball is named after
|
|
if [ "$BASEVER" != "$VERSION" ]; then
|
|
mv $PKGNAM-$BASEVER $PKGNAM-$VERSION
|
|
fi
|
|
|
|
# Apply patches
|
|
cd $PKGNAM-$VERSION
|
|
#xzcat $CWD/patch-x.x.xx.xz | patch -p1 --verbose
|
|
|
|
|
|
#
|
|
# Build kernel-headers
|
|
#
|
|
cd $TMP/$PKGNAM-$VERSION
|
|
|
|
# Install the kernel headers
|
|
PKG=$TMP/package-kernel-headers
|
|
rm -rf $PKG
|
|
mkdir -p $PKG/usr
|
|
make $NUMJOBS INSTALL_HDR_PATH=$PKG/usr headers_install
|
|
|
|
# Apply some modifications that are present in the original kernel-headers package
|
|
find $PKG/usr -type f -a ! -name '*.h' -delete
|
|
rm -rf $PKG/usr/include/drm
|
|
mv $PKG/usr/include/asm $PKG/usr/include/asm-$KARCH
|
|
ln -sf asm-$KARCH $PKG/usr/include/asm
|
|
|
|
# Install the slack-desc
|
|
mkdir -p $PKG/install
|
|
cat $CWD/kernel-headers/slack-desc > $PKG/install/slack-desc
|
|
|
|
# Create the package
|
|
cd $PKG
|
|
/sbin/makepkg -l y -c n $TMP/kernel-headers-$(echo $VERSION | tr - _)-$KARCH-$BUILD.txz
|
|
|
|
|
|
#
|
|
# Build kernel-huge
|
|
#
|
|
cd $TMP/$PKGNAM-$VERSION
|
|
|
|
# Build the kernel image
|
|
make $NUMJOBS mrproper
|
|
cat $CWD/config-$ARCH/config-huge-* > .config
|
|
make $NUMJOBS oldconfig
|
|
make $NUMJOBS bzImage
|
|
|
|
# Prepare the directory to run the packaging SlackBuild in
|
|
PKG=$TMP/kernel-huge
|
|
rm -rf $PKG
|
|
mkdir -p $PKG
|
|
cp arch/$KARCH/boot/bzImage $PKG
|
|
cp System.map $PKG
|
|
cp .config $PKG/config
|
|
|
|
# Copy the packaging SlackBuild
|
|
cp -aT $CWD/packaging-$ARCH/kernel-huge $PKG
|
|
|
|
# Run the packaging SlackBuild
|
|
cd $PKG
|
|
./kernel-huge.SlackBuild
|
|
|
|
|
|
#
|
|
# Build kernel-generic
|
|
#
|
|
cd $TMP/$PKGNAM-$VERSION
|
|
|
|
# Build the kernel image
|
|
make $NUMJOBS mrproper
|
|
cat $CWD/config-$ARCH/config-generic-* > .config
|
|
make $NUMJOBS oldconfig
|
|
make $NUMJOBS bzImage
|
|
|
|
# Prepare the directory to run the packaging SlackBuild in
|
|
PKG=$TMP/kernel-generic
|
|
rm -rf $PKG
|
|
mkdir -p $PKG
|
|
cp arch/$KARCH/boot/bzImage $PKG
|
|
cp System.map $PKG
|
|
cp .config $PKG/config
|
|
|
|
# Copy the packaging SlackBuild
|
|
cp -aT $CWD/packaging-$ARCH/kernel-generic $PKG
|
|
|
|
# Run the packaging SlackBuild
|
|
cd $PKG
|
|
./kernel-generic.SlackBuild
|
|
|
|
|
|
#
|
|
# Build kernel-modules
|
|
#
|
|
cd $TMP/$PKGNAM-$VERSION
|
|
|
|
# Build the kernel modules with the already-present kernel-generic config
|
|
make $NUMJOBS modules
|
|
|
|
# Prepare the directory to run the packaging SlackBuild in
|
|
PKG=$TMP/kernel-modules
|
|
rm -rf $PKG
|
|
mkdir -p $PKG
|
|
make $NUMJOBS INSTALL_MOD_PATH=$PKG modules_install
|
|
|
|
# Point the build and source links to the proper source directory in /usr/src, as packaged in kernel-source
|
|
rm -f $PKG/lib/modules/$VERSION/build $PKG/lib/modules/$VERSION/source
|
|
ln -s /usr/src/$PKGNAM-$VERSION $PKG/lib/modules/$VERSION/build
|
|
ln -s /usr/src/$PKGNAM-$VERSION $PKG/lib/modules/$VERSION/source
|
|
|
|
# Copy the packaging SlackBuild
|
|
cp -aT $CWD/packaging-$ARCH/kernel-modules $PKG
|
|
|
|
# Prefix absolute module paths in the SlackBuild with $CWD, since we installed the modules there
|
|
sed -i -e 's@/lib/modules/@$CWD&@' $PKG/kernel-modules.SlackBuild
|
|
|
|
# Run the packaging SlackBuild
|
|
cd $PKG
|
|
KERNELRELEASE=$VERSION ./kernel-modules.SlackBuild
|
|
|
|
|
|
#
|
|
# Build kernel-source
|
|
#
|
|
cd $TMP/$PKGNAM-$VERSION
|
|
|
|
# Cleanup the source directory that was prepared and built with the kernel-generic config
|
|
make $NUMJOBS clean
|
|
make $NUMJOBS prepare
|
|
rm .version .config.old
|
|
|
|
# Install the kernel source
|
|
PKG=$TMP/package-kernel-source
|
|
rm -rf $PKG
|
|
mkdir -p $PKG/usr/src
|
|
ln -s $PKGNAM-$VERSION $PKG/usr/src/$PKGNAM
|
|
|
|
# Install the slack-desc
|
|
mkdir -p $PKG/install
|
|
cat $CWD/kernel-source/slack-desc > $PKG/install/slack-desc
|
|
|
|
# Create the package
|
|
cd $PKG
|
|
mv $TMP/$PKGNAM-$VERSION usr/src
|
|
/sbin/makepkg -l y -c n $TMP/kernel-source-$(echo $VERSION | tr - _)-noarch-$BUILD.txz
|
|
|
|
|
|
#
|
|
# Build kernel-firmware
|
|
#
|
|
cd $TMP
|
|
|
|
# Prepare the directory to run the packaging SlackBuild in
|
|
PKG=$TMP/kernel-firmware
|
|
rm -rf $PKG
|
|
mkdir -p $PKG
|
|
cp -aT $CWD/kernel-firmware $PKG
|
|
|
|
# Use --depth=1 to cause git to not to download the entire history
|
|
sed -i -e 's/git clone/& --depth=1/' $PKG/kernel-firmware.SlackBuild
|
|
|
|
# Run the packaging SlackBuild
|
|
cd $PKG
|
|
unset VERSION # The script uses `date` to make a $VERSION
|
|
./kernel-firmware.SlackBuild
|
|
|