Last active
January 15, 2025 13:48
-
-
Save bmatthewshea/6ef60db227d52f39200029312dd5446a to your computer and use it in GitHub Desktop.
Ubuntu-Debian APT upgrade script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# "system_update" | |
# Brady Shea | |
# Creation: 18SEP2020 - conversion of system_update alias to bash script | |
# Last update: 13DEC2024 - fixed distro string for debian, added uptime to info presented | |
# Original location: https://gist.github.com/bmatthewshea/6ef60db227d52f39200029312dd5446a | |
# Author Website: https://www.holylinux.net/ | |
# | |
# Place this script in "/usr/local/sbin/system_update", or similar location under your $PATH | |
# It needs root permissions (SUDO) to execute. | |
# | |
# Change these settings to your liking: | |
################################# | |
noprompting=true # ( true | false ) (APT option: -y, --yes, --assume-yes) | |
sleepy=5 # (in secs) (Pause a bit between autoremoves and updates) | |
bootpartitionwarning=102400 # (in KiB) (102400 KiB = ~100MiB - a reasonable amount) | |
################################# | |
# STATIC VARIABLES # | |
BRIGHT_RED=$(tput bold)$(tput setaf 1) | |
BRIGHT_GREEN=$(tput bold)$(tput setaf 2) | |
GREEN=$(tput setaf 2) | |
BRIGHT_YELLOW=$(tput bold)$(tput setaf 3) | |
BRIGHT_WHITE=$(tput bold)$(tput setaf 7) | |
COLOR_OFF=$(tput sgr0) | |
scriptname=`basename "$0"` | |
bootavail=$(df --output=avail /boot | tail -n 1) | |
rebootfileflag=/var/run/reboot-required | |
osrelease=$(grep "PRETTY_NAME=" /usr/lib/os-release | cut -d '"' -f 2) | |
upt=$(uptime -p | tail -c+4) | |
# OTHER VARIABLES # | |
noprompt= | |
if [[ $noprompting == "true" ]]; then | |
noprompt=-y | |
fi | |
rebootreq=0 | |
problems=0 | |
# FUNCTIONS # | |
root_user () { [ ${EUID:-$(id -u)} -eq 0 ]; } | |
## No point going any further in script if not sudo: | |
if ! root_user; then printf "\nPlease use: \'sudo ${scriptname}\'\nExiting.\n\n"; exit; fi | |
sleeptimer () { | |
for (( count=1; count<=$sleepy; count++ )); do | |
printf "${BRIGHT_WHITE}.${COLOR_OFF}"; sleep 1; | |
done | |
printf "\n" | |
} | |
rebootcheck () { | |
rebootreq="false" | |
if [ -f $rebootfileflag ]; then | |
rebootreq="true" | |
fi | |
} | |
okaynookay () { | |
showalert="${GREEN}(PASS)${COLOR_OFF}" | |
if [ $problems == "1" ]; then | |
showalert="${BRIGHT_RED}(FAIL)${COLOR_OFF}" | |
fi | |
problems=0 | |
} | |
# MAIN PROGRAM # | |
printf "\n${BRIGHT_YELLOW}SYSTEM UPDATE STARTED${COLOR_OFF}\n\n" | |
printf " ${BRIGHT_WHITE}Current Distribution:${COLOR_OFF} ${osrelease}\n" | |
if [[ $bootavail -lt bootpartitionwarning ]]; then | |
problems=1; okaynookay | |
displaybootavail="${bootavail} ${showalert}" | |
else | |
problems=0; okaynookay | |
displaybootavail="${bootavail} ${showalert}" | |
fi | |
printf " ${BRIGHT_WHITE}Available /boot space:${COLOR_OFF} %s %s\n" $displaybootavail | |
rebootcheck ## (pre update) | |
if [[ $rebootreq == "true" ]]; then | |
problems=1; okaynookay; | |
displayrebootreq="${rebootreq} ${showalert}" | |
else | |
problems=0; okaynookay; | |
displayrebootreq="${rebootreq} ${showalert}" | |
fi | |
printf " ${BRIGHT_WHITE}Reboot required currently:${COLOR_OFF} %s %s\n" $displayrebootreq | |
printf " ${BRIGHT_WHITE}Uptime:${COLOR_OFF} ${upt}\n" | |
if [[ $rebootreq == "true" || $bootavail -lt $bootpartitionwarning ]]; then | |
while true; do | |
read -p " $(printf "\n You have warnings. Proceed anyway? [y/N] ")" userinput | |
echo | |
case $userinput in | |
[Yy]* ) break;; | |
[Nn]* ) exit;; | |
* ) exit;; | |
esac | |
done | |
fi | |
## START UPDATE ## | |
printf "\n${BRIGHT_WHITE}Updating from sources..${COLOR_OFF}\n" | |
apt update | |
printf "\n${BRIGHT_WHITE}Running autoremove before updates..${COLOR_OFF}\n" | |
apt ${noprompt} autoremove | |
printf "\n${BRIGHT_WHITE}Autoremove completed. Sleeping ${sleepy} seconds${COLOR_OFF}"; sleeptimer | |
printf "\n${BRIGHT_WHITE}Installing any upgrades found..${COLOR_OFF}\n" | |
apt ${noprompt} upgrade | |
printf "\n${BRIGHT_WHITE}Updates have completed. Sleeping ${sleepy} seconds${COLOR_OFF}"; sleeptimer | |
printf "\n${BRIGHT_WHITE}Re-running autoremove post-updates..${COLOR_OFF}\n" | |
apt ${noprompt} autoremove | |
rebootcheck ## (post update) | |
if [[ $rebootreq == "true" ]]; then | |
printf "\n${BRIGHT_RED} *** A system reboot is required. ***${COLOR_OFF}\n" | |
else | |
printf "\n${GREEN} A system reboot is NOT required at this time.${COLOR_OFF}\n" | |
fi | |
printf "\n${BRIGHT_YELLOW}SYSTEM UPDATE COMPLETED. Exiting.${COLOR_OFF}\n\n" |
Author
bmatthewshea
commented
Dec 13, 2024
•
- Fixed Debian (bookworm) printf/lsb_release format issue on release information (differing arguments than that of Ubuntu) . Pulling info directly from originating file now (and not lsb_release using printf formatting). Shows correctly on all Debian/APT flavored distros now.
- Added 'uptime' to info presented at startup.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment