been using Arch for years but i am still a novice, yesterday i had found that in order for something to work on my system i will need to edit a few lines in kernel which i did, then removed unnecessary modules > intel, > nvidia, compiled. it worked great but with Arch and its rolling release i am dreading the next update and having to go through this again.
what methods are there to automate this process?
this sounds very involved initially but hands off after the fact.
Script
#!/bin/bash cd ~/ || exit LATEST_KERNEL=$(curl -s https://www.kernel.org | grep -Po 'linux-\d+\.\d+\.\d+\.tar\.xz' | head -1) echo "Latest Kernel: $LATEST_KERNEL" KERNEL_URL="https://cdn.kernel.org/pub/linux/kernel/v6.x/$LATEST_KERNEL" echo "Kernel URL: $KERNEL_URL" DIR_NAME=$(echo $LATEST_KERNEL | sed 's/\.tar\.xz//') mkdir -p ./$DIR_NAME wget -O ./$DIR_NAME/$LATEST_KERNEL "$KERNEL_URL" || exit tar -xf ./$DIR_NAME/$LATEST_KERNEL -C ./$DIR_NAME || exit EXTRACTED_DIR=$(tar -tf ./$DIR_NAME/$LATEST_KERNEL | head -1 | cut -f1 -d"/") cd ./$DIR_NAME/$EXTRACTED_DIR || exit zcat /proc/config.gz > .config echo "Kernel config copied." if [ -f "drivers/gpu/drm/amd/display/dc/link/link_dpms.c" ] && [ -f "drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c" ]; then echo "Files found, proceeding with modifications..." sed -i 's/#define LINK_TRAINING_RETRY_DELAY 50 \/\* ms \*\//#include <linux\/module.h>\nstatic int link_training_retry_delay = 50;\nmodule_param(link_training_retry_delay, int, 0644);\nMODULE_PARM_DESC(link_training_retry_delay, "Delay between link training retries (ms)");\n#define LINK_TRAINING_RETRY_DELAY link_training_retry_delay/' drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c sed -i 's/#define LINK_TRAINING_ATTEMPTS 4/#include <linux\/module.h>\nstatic int link_training_attempts = 4;\nmodule_param(link_training_attempts, int, 0644);\nMODULE_PARM_DESC(link_training_attempts, "Number of link training attempts");\n#define LINK_TRAINING_ATTEMPTS link_training_attempts/' drivers/gpu/drm/amd/display/dc/link/link_dpms.c else echo "One or both files not found in the kernel source directory." fi echo "Kernel modifications complete." make olddefconfig || exit #make || exit echo "Compiling the kernel..." make -j16 || exit echo "Building modules..." sudo make modules_install || exit echo "Installing the kernel..." sudo make install || exit echo "Backing up existing kernel files..." sudo cp /boot/vmlinuz-linux /boot/vmlinuz-linux.bak sudo cp /boot/initramfs-linux.img /boot/initramfs-linux.img.bak echo "Moving new kernel files to /boot..." sudo cp ./arch/x86/boot/bzImage /boot/vmlinuz-fix sudo mkinitcpio -k $(make kernelrelease) -c /etc/mkinitcpio.conf -g /boot/initramfs-fix.img if [ -f /boot/vmlinuz-fix ] && [ -f /boot/initramfs-fix.img ]; then echo "Kernel and initramfs moved to /boot successfully." else echo "Failed to move kernel or initramfs files to /boot." exit 1 fi echo "Kernel compilation, installation, and file replacement completed successfully."
Yeah the thought is that as long as my patch applies without error, I would get the latest kernel automatically built and can just update my laptop normally with pacman. And since I have a server anyways I might as well use it to compile the kernel at night. I’m also thinking of doing the same with some aur packages as well.