Skip to content

Instantly share code, notes, and snippets.

@bmatthewshea
Last active January 15, 2025 13:48
Show Gist options
  • Save bmatthewshea/6ef60db227d52f39200029312dd5446a to your computer and use it in GitHub Desktop.
Save bmatthewshea/6ef60db227d52f39200029312dd5446a to your computer and use it in GitHub Desktop.
Ubuntu-Debian APT upgrade script
#!/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"
@bmatthewshea
Copy link
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