linux58-tkg: Bring Ubuntu install script and related changes initially introduced with https://github.com/Frogging-Family/linux-tkg/pull/26

This commit is contained in:
Tk-Glitch
2020-08-17 14:14:17 +02:00
parent 4a6b1ef584
commit 2a56141bbf
4 changed files with 528 additions and 254 deletions

View File

@@ -1,68 +1,220 @@
#!/bin/bash
_tkg_srcprep() {
msg2 "Setting version..."
scripts/setlocalversion --save-scmversion
echo "-$pkgrel-tkg-${_cpusched}" > localversion.10-pkgrel
echo "" > localversion.20-pkgname
_basever=58
_basekernel=5.8
_sub=1
# add upstream patch
patch -p1 -i ../patch-"${pkgver}"
_tkg_initscript() {
# ARCH Patches
if [ "${_configfile}" == "config_hardened.x86_64" ] && [ "${_cpusched}" == "cfs" ]; then
msg2 "Using linux hardened patchset"
patch -Np1 -i ../0012-linux-hardened.patch
cp "$_where"/linux"$_basever"-tkg-patches/* "$_where" # copy patches inside the PKGBUILD's dir to preserve makepkg sourcing and md5sum checking
cp "$_where"/linux"$_basever"-tkg-config/* "$_where" # copy config files and hooks inside the PKGBUILD's dir to preserve makepkg sourcing and md5sum checking
# Load external configuration file if present. Available variable values will overwrite customization.cfg ones.
if [ -e "$_EXT_CONFIG_PATH" ]; then
source "$_EXT_CONFIG_PATH" && msg2 "External configuration file $_EXT_CONFIG_PATH will be used to override customization.cfg values." && msg2 ""
fi
if [ -z "$_OPTIPROFILE" ] && [ ! -e "$_where"/cpuschedset ]; then
# Prompt about optimized configurations. Available variable values will overwrite customization.cfg/external config ones.
plain "Do you want to use a predefined optimized profile?"
read -rp "`echo $' > 1.Custom\n 2.Ryzen Desktop (Performance)\n 3.Other Desktop (Performance)\nchoice[1-3?]: '`" _OPTIPROFILE;
fi
if [ "$_OPTIPROFILE" == "2" ]; then
source "$_where"/ryzen-desktop-profile.cfg && msg2 "Ryzen Desktop (Performance) profile will be used." && msg2 ""
elif [ "$_OPTIPROFILE" == "3" ]; then
source "$_where"/generic-desktop-profile.cfg && msg2 "Generic Desktop (Performance) profile will be used." && msg2 ""
fi
# source cpuschedset early if present
if [ -e "$_where"/cpuschedset ]; then
source "$_where"/cpuschedset
fi
# CPU SCHED selector
if [ -z "$_cpusched" ] && [ ! -e "$_where"/cpuschedset ]; then
plain "What CPU sched variant do you want to build/install?"
read -rp "`echo $' > 1.PDS\n 2.Project C / BMQ\n 3.CFS\nchoice[1-3?]: '`" CONDITION;
if [ "$CONDITION" == "2" ]; then
echo "_cpusched=\"bmq\"" > "$_where"/cpuschedset
elif [ "$CONDITION" == "3" ]; then
echo "_cpusched=\"cfs\"" > "$_where"/cpuschedset
else
echo "_cpusched=\"pds\"" > "$_where"/cpuschedset
fi
if [ -n "$_custom_pkgbase" ]; then
echo "_custom_pkgbase=\"${_custom_pkgbase}\"" >> "$_where"/cpuschedset
fi
elif [ "$_cpusched" == "pds" ]; then
echo "_cpusched=\"pds\"" > "$_where"/cpuschedset
elif [ "$_cpusched" == "cfs" ]; then
echo "_cpusched=\"cfs\"" > "$_where"/cpuschedset
elif [ "$_cpusched" == "bmq" ]; then
echo "_cpusched=\"bmq\"" > "$_where"/cpuschedset
else
patch -Np1 -i ../0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
if [ "$_nofallback" != "true" ]; then
warning "Something is wrong with your cpusched selection. Do you want to fallback to CFS (default)?"
read -rp "`echo $' > N/y : '`" _fallback;
fi
if [[ "$_fallback" =~ [yY] ]] || [ "$_nofallback" == "true" ]; then
echo "_cpusched=\"cfs\"" > "$_where"/cpuschedset
else
error "Exiting..."
exit 1
fi
fi
source "$_where"/cpuschedset
}
user_patcher() {
# To patch the user because all your base are belong to us
local _patches=("$_where"/*."${_userpatch_ext}revert")
if [ ${#_patches[@]} -ge 2 ] || [ -e "${_patches}" ]; then
if [ "$_user_patches_no_confirm" != "true" ]; then
msg2 "Found ${#_patches[@]} 'to revert' userpatches for ${_userpatch_target}:"
printf '%s\n' "${_patches[@]}"
read -rp "Do you want to install it/them? - Be careful with that ;)"$'\n> N/y : ' _CONDITION;
fi
if [[ "$_CONDITION" =~ [yY] ]] || [ "$_user_patches_no_confirm" == "true" ]; then
for _f in "${_patches[@]}"; do
if [ -e "${_f}" ]; then
msg2 "######################################################"
msg2 ""
msg2 "Reverting your own ${_userpatch_target} patch ${_f}"
msg2 ""
msg2 "######################################################"
patch -Np1 -R < "${_f}"
echo "Reverted your own patch ${_f}" >> "$_where"/last_build_config.log
fi
done
fi
fi
_patches=("$_where"/*."${_userpatch_ext}patch")
if [ ${#_patches[@]} -ge 2 ] || [ -e "${_patches}" ]; then
if [ "$_user_patches_no_confirm" != "true" ]; then
msg2 "Found ${#_patches[@]} userpatches for ${_userpatch_target}:"
printf '%s\n' "${_patches[@]}"
read -rp "Do you want to install it/them? - Be careful with that ;)"$'\n> N/y : ' _CONDITION;
fi
if [[ "$_CONDITION" =~ [yY] ]] || [ "$_user_patches_no_confirm" == "true" ]; then
for _f in "${_patches[@]}"; do
if [ -e "${_f}" ]; then
msg2 "######################################################"
msg2 ""
msg2 "Applying your own ${_userpatch_target} patch ${_f}"
msg2 ""
msg2 "######################################################"
patch -Np1 < "${_f}"
echo "Applied your own patch ${_f}" >> "$_where"/last_build_config.log
fi
done
fi
fi
}
_tkg_srcprep() {
if [ "${_distro}" == "Arch" ]; then
msg2 "Setting version..."
scripts/setlocalversion --save-scmversion
echo "-$pkgrel-tkg-${_cpusched}" > localversion.10-pkgrel
echo "" > localversion.20-pkgname
# add upstream patch
msg2 "Patching from $_basekernel to $pkgver"
patch -p1 -i "$srcdir"/patch-"${pkgver}"
# ARCH Patches
if [ "${_configfile}" == "config_hardened.x86_64" ] && [ "${_cpusched}" == "cfs" ]; then
msg2 "Using linux hardened patchset"
patch -Np1 -i "$srcdir"/0012-linux-hardened.patch
else
patch -Np1 -i "$srcdir"/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
fi
fi
# graysky's cpu opts - https://github.com/graysky2/kernel_gcc_patch
msg2 "Applying graysky's cpu opts patch"
patch -Np1 -i ../enable_additional_cpu_optimizations_for_gcc_v10.1%2B_kernel_v5.8%2B.patch
if [ "${_distro}" == "Arch" ]; then
patch -Np1 -i "$srcdir"/enable_additional_cpu_optimizations_for_gcc_v10.1%2B_kernel_v5.8%2B.patch
else
patch -Np1 -i "$srcdir"/enable_additional_cpu_optimizations_for_gcc_v10.1+_kernel_v5.8+.patch
fi
# TkG
msg2 "Applying clear linux patches"
patch -Np1 -i ../0002-clear-patches.patch
patch -Np1 -i "$srcdir"/0002-clear-patches.patch
msg2 "Applying glitched base patch"
patch -Np1 -i ../0003-glitched-base.patch
patch -Np1 -i "$srcdir"/0003-glitched-base.patch
if [ "$_misc_adds" = "true" ]; then
if [ -z $_misc_adds ]; then
plain "Enable misc additions ? May contain temporary fixes pending upstream or changes that can break on non-Arch. "
read -rp "`echo $' > [Y]/n : '`" _interactive_misc_adds;
if [ "$_interactive_misc_adds" != "n" ] && [ "$_interactive_misc_adds" != "N" ]; then
_misc_adds="true"
fi
fi
if [ "$_misc_adds" == "true" ]; then
msg2 "Applying misc additions patch"
patch -Np1 -i ../0012-misc-additions.patch
patch -Np1 -i "$srcdir"/0012-misc-additions.patch
fi
if [ "${_cpusched}" == "MuQSS" ]; then
# MuQSS
patch -Np1 -i ../0004-5.8-ck1.patch
msg2 "Applying MuQSS base patch"
patch -Np1 -i "$srcdir"/0004-5.8-ck1.patch
if [ "${_aggressive_ondemand}" == "true" ]; then
patch -Np1 -i ../0004-glitched-ondemand-muqss.patch
msg2 "Applying MuQSS agressive ondemand governor patch"
patch -Np1 -i "$srcdir"/0004-glitched-ondemand-muqss.patch
fi
patch -Np1 -i ../0004-glitched-muqss.patch
msg2 "Applying Glitched MuQSS patch"
patch -Np1 -i "$srcdir"/0004-glitched-muqss.patch
elif [ "${_cpusched}" == "pds" ]; then
# PDS-mq
patch -Np1 -i ../0005-v5.8_undead-pds099o.patch
msg2 "Applying PDS base patch"
patch -Np1 -i "$srcdir"/0005-v5.8_undead-pds099o.patch
if [ "${_aggressive_ondemand}" == "true" ]; then
patch -Np1 -i ../0005-glitched-ondemand-pds.patch
msg2 "Applying PDS agressive ondemand governor patch"
patch -Np1 -i "$srcdir"/0005-glitched-ondemand-pds.patch
fi
patch -Np1 -i ../0005-glitched-pds.patch
msg2 "Applying Glitched PDS patch"
patch -Np1 -i "$srcdir"/0005-glitched-pds.patch
elif [ "${_cpusched}" == "bmq" ]; then
# Project C / BMQ
patch -Np1 -i ../0009-prjc_v5.8-r0.patch
msg2 "Applying Project C / BMQ base patch"
patch -Np1 -i "$srcdir"/0009-prjc_v5.8-r0.patch
if [ "${_aggressive_ondemand}" == "true" ]; then
patch -Np1 -i ../0009-glitched-ondemand-bmq.patch
msg2 "Applying BMQ agressive ondemand governor patch"
patch -Np1 -i "$srcdir"/0009-glitched-ondemand-bmq.patch
fi
patch -Np1 -i ../0009-glitched-bmq.patch
msg2 "Applying Glitched BMQ patch"
patch -Np1 -i "$srcdir"/0009-glitched-bmq.patch
elif [ "${_cpusched}" == "cfs" ]; then
patch -Np1 -i ../0003-glitched-cfs.patch
msg2 "Applying Glitched CFS patch"
patch -Np1 -i "$srcdir"/0003-glitched-cfs.patch
fi
if [ -z "${_configfile}" ]; then
if [ "${_distro}" == "Arch" ]; then
if [ -z "${_configfile}" ]; then
_configfile="config.x86_64"
fi
cat "${srcdir}/${_configfile}" > ./.config
fi
cat "${srcdir}/${_configfile}" > ./.config
# Set some -tkg defaults
echo "# CONFIG_DYNAMIC_FAULT is not set" >> ./.config
@@ -81,8 +233,10 @@ _tkg_srcprep() {
sed -i -e 's/# CONFIG_CMDLINE_BOOL is not set/CONFIG_CMDLINE_BOOL=y/' ./.config
echo "CONFIG_CMDLINE=\"${_custom_commandline}\"" >> ./.config
echo "# CONFIG_CMDLINE_OVERRIDE is not set" >> ./.config
if [ "$_noccache" != "true" ] && pacman -Qq ccache &> /dev/null; then
sed -i -e 's/CONFIG_GCC_PLUGINS=y/# CONFIG_GCC_PLUGINS is not set/' ./.config
if [ "$_noccache" != "true" ]; then
if { [ "$_distro" == "Arch" ] && pacman -Qq ccache &> /dev/null; } || { [ "$_distro" == "Ubuntu" ] && dpkg -l ccache > /dev/null; }; then
sed -i -e 's/CONFIG_GCC_PLUGINS=y/# CONFIG_GCC_PLUGINS is not set/' ./.config
fi
fi
if [ "$_font_autoselect" != "false" ]; then
@@ -557,25 +711,27 @@ _tkg_srcprep() {
read -rp "`echo $' > N/y : '`" CONDITION7;
fi
if [[ "$CONDITION7" =~ [yY] ]] || [ "$_acs_override" == "true" ]; then
patch -Np1 -i ../0006-add-acs-overrides_iommu.patch
msg2 "Patching ACS override"
patch -Np1 -i "$srcdir"/0006-add-acs-overrides_iommu.patch
fi
# bcachefs
# if [ -z "$_bcachefs" ]; then
# plain ""
# plain "Add Bcache filesystem support? You'll have to install bcachefs-tools-git from AUR for utilities."
# plain "https://bcachefs.org/"
# read -rp "`echo $' > N/y : '`" CONDITION8;
# fi
# if [[ "$CONDITION8" =~ [yY] ]] || [ "$_bcachefs" == "true" ]; then
# patch -Np1 -i ../0008-5.8-bcachefs.patch
# echo "CONFIG_BCACHEFS_FS=m" >> ./.config
# echo "CONFIG_BCACHEFS_QUOTA=y" >> ./.config
# echo "CONFIG_BCACHEFS_POSIX_ACL=y" >> ./.config
# echo "# CONFIG_BCACHEFS_DEBUG is not set" >> ./.config
# echo "# CONFIG_BCACHEFS_TESTS is not set" >> ./.config
# echo "# CONFIG_DEBUG_CLOSURES is not set" >> ./.config
# fi
#if [ -z "$_bcachefs" ]; then
# plain ""
# plain "Add Bcache filesystem support? You'll have to install bcachefs-tools-git from AUR for utilities."
# plain "https://bcachefs.org/"
# read -rp "`echo $' > N/y : '`" CONDITION8;
#fi
#if [[ "$CONDITION8" =~ [yY] ]] || [ "$_bcachefs" == "true" ]; then
# msg2 "Patching Bcache filesystem support override"
# patch -Np1 -i "$srcdir"/0008-5.8-bcachefs.patch
# echo "CONFIG_BCACHEFS_FS=m" >> ./.config
# echo "CONFIG_BCACHEFS_QUOTA=y" >> ./.config
# echo "CONFIG_BCACHEFS_POSIX_ACL=y" >> ./.config
# echo "# CONFIG_BCACHEFS_DEBUG is not set" >> ./.config
# echo "# CONFIG_BCACHEFS_TESTS is not set" >> ./.config
# echo "# CONFIG_DEBUG_CLOSURES is not set" >> ./.config
#fi
# fsync support
if [ -z "$_fsync" ]; then
@@ -585,7 +741,8 @@ _tkg_srcprep() {
read -rp "`echo $' > N/y : '`" CONDITION9;
fi
if [[ "$CONDITION9" =~ [yY] ]] || [ "$_fsync" == "true" ]; then
patch -Np1 -i ../0007-v5.8-fsync.patch
msg2 "Patching Fsync support"
patch -Np1 -i "$srcdir"/0007-v5.8-fsync.patch
fi
# ZFS fix
@@ -596,17 +753,18 @@ _tkg_srcprep() {
read -rp "`echo $' > N/y : '`" CONDITION11;
fi
if [[ "$CONDITION11" =~ [yY] ]] || [ "$_zfsfix" == "true" ]; then
patch -Np1 -i ../0011-ZFS-fix.patch
msg2 "Patching missing symbol for AES-NI/AVX support on ZFS"
patch -Np1 -i "$srcdir"/0011-ZFS-fix.patch
fi
# Community patches
if [ -n "$_community_patches" ]; then
if [ ! -d "$_where/../../community-patches" ]; then
cd "$_where/../.." && git clone https://github.com/Frogging-Family/community-patches.git && cd "${srcdir}/linux-${_basekernel}"
cd "$_where/../.." && git clone https://github.com/Frogging-Family/community-patches.git && cd "${srcdir}/${_srcpath}"
fi
_community_patches=($_community_patches)
for _p in ${_community_patches[@]}; do
ln -s "$_where"/../../community-patches/linux58-tkg/$_p "$_where"/
ln -s "$_where"/../../community-patches/linux"$_basever"-tkg/$_p "$_where"/
done
fi
@@ -622,11 +780,13 @@ _tkg_srcprep() {
rm -f "$_where"/$_p
done
# don't run depmod on 'make install'. We'll do this ourselves in packaging
sed -i '2iexit 0' scripts/depmod.sh
if [ "$_distro" == "Arch" ]; then
# 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
# get kernel version
make prepare
fi
# modprobed-db
if [ -z "$_modprobeddb" ]; then
@@ -678,7 +838,7 @@ _tkg_srcprep() {
plain "to configure the kernel before building it?"
plain "If you do, make sure your terminal is currently"
plain "at least 19 lines by 80 columns large or you'll get an error :D"
read -rp "`echo $' > 0. nope\n 1. menuconfig\n 2. nconfig\n choice[0-2?]: '`" CONDITIONMNC;
read -rp "`echo $' > 0. nope\n 1. menuconfig\n 2. nconfig\n 3. xconfig\n choice[0-3?]: '`" CONDITIONMNC;
_menunconfig="$CONDITIONMNC"
fi
if [ 1 = "$_menunconfig" ]; then
@@ -687,11 +847,14 @@ _tkg_srcprep() {
elif [ 2 = "$_menunconfig" ]; then
cp .config .config.orig
make nconfig
elif [ 3 = "$_menunconfig" ]; then
cp .config .config.orig
make xconfig
else
# rewrite configuration
yes "" | make config >/dev/null
fi
if [ 1 = "$_menunconfig" ] || [ 2 = "$_menunconfig" ]; then
if [ 1 = "$_menunconfig" ] || [ 2 = "$_menunconfig" ] || [ 3 = "$_menunconfig" ]; then
if [ -z "${_diffconfig}" ]; then
while true; do
read -r -p 'Generate a config fragment from your changes? [y/N] ' CONDITIONF
@@ -723,6 +886,90 @@ _tkg_srcprep() {
rm .config.orig
fi
make -s kernelrelease > version
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
if [ "$_distro" == "Arch" ]; then
make -s kernelrelease > version
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
fi
}
exit_cleanup() {
# Remove state tracker
rm -f "$_where"/cpuschedset
# Remove temporarily copied files
rm -rf "$_where"/*.patch
rm -rf "$_where"/*-profile.cfg
rm -f "$_where"/config*
rm -f "$_where"/*.hook
rm -f "$_where"/cleanup
rm -f "$_where"/prepare
# Community patches removal in case of failure
for _p in ${_community_patches[@]}; do
rm -f "$_where"/"$_p"
done
if [ "$_NUKR" = "true" ] && [ "$_where" != "$srcdir" ]; then
rm -rf "$_where"/src/*
# Double tap
rm -rf "$srcdir"/linux-*
rm -rf "$srcdir"/*.xz
rm -rf "$srcdir"/*.patch
rm -rf "$srcdir"/*-profile.cfg
rm -f "$srcdir"/config.x86_64
rm -f "$srcdir"/customization.cfg
else
# Meh
rm -rf "$srcdir"/linux-${_basekernel}/Documentation/filesystems/aufs/*
rm -f "$srcdir"/linux-${_basekernel}/Documentation/ABI/testing/*-aufs
rm -rf "$srcdir"/linux-${_basekernel}/fs/aufs/*
rm -f "$srcdir"/linux-${_basekernel}/include/uapi/linux/aufs*
rm -f "$srcdir"/linux-${_basekernel}/mm/prfile.c
rm -f "$srcdir"/linux-${_basekernel}/block/bfq*
rm -rf "$srcdir"/linux-${_basekernel}/drivers/scsi/vhba/*
rm -rf "$srcdir"/linux-${_basekernel}/fs/exfat/*
rm -f "$srcdir"/linux-${_basekernel}/include/trace/events/fs.h
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-PDS-mq.txt
rm -f "$srcdir"/linux-${_basekernel}/include/linux/skip_list.h
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/pds.c
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/pds_sched.h
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-BMQ.txt
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/alt_core.c
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/sched/alt_debug.c
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/alt_sched.h
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-BFS.txt
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-MuQSS.txt
rm -rf "$srcdir"/linux-${_basekernel}/arch/blackfin/*
rm -f "$srcdir"/linux-${_basekernel}/arch/powerpc/configs/c2k_defconfig
rm -f "$srcdir"/linux-${_basekernel}/arch/score/configs/spct6600_defconfig
rm -f "$srcdir"/linux-${_basekernel}/arch/tile/configs/tilegx_defconfig
rm -f "$srcdir"/linux-${_basekernel}/arch/tile/configs/tilepro_defconfig
rm -f "$srcdir"/linux-${_basekernel}/drivers/staging/lustre/lnet/lnet/lib-eq.c
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/MuQSS*
rm -f "$srcdir"/linux-${_basekernel}/kernel/skip_list.c
rm -f "$srcdir"/linux-${_basekernel}/Documentation/vm/uksm.txt
rm -f "$srcdir"/linux-${_basekernel}/include/linux/sradix-tree.h
rm -f "$srcdir"/linux-${_basekernel}/include/linux/uksm.h
rm -f "$srcdir"/linux-${_basekernel}/lib/sradix-tree.c
rm -f "$srcdir"/linux-${_basekernel}/mm/uksm.c
fi
if [ "${_distro}" == "Arch" ]; then
remove_deps
fi
msg2 'exit cleanup done\n'
if [ -n "$_runtime" ]; then
msg2 "compilation time : \n$_runtime"
fi
}
trap exit_cleanup EXIT