Added arch-upgrade script and updated README

This commit is contained in:
Eric Renfro 2024-03-19 13:44:01 -04:00
parent 6d6ec69d66
commit 0f527dc6b3
Signed by: psi-jack
SSH Key Fingerprint: SHA256:1TKB8Z257L8EHK8GWNxKgMhD8a+FAR+f+j3nnlcuNVM
2 changed files with 114 additions and 0 deletions

View File

@ -1,2 +1,6 @@
# arch-upgrade
Arch Upgrade wrapper script to handle updates with prioritising specific updates and post-update processes.
Arguments:
-p Pause after successfull updates performed.

110
arch-upgrade Executable file
View File

@ -0,0 +1,110 @@
#!/bin/bash
# Check for interactive session
if [[ "${1,,}" == "-p" ]]; then
pause_after=true
else
pause_after=false
fi
# Color
bold="$(tput bold)"
normal="$(tput sgr0)"
#black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
#magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
# Check if we're running as root, and if not, escalate to it before continuing
checkRoot() {
# Check if script is running as root
if [[ "$EUID" -ne 0 ]]; then
# Check if sudo is installed
if [[ -x "$(command -v sudo)" ]]; then
# Escalate privileges using sudo
exec sudo "$0" "$@"
else
echo "${bold}${red}ERROR: ${normal}sudo is not installed or not accessible."
return 1
fi
fi
}
# Check working requirements
checkRequirements() {
# Check if pacman or archlinux-keyring have updates
if ! pacman -Q pacman-contrib &>/dev/null; then
echo "${bold}${red}ERROR: ${normal}Install pacman-contrib for this script to work properly."
return 2
fi
checkRoot "$@" || return $?
}
# Prompt to run pacdiff to handle update configurations
confirmDiff() {
local run_pacdiff
echo
echo "${bold}${blue}Here's a list of files that need attention${normal}:"
pacdiff -o
echo
read -r -p "Do you want to run pacdiff? (y/n): " run_pacdiff
if [[ "${run_pacdiff,,}" == "y" ]]; then
pacdiff
else
echo "Pacdiff Skipped."
fi
}
# Show updates and build list of packages to upgrade first before others
showUpdates() {
local package
local curversion
local newversion
echo
echo "${bold}${blue}Here's a list of updates that are pending${normal}:"
while read -r package curversion _ newversion; do
echo "${bold}${white}$package ${yellow}$curversion ${normal}-> ${bold}${cyan}$newversion${normal}"
if [[ "$package" =~ (pacman|archlinux-keyring|chaotic-keyring|chaotic-mirrorlist) ]]; then
updateFirst+=("$package")
fi
done <<< "$updates"
echo
}
# Update prompt and confirm to perform it
confirmUpdates()
{
local run_updates
showUpdates
read -r -p "${green}Do you want to update${normal}? (y/n): " run_updates
if [[ "${run_updates,,}" == "y" ]]; then
if [[ -n "${updateFirst[*]}" ]]; then
pacman -Sy --noconfirm --needed "${updateFirst[@]}"
fi
pacman -Syu --noconfirm
confirmDiff
fi
}
# Update package databases -- Shouldn't be needed with checkupdates
checkRequirements "$@" || exit $?
# Check updates and prepare
updates=$(checkupdates --nocolor)
declare -a updateFirst
# Main Routine
if [[ -n "$updates" ]]; then
confirmUpdates
if $pause_after; then
read -n 1 -s -r -p "Press any key to close the terminal."
fi
else
echo "No updates available."
fi