#! /bin/sh # Copyright © 2022 Adam Spragg # SPDX-License-Identifier: LGPL-3.0-or-later # # This file is part of apt-desktop-upgrades # # apt-desktop-upgrades is free software: you can redistribute it and/or modify # under the terms of the GNU Lesser General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your option) # any later version. # # apt-desktop-upgrades is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License # for more details. # # You should have received a copy of the GNU Lesser General Public License along # with apt-desktop-upgrades. If not, see . set -e CHECK_LISTBUGS=false SBINDIR=/usr/local/sbin UPDATE_SYMLINK="/system-update" UPDATE_TARGET="${SBINDIR}/adu-upgrade" apt-get -qq update upgradeable=$(apt -qq list --upgradeable 2>/dev/null) upgrades=$(echo "$upgradeable" | grep -c . | cat) if [ "$upgrades" -eq 0 ]; then exit 0 fi if $CHECK_LISTBUGS && command -v apt-listbugs >/dev/null; then # Sed script to change format of `apt list --upgradeable` to `apt-listbugs` #sed_upg_lb='s:^\([^/]\+\)/[^ ]\+ \([^ ]\+\) .*:\1:' sed_upg_lb='s:^\([^/]\+\)/[^ ]\+ \([^ ]\+\) .*:\1/\2:' #echo "Checking for bugs in: $(echo "$upgradeable" | sed -e "$sed_upg_lb")" bugs=$(echo "$upgradeable" | sed -e "$sed_upg_lb" | xargs apt-listbugs -q list | grep -E -- "- #[[:digit:]]+ -") if [ -n "$bugs" ]; then #echo "$bugs" echo "$upgrades upgrades available, but $(echo "$bugs" | wc -l) bugs exist - ignoring upgrade" if [ x"$(realpath -- "${UPDATE_SYMLINK}")" = x"${UPDATE_TARGET}" ]; then rm -f -- "${UPDATE_SYMLINK}" fi exit 0 fi fi apt-get -q -y --with-new-pkgs --download-only upgrade | grep "^Get:" | cat ln -s -- "${UPDATE_TARGET}" "${UPDATE_SYMLINK}" 2>/dev/null || true # Notify logged-in users that updates are available if command -v notify-send >/dev/null; then # Disable shellcheck's "For loops over find output are fragile" warning here # because filenames in `/run/user` are safe, and doing it The Right Way is a # pain because of the environment variable. # shellcheck disable=SC2044 for addr in $(find /run/user -type s -name bus 2>/dev/null); do export DBUS_SESSION_BUS_ADDRESS="unix:path=$addr"; runuser -u "$(stat -c "%U" "$addr")" -- \ notify-send --app-name=apt-desktop-upgrades \ "$upgrades system updates available" \ "To install them, reboot when it is convenient" done fi echo "$upgrades updates available"