| #!/usr/bin/env bash |
| # SPDX-License-Identifier: LGPL-2.1-or-later |
| set -eu |
| set -o pipefail |
| |
| command="${1:?}" |
| shift |
| |
| command -v systemctl >/dev/null || exit 0 |
| |
| case "$command" in |
| install-system-units) |
| systemctl --no-reload preset "$@" |
| ;; |
| |
| install-user-units) |
| systemctl --no-reload preset --global "$@" |
| ;; |
| |
| remove-system-units) |
| if [ -d /run/systemd/system ]; then |
| systemctl --no-reload disable --now --no-warn "$@" |
| else |
| systemctl --no-reload disable --no-warn "$@" |
| fi |
| ;; |
| |
| remove-user-units) |
| systemctl --global disable --no-warn "$@" |
| |
| [ -d /run/systemd/system ] || exit 0 |
| |
| users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') |
| for user in $users; do |
| SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ |
| systemctl --user -M "$user@" disable --now --no-warn "$@" & |
| done |
| wait |
| ;; |
| |
| mark-restart-system-units) |
| [ -d /run/systemd/system ] || exit 0 |
| |
| for unit in "$@"; do |
| systemctl set-property "$unit" Markers=+needs-restart & |
| done |
| wait |
| ;; |
| |
| mark-restart-user-units) |
| [ -d /run/systemd/system ] || exit 0 |
| |
| users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') |
| for user in $users; do |
| for unit in "$@"; do |
| SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ |
| systemctl --user -M "$user@" set-property "$unit" Markers=+needs-restart & |
| done |
| done |
| wait |
| ;; |
| |
| system-reload-restart|system-reload|system-restart) |
| if [ -n "$*" ]; then |
| echo "Unexpected arguments for '$command': $*" |
| exit 2 |
| fi |
| |
| [ -d /run/systemd/system ] || exit 0 |
| |
| if [[ "$command" =~ reload ]]; then |
| systemctl daemon-reload |
| fi |
| |
| if [[ "$command" =~ restart ]]; then |
| systemctl reload-or-restart --marked |
| fi |
| ;; |
| |
| user-reload-restart|user-reload|user-restart|user-reexec) |
| if [ -n "$*" ]; then |
| echo "Unexpected arguments for '$command': $*" |
| exit 2 |
| fi |
| |
| [ -d /run/systemd/system ] || exit 0 |
| |
| users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p') |
| |
| if [[ "$command" =~ reexec ]]; then |
| for user in $users; do |
| SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ |
| systemctl --user -M "$user@" daemon-reexec & |
| done |
| wait |
| fi |
| |
| if [[ "$command" =~ reload ]]; then |
| for user in $users; do |
| SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ |
| systemctl --user -M "$user@" daemon-reload & |
| done |
| wait |
| fi |
| |
| if [[ "$command" =~ restart ]]; then |
| for user in $users; do |
| SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \ |
| systemctl --user -M "$user@" reload-or-restart --marked & |
| done |
| wait |
| fi |
| ;; |
| |
| *) |
| echo "Unknown verb '$command'" |
| exit 3 |
| ;; |
| esac |