mirror of
https://github.com/erenfro/arch-upgrade.git
synced 2024-11-21 17:45:36 -05:00
Added arch-upgrade script and updated README
This commit is contained in:
parent
6d6ec69d66
commit
0f527dc6b3
2 changed files with 114 additions and 0 deletions
|
@ -1,2 +1,6 @@
|
||||||
# arch-upgrade
|
# arch-upgrade
|
||||||
Arch Upgrade wrapper script to handle updates with prioritising specific updates and post-update processes.
|
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
110
arch-upgrade
Executable 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
|
Loading…
Reference in a new issue