diff --git a/self_compilation.sh b/self_compilation.sh index 4bdebc0a04f30c8d073d42d933ede8d25838c278..1496e2d3084ed04170c9a296e397bb329d12e4f0 100644 --- a/self_compilation.sh +++ b/self_compilation.sh @@ -23,29 +23,32 @@ function set_kver() { # Invoke function to prompt end-user for desired version (must be an active release in the Anthraxx Linux-Hardened repository) set_kver -# Dependencies -declare -A osInfo -osInfo[/etc/void-release]="xbps" -osInfo[/etc/fedora-release]="dnf" -osInfo[/etc/debian_version]="apt-get" - -echo "Package manager: $package_manager" - -for f in ${!osInfo[@]} -do - if [[ -f $f ]]; then - package_manager=${osInfo[$f]} - if [[ $package_manager == "xbps" ]]; then +function check_distro(){ + declare -r distroId="$(awk -F= '$1=="ID"{print $NF}' /etc/os-release)" + case "${distroId,,}" in + *void*) + printf '%s\n' "Detected Void Linux..." xbps-install -Sy make gcc xz elfutils elfutils-devel flex ncurses-devel openssl openssl-devel argp-standalone gcc-ada mpc libmpc-devel gmp-devel perl - elif [[ $package_manager == "dnf" ]]; then - sudo dnf install binutils /usr/include/{libelf.h,openssl/pkcs7.h} \ - /usr/bin/{bc,bison,flex,gcc,git,openssl,make,perl,pahole,zstd} - elif [[ $package_manager == "apt-get" ]]; then + return 0 + ;; + *debian*|*ubuntu*) + printf '%s\n' "Detected Debian-based Distribution..." sudo apt-get install build-essential linux-source bc kmod cpio flex libncurses5-dev libelf-dev libssl-dev dwarves bison - fi - fi -done + return 0 + ;; + *fedora*|*redhat*) + printf '%s\n' "Detected RHEL-based Distribution..." + sudo dnf install binutils /usr/include/{libelf.h,openssl/pkcs7.h} \ + return 0 + ;; + *) + printf '%s\n' "Unable to detect Operating System!" >&2 + return 1 + ;; + esac +} +check_distro # Staging w/ error handling # Pull down Anthraxx linux-hardened upstream @@ -60,9 +63,22 @@ fi cd /usr/src/linux-hardened-"$KVER" # Pull down plague kconfig -wget https://0xacab.org/optout/plague-kernel/-/raw/main/host_hardened.config -O .config -# wget https://0xacab.org/optout/plague-kernel/-/raw/main/virt_hardened.config -O .config -## virt_hardened.config is still a WIP +read -rp 'Are you compiling this kernel for a physical machine (host) or virtual machine (VM)? [host/vm]: ' response +if [[ "${response,,}" = "vm" ]] +then + # Perform task(s) specifically for VM environments + echo "Compiling a VM kernel" + wget https://0xacab.org/optout/plague-kernel/-/raw/main/virt_hardened.config -O .config + ## virt_hardened.config is still a WIP +elif [[ "${response,,}" = "host" ]] +then + # Perform task(s) specifically for Host environments + echo "Compiling a host kernel" + wget https://0xacab.org/optout/plague-kernel/-/raw/main/host_hardened.config -O .config +else + echo "Invalid input. Please choose either \"Host\" or \"VM\"." + exit 1 +fi # Prompt if baseline Plague kernel is desired ## If not, proceed to fingerprint device @@ -87,32 +103,37 @@ fi make -j $(nproc --all) make modules_install INSTALL_MOD_STRIP=1 install -# Determine commands needed via osInfo -for f in ${!osInfo[@]} -do - if [[ -f $f ]]; then - package_manager=${osInfo[$f]} - if [[ $package_manager == "xbps" ]]; then +case "${distroId,,}" in + *void*) cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-"$KVER" dracut --kver "$KVER" --force grub-mkconfig -o /boot/grub/grub.cfg xbps-reconfigure -fa - /usr/bin/update-grub - elif [[ $package_manager == "dnf" ]]; then - command -v installkernel - elif [[ $package_manager == "apt-get" ]]; then + /usr/bin/update-grub + return 0 + ;; + *debian*|*ubuntu*) cp ./arch/x86_64/boot/bzImage /boot/vmlinuz-"$KVER" dracut --kver "$KVER" --force update-grub2 - fi - fi -done + return 0 + ;; + *fedora*|*redhat*) + command -v installkernel + return 0 + ;; + *) + printf '%s\n' "Unable to detect Operating System!" >&2 + return 1 + ;; + esac + # Remove sysmap/signing keys -rm /lib/modules/"$KVER"_1/source/certs/signing_key* -rm /lib/modules/"$KVER"_1/source/System.map -rm /lib/modules/"$KVER"_1/source -rm /lib/modules/"$KVER"_1/build +rm /lib/modules/"$KVER"/source/certs/signing_key* +rm /lib/modules/"$KVER"/source/System.map +rm /lib/modules/"$KVER"/source +rm /lib/modules/"$KVER"/build echo "Congrats! Your custom kernel based on the PlagueOS kernel configuration has been installed." echo "Reboot now? (y/N): "