#!/bin/sh # name: system-update # summary: - runs all relevant update commands for a machine # - automatically detects and handles apt, snap and flatpak # - fully POSIX shell compliant # params: none # check if a command is available has_command() { # $command command -v "$1" 1>/dev/null 2>/dev/null } # run self as root if [ "$(id -u)" -ne 0 ]; then if has_command sudo; then # shellcheck disable=SC2068 exec sudo "$(readlink -f "$0")" $@ else echo "This script is designed to be run as root!" exit 1 fi fi # handle apt packages if has_command apt-get; then set -ex # update package sources apt-get --yes update # upgrade installed packages apt-get --yes dist-upgrade # remove unused dependencies apt-get --yes --purge autoremove # remove leftover local archives apt-get --yes autoclean # remove leftover config files apt-get --yes purge '?config-files' set +ex fi # handle snaps if has_command snap; then set -ex # upgrade installed snaps snap refresh # remove disabled snaps: https://askubuntu.com/a/1040131 set +x env LANG=en_US.UTF-8 snap list --all \ | awk '/disabled/{print $1, $3}' \ | while read -r snap_name snap_revision; do set -x snap remove "${snap_name}" --revision="${snap_revision}" set +x done set +ex fi # handle flatpaks if has_command flatpak; then set -ex # upgrade installed flatpaks flatpak update --noninteractive # remove unused flatpaks flatpak uninstall --noninteractive --unused set +ex fi