| #!/usr/bin/env bash |
| # SPDX-License-Identifier: LGPL-2.1-or-later |
| set -ex |
| |
| # Silence warning from running_in_chroot_or_offline() |
| export SYSTEMD_IGNORE_CHROOT=1 |
| |
| systemctl=${1:-systemctl} |
| systemd_id128=${2:-systemd-id128} |
| |
| unset root |
| cleanup() { |
| [ -n "$root" ] && rm -rf "$root" |
| } |
| trap cleanup exit |
| root=$(mktemp -d --tmpdir systemctl-test.XXXXXX) |
| |
| islink() { |
| test -h "$1" || return 1 |
| test "$(readlink "$1")" = "$2" || return 2 |
| } |
| |
| : '------enable nonexistent------------------------------------' |
| ( ! "$systemctl" --root="$root" enable test1.service ) |
| |
| : '------basic enablement--------------------------------------' |
| mkdir -p "$root/etc/systemd/system" |
| cat >"$root/etc/systemd/system/test1.service" <<EOF |
| [Install] |
| WantedBy=default.target |
| RequiredBy=special.target |
| EOF |
| |
| "$systemctl" --root="$root" enable test1.service |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" reenable test1.service |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" disable test1.service |
| test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| : '------enable when link already exists-----------------------' |
| # We don't read the symlink target, so it's OK for the symlink to point |
| # to something else. We should just silently accept this. |
| |
| mkdir -p "$root/etc/systemd/system/default.target.wants" |
| mkdir -p "$root/etc/systemd/system/special.target.requires" |
| ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/default.target.wants/test1.service" |
| ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" enable test1.service |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" reenable test1.service |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" disable test1.service |
| test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| : '------suffix guessing---------------------------------------' |
| "$systemctl" --root="$root" enable test1 |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" reenable test1 |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| "$systemctl" --root="$root" disable test1 |
| test ! -e "$root/etc/systemd/system/default.target.wants/test1.service" |
| test ! -e "$root/etc/systemd/system/special.target.requires/test1.service" |
| |
| : '-------aliases----------------------------------------------' |
| cat >>"$root/etc/systemd/system/test1.service" <<EOF |
| Alias=test1-goodalias.service |
| Alias=test1@badalias.service |
| Alias=test1-badalias.target |
| Alias=test1-badalias.socket |
| # we have a series of good, bad, and then good again |
| Alias=test1-goodalias2.service |
| EOF |
| |
| ( ! "$systemctl" --root="$root" enable test1 ) |
| test -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| test -e "$root/etc/systemd/system/test1-goodalias.service" |
| test -h "$root/etc/systemd/system/test1-goodalias.service" |
| test ! -h "$root/etc/systemd/system/test1@badalias.service" |
| test ! -h "$root/etc/systemd/system/test1-badalias.target" |
| test ! -h "$root/etc/systemd/system/test1-badalias.socket" |
| test -e "$root/etc/systemd/system/test1-goodalias2.service" |
| test -h "$root/etc/systemd/system/test1-goodalias2.service" |
| |
| : '-------aliases in reeanble----------------------------------' |
| ( ! "$systemctl" --root="$root" reenable test1 ) |
| islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service" |
| islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service" |
| |
| test ! -h "$root/etc/systemd/system/test1@badalias.service" |
| test ! -h "$root/etc/systemd/system/test1-badalias.target" |
| test ! -h "$root/etc/systemd/system/test1-badalias.socket" |
| |
| "$systemctl" --root="$root" disable test1 |
| test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" |
| test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" |
| test ! -h "$root/etc/systemd/system/test1-goodalias.service" |
| |
| : '-------aliases when link already exists---------------------' |
| cat >"$root/etc/systemd/system/test1a.service" <<EOF |
| [Install] |
| Alias=test1a-alias.service |
| EOF |
| |
| ln -s /usr/lib/systemd/system/test1a.service "$root/etc/systemd/system/test1a-alias.service" |
| |
| "$systemctl" --root="$root" enable test1a.service |
| test -h "$root/etc/systemd/system/test1a-alias.service" |
| |
| "$systemctl" --root="$root" disable test1a.service |
| test ! -h "$root/etc/systemd/system/test1a-alias.service" |
| |
| : '-------also units-------------------------------------------' |
| cat >"$root/etc/systemd/system/test2.socket" <<EOF |
| [Install] |
| WantedBy=sockets.target |
| Also=test2.service |
| EOF |
| |
| cat >"$root/etc/systemd/system/test2.service" <<EOF |
| [Install] |
| WantedBy=default.target |
| Also=test2.socket |
| EOF |
| |
| "$systemctl" --root="$root" reenable test2.service |
| test -h "$root/etc/systemd/system/default.target.wants/test2.service" |
| test -h "$root/etc/systemd/system/sockets.target.wants/test2.socket" |
| |
| "$systemctl" --root="$root" reenable test2.socket |
| test -h "$root/etc/systemd/system/default.target.wants/test2.service" |
| test -h "$root/etc/systemd/system/sockets.target.wants/test2.socket" |
| |
| "$systemctl" --root="$root" disable test2.socket |
| test ! -e "$root/etc/systemd/system/default.target.wants/test2.service" |
| test ! -e "$root/etc/systemd/system/sockets.target.wants/test2.socket" |
| |
| |
| : '-------link-------------------------------------------------' |
| # File doesn't exist yet |
| test ! -e "$root/link1.path" |
| ( ! "$systemctl" --root="$root" link '/link1.path' ) |
| test ! -e "$root/etc/systemd/system/link1.path" |
| |
| cat >"$root/link1.path" <<EOF |
| [Install] |
| WantedBy=paths.target |
| EOF |
| |
| "$systemctl" --root="$root" link '/link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| |
| : '-------link already linked same path------------------------' |
| SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" link '/link1.path' # this passes |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| |
| : '-------link already linked different path-------------------' |
| mkdir "$root/subdir" |
| cp "$root/link1.path" "$root/subdir/" |
| ( ! "$systemctl" --root="$root" link '/subdir/link1.path' ) |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| |
| : '-------link bad suffix--------------------------------------' |
| cp "$root/link1.path" "$root/subdir/link1.suffix" |
| ( ! "$systemctl" --root="$root" link '/subdir/link1.suffix' ) |
| test ! -e "$root/etc/systemd/system/link1.suffix" |
| |
| : '-------unlink by unit name----------------------------------' |
| "$systemctl" --root="$root" disable 'link1.path' |
| test ! -e "$root/etc/systemd/system/link1.path" |
| |
| : '-------unlink by path---------------------------------------' |
| "$systemctl" --root="$root" link '/link1.path' |
| test -h "$root/etc/systemd/system/link1.path" |
| "$systemctl" --root="$root" disable '/link1.path' |
| test ! -e "$root/etc/systemd/system/link1.path" |
| |
| : '-------unlink by wrong path---------------------------------' |
| "$systemctl" --root="$root" link '/link1.path' |
| test -h "$root/etc/systemd/system/link1.path" |
| "$systemctl" --root="$root" disable '/subdir/link1.path' # we only care about the name |
| test ! -e "$root/etc/systemd/system/link1.path" |
| |
| |
| : '-------link and enable--------------------------------------' |
| "$systemctl" --root="$root" enable '/link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" |
| |
| : '-------enable already linked same path----------------------' |
| "$systemctl" --root="$root" enable '/link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" |
| |
| : '-------enable already linked different path-----------------' |
| ( ! "$systemctl" --root="$root" enable '/subdir/link1.path' ) |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" |
| |
| : '-------enable bad suffix------------------------------------' |
| cp "$root/link1.path" "$root/subdir/link1.suffix" |
| ( ! "$systemctl" --root="$root" enable '/subdir/link1.suffix' ) |
| test ! -e "$root/etc/systemd/system/link1.suffix" |
| test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix" |
| |
| : '-------disable by unit name---------------------------------' |
| "$systemctl" --root="$root" disable 'link1.path' |
| test ! -e "$root/etc/systemd/system/link1.path" |
| test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" |
| |
| : '-------disable by path--------------------------------------' |
| "$systemctl" --root="$root" enable '/link1.path' |
| test -h "$root/etc/systemd/system/link1.path" |
| test -h "$root/etc/systemd/system/paths.target.wants/link1.path" |
| "$systemctl" --root="$root" disable '/link1.path' |
| test ! -e "$root/etc/systemd/system/link1.path" |
| test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" |
| |
| |
| : '-------link and enable-------------------------------------' |
| "$systemctl" --root="$root" link '/link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path" |
| |
| "$systemctl" --root="$root" enable 'link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" |
| |
| "$systemctl" --root="$root" reenable 'link1.path' |
| islink "$root/etc/systemd/system/link1.path" "/link1.path" |
| islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" |
| |
| : '-------manual link------------------------------------------' |
| cat >"$root/link3.suffix" <<EOF |
| [Install] |
| WantedBy=services.target |
| EOF |
| |
| # We wouldn't create such a link ourselves, but it should accept it when present. |
| ln -s "/link3.suffix" "$root/etc/systemd/system/link3.service" |
| |
| SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" enable 'link3.service' |
| islink "$root/etc/systemd/system/link3.service" "/link3.suffix" |
| islink "$root/etc/systemd/system/services.target.wants/link3.service" "../link3.service" |
| |
| SYSTEMD_LOG_LEVEL=debug SYSTEMD_LOG_LOCATION=1 "$systemctl" --root="$root" disable 'link3.service' |
| test ! -h "$root/etc/systemd/system/link3.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/link3.service" |
| |
| : '-------enable on masked-------------------------------------' |
| ln -s "/dev/null" "$root/etc/systemd/system/masked.service" |
| ( ! "$systemctl" --root="$root" enable 'masked.service' ) |
| ( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' ) |
| |
| : '-------enable on masked alias-------------------------------' |
| test -h "$root/etc/systemd/system/masked.service" |
| ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service" |
| ( ! "$systemctl" --root="$root" enable 'masked-alias.service' ) |
| ( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' ) |
| |
| : '-------issue 22000: link in subdirectory--------------------' |
| mkdir -p "$root/etc/systemd/system/myown.d" |
| cat >"$root/etc/systemd/system/link5-also.service" <<EOF |
| [Install] |
| WantedBy=services.target |
| Also=link5.service |
| EOF |
| cat >"$root/etc/systemd/system/myown.d/link5.service" <<EOF |
| [Install] |
| WantedBy=services.target |
| Also=link5-also.service |
| EOF |
| |
| ( ! "$systemctl" --root="$root" enable 'link5.service' ) |
| test ! -h "$root/etc/systemd/system/services.target.wants/link5.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service" |
| |
| "$systemctl" --root="$root" enable 'link5-also.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/link5.service" |
| islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "../link5-also.service" |
| |
| : '-------template enablement----------------------------------' |
| cat >"$root/etc/systemd/system/templ1@.service" <<EOF |
| [Install] |
| WantedBy=services.target |
| EOF |
| |
| # No instance here — this can't succeed. |
| ( ! "$systemctl" --root="$root" enable 'templ1@.service' ) |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| |
| "$systemctl" --root="$root" enable 'templ1@one.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service" |
| |
| "$systemctl" --root="$root" enable 'templ1@two.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ1@one.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ1@two.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" |
| |
| : '-------template enablement w/ default instance--------------' |
| cat >"$root/etc/systemd/system/templ1@.service" <<EOF |
| [Install] |
| # check enablement with |
| WantedBy=services.target services.target |
| RequiredBy=other@templ1.target other@%p.target |
| DefaultInstance=333 |
| EOF |
| |
| "$systemctl" --root="$root" enable 'templ1@.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service" |
| |
| "$systemctl" --root="$root" enable 'templ1@one.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service" |
| |
| "$systemctl" --root="$root" enable 'templ1@two.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "../templ1@one.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" "../templ1@one.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ1@one.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@333.service" "../templ1@.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" "../templ1@.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" |
| islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "../templ1@two.service" |
| islink "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" "../templ1@two.service" |
| |
| # disable remaining links here |
| "$systemctl" --root="$root" disable 'templ1@.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service" |
| test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@333.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" |
| test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" |
| |
| : '-------removal of relative enablement symlinks--------------' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" |
| ln -s '../templ1@one.service' "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| ln -s 'templ1@two.service' "$root/etc/systemd/system/services.target.wants/templ1@two.service" |
| ln -s '../templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@three.service" |
| ln -s 'templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@four.service" |
| ln -s '/usr/lib/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@five.service" |
| ln -s '/etc/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@six.service" |
| ln -s '/run/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@seven.service" |
| |
| # this should remove all links |
| "$systemctl" --root="$root" disable 'templ1@.service' |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@three.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@four.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@five.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@six.service" |
| test ! -h "$root/etc/systemd/system/services.target.wants/templ1@seven.service" |
| |
| : '-------template enablement for another template-------------' |
| cat >"$root/etc/systemd/system/templ2@.service" <<EOF |
| [Install] |
| RequiredBy=another-template@.target |
| EOF |
| |
| "$systemctl" --root="$root" enable 'templ2@.service' |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service" |
| |
| "$systemctl" --root="$root" enable 'templ2@two.service' |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service" |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ2@other.service' |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service" |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" "../templ2@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ2@two.service' |
| islink "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" "../templ2@.service" |
| test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" |
| |
| "$systemctl" --root="$root" disable 'templ2@.service' |
| test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@.service" |
| test ! -h "$root/etc/systemd/system/another-template@.target.requires/templ2@two.service" |
| |
| : '-------aliases w/ and w/o instance--------------------------' |
| test ! -e "$root/etc/systemd/system/link4.service" |
| cat >"$root/etc/systemd/system/link4.service" <<EOF |
| [Install] |
| Alias=link4.service |
| Alias=link4@.service |
| Alias=link4@inst.service |
| Alias=link4alias.service |
| Alias=link4alias2.service |
| EOF |
| |
| ( ! "$systemctl" --root="$root" enable 'link4.service' ) |
| test ! -h "$root/etc/systemd/system/link4.service" # this is our file |
| test ! -h "$root/etc/systemd/system/link4@.service" |
| test ! -h "$root/etc/systemd/system/link4@inst.service" |
| islink "$root/etc/systemd/system/link4alias.service" "link4.service" |
| islink "$root/etc/systemd/system/link4alias2.service" "link4.service" |
| |
| "$systemctl" --root="$root" disable 'link4.service' |
| test ! -h "$root/etc/systemd/system/link4.service" |
| test ! -h "$root/etc/systemd/system/link4@.service" |
| test ! -h "$root/etc/systemd/system/link4@inst.service" |
| test ! -h "$root/etc/systemd/system/link4alias.service" |
| test ! -h "$root/etc/systemd/system/link4alias2.service" |
| |
| : '-------systemctl enable on path to unit file----------------' |
| cat >"$root/etc/systemd/system/link4.service" <<EOF |
| [Install] |
| Alias=link4alias.service |
| Alias=link4alias2.service |
| EOF |
| |
| # Apparently this works. I'm not sure what to think. |
| "$systemctl" --root="$root" enable '/etc/systemd/system/link4.service' |
| test ! -h "$root/etc/systemd/system/link4.service" # this is our file |
| islink "$root/etc/systemd/system/link4alias.service" "link4.service" |
| islink "$root/etc/systemd/system/link4alias2.service" "link4.service" |
| |
| "$systemctl" --root="$root" disable '/etc/systemd/system/link4.service' |
| test ! -h "$root/etc/systemd/system/link4.service" |
| test ! -h "$root/etc/systemd/system/link4alias.service" |
| test ! -h "$root/etc/systemd/system/link4alias2.service" |
| |
| : '-------issue 661: enable on unit file--------------' |
| test ! -e "$root/etc/systemd/system/link5.service" |
| cat >"$root/etc/systemd/system/link5.service" <<EOF |
| [Install] |
| Alias=link5.service |
| Alias=link5alias.service |
| Alias=link5alias2.service |
| EOF |
| |
| "$systemctl" --root="$root" enable 'link5.service' |
| test ! -h "$root/etc/systemd/system/link5.service" # this is our file |
| islink "$root/etc/systemd/system/link5alias.service" "link5.service" |
| islink "$root/etc/systemd/system/link5alias2.service" "link5.service" |
| |
| "$systemctl" --root="$root" disable 'link5.service' |
| test ! -h "$root/etc/systemd/system/link5alias.service" |
| test ! -h "$root/etc/systemd/system/link5alias2.service" |
| |
| : '-------issue 661: link and enable on unit file--------------' |
| test ! -e "$root/etc/systemd/system/link5copy.service" |
| cat >"$root/link5copy.service" <<EOF |
| [Install] |
| Alias=link5copy.service |
| Alias=link5alias.service |
| Alias=link5alias2.service |
| EOF |
| |
| test ! -e "$root/etc/systemd/system/link5copy.service" |
| |
| "$systemctl" --root="$root" link '/link5copy.service' |
| islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service' |
| test ! -h "$root/etc/systemd/system/link5alias.service" |
| test ! -h "$root/etc/systemd/system/link5alias2.service" |
| |
| "$systemctl" --root="$root" disable 'link5copy.service' |
| test ! -h "$root/etc/systemd/system/link5copy.service" |
| test ! -h "$root/etc/systemd/system/link5alias.service" |
| test ! -h "$root/etc/systemd/system/link5alias2.service" |
| |
| "$systemctl" --root="$root" enable '/link5copy.service' |
| islink "$root/etc/systemd/system/link5copy.service" '/link5copy.service' |
| islink "$root/etc/systemd/system/link5alias.service" 'link5copy.service' |
| islink "$root/etc/systemd/system/link5alias2.service" 'link5copy.service' |
| |
| "$systemctl" --root="$root" disable 'link5copy.service' |
| test ! -h "$root/etc/systemd/system/link5copy.service" |
| test ! -h "$root/etc/systemd/system/link5alias.service" |
| test ! -h "$root/etc/systemd/system/link5alias2.service" |
| |
| : '----issue 19437: plain templates in .wants/ or .requires/---' |
| test ! -e "$root/etc/systemd/system/link5@.path" |
| cat >"$root/etc/systemd/system/link5@.path" <<EOF |
| [Install] |
| WantedBy=target5@.target |
| RequiredBy=target5@.target |
| WantedBy=target5@inst.target |
| RequiredBy=target5@inst.target |
| EOF |
| |
| "$systemctl" --root="$root" enable 'link5@.path' |
| test ! -h "$root/etc/systemd/system/link5@.path" # this is our file |
| islink "$root/etc/systemd/system/target5@.target.wants/link5@.path" "../link5@.path" |
| islink "$root/etc/systemd/system/target5@.target.requires/link5@.path" "../link5@.path" |
| islink "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" "../link5@.path" |
| islink "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" "../link5@.path" |
| |
| "$systemctl" --root="$root" disable 'link5@.path' |
| test ! -h "$root/etc/systemd/system/link5@.path" # this is our file |
| test ! -h "$root/etc/systemd/system/target5@.target.wants/link5@.path" |
| test ! -h "$root/etc/systemd/system/target5@.target.requires/link5@.path" |
| test ! -h "$root/etc/systemd/system/target5@inst.target.wants/link5@.path" |
| test ! -h "$root/etc/systemd/system/target5@inst.target.requires/link5@.path" |
| |
| : '-------removal of symlinks not listed in [Install]----------' |
| # c.f. 66a19d85a533b15ed32f4066ec880b5a8c06babd |
| test ! -e "$root/etc/systemd/system/multilink.mount" |
| cat >"$root/etc/systemd/system/multilink.mount" <<EOF |
| [Install] |
| WantedBy=multilink.target |
| EOF |
| |
| mkdir -p "$root/etc/systemd/system/default.target.wants" |
| ln -s ../multilink.mount "$root/etc/systemd/system/default.target.wants/" |
| ln -s ../multilink.mount "$root/etc/systemd/system/multilink-alias.mount" |
| ln -s ../multilink.mount "$root/etc/systemd/system/multilink-badalias.service" |
| |
| "$systemctl" --root="$root" disable 'multilink.mount' |
| test -e "$root/etc/systemd/system/multilink.mount" # this is our file |
| test ! -h "$root/etc/systemd/system/default.target.wants/" |
| test ! -h "$root/etc/systemd/system/multilink-alias.mount" |
| test ! -h "$root/etc/systemd/system/multilink-badalias.service" |
| |
| : '-------merge 20017: specifiers in the unit file-------------' |
| test ! -e "$root/etc/systemd/system/some-some-link6@.socket" |
| # c.f. de61a04b188f81a85cdb5c64ddb4987dcd9d30d3 |
| |
| check_alias() { |
| : "------------------ %$1 -------------------------------------" |
| cat >"$root/etc/systemd/system/some-some-link6@.socket" <<EOF |
| [Install] |
| Alias=target@$1:%$1.socket |
| EOF |
| SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" enable 'some-some-link6@.socket' || return 1 |
| islink "$root/etc/systemd/system/target@$1:$2.socket" "some-some-link6@.socket" || return 2 |
| } |
| |
| # TODO: our architecture names are different than what uname -m returns. |
| # Add something like 'systemd-detect-virt --print-architecture' and use it here. |
| check_alias a "$(uname -m | tr '_' '-')" || : |
| |
| test ! -e "$root/etc/os-release" |
| test ! -e "$root/usr/lib/os-release" |
| |
| ( ! check_alias A '' ) |
| ( ! check_alias B '' ) |
| ( ! check_alias M '' ) |
| ( ! check_alias o '' ) |
| ( ! check_alias w '' ) |
| ( ! check_alias W '' ) |
| |
| cat >"$root/etc/os-release" <<EOF |
| # empty |
| EOF |
| |
| check_alias A '' |
| check_alias B '' |
| check_alias M '' |
| check_alias o '' |
| check_alias w '' |
| check_alias W '' |
| |
| cat >"$root/etc/os-release" <<EOF |
| ID='the-id' |
| VERSION_ID=39a |
| BUILD_ID=build-id |
| VARIANT_ID=wrong |
| VARIANT_ID=right |
| IMAGE_ID="foobar" |
| IMAGE_VERSION='1-2-3' |
| EOF |
| |
| check_alias A '1-2-3' |
| check_alias B 'build-id' |
| check_alias M 'foobar' |
| check_alias o 'the-id' |
| check_alias w '39a' |
| check_alias W 'right' |
| |
| check_alias b "$("$systemd_id128" boot-id)" |
| |
| # Specifiers not available for [Install] |
| ( ! check_alias C '' ) |
| ( ! check_alias E '' ) |
| ( ! check_alias f '' ) |
| ( ! check_alias h '' ) |
| ( ! check_alias I '' ) |
| ( ! check_alias J '' ) |
| ( ! check_alias L '' ) |
| ( ! check_alias P '' ) |
| ( ! check_alias s '' ) |
| ( ! check_alias S '' ) |
| ( ! check_alias t '' ) |
| ( ! check_alias T '' ) |
| ( ! check_alias V '' ) |
| |
| check_alias g root |
| check_alias G 0 |
| check_alias u root |
| check_alias U 0 |
| |
| check_alias i "" |
| |
| check_alias j 'link6' |
| |
| check_alias l "$(uname -n | sed 's/\..*//')" |
| |
| test ! -e "$root/etc/machine-id" |
| ( ! check_alias m '' ) |
| |
| "$systemd_id128" new >"$root/etc/machine-id" |
| check_alias m "$(cat "$root/etc/machine-id")" |
| |
| check_alias n 'some-some-link6@.socket' |
| check_alias N 'some-some-link6@' |
| |
| check_alias p 'some-some-link6' |
| |
| uname -r | grep -q '[^a-zA-Z0-9_.\\-]' || \ |
| check_alias v "$(uname -r)" |
| |
| # % is not legal in unit name |
| ( ! check_alias % '%' ) |
| |
| # %z is not defined |
| ( ! check_alias z 'z' ) |
| |
| : '-------specifiers in WantedBy-------------------------------' |
| # We don't need to repeat all the tests. Let's do a basic check that specifier |
| # expansion is performed. |
| |
| cat >"$root/etc/systemd/system/some-some-link7.socket" <<EOF |
| [Install] |
| WantedBy=target@%p.target |
| WantedBy=another-target@.target |
| RequiredBy=target2@%p.target |
| RequiredBy=another-target2@.target |
| EOF |
| |
| "$systemctl" --root="$root" enable 'some-some-link7.socket' |
| islink "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" "../some-some-link7.socket" |
| islink "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" "../some-some-link7.socket" |
| islink "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" "../some-some-link7.socket" |
| islink "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" "../some-some-link7.socket" |
| |
| "$systemctl" --root="$root" disable 'some-some-link7.socket' |
| test ! -h "$root/etc/systemd/system/target@some-some-link7.target.wants/some-some-link7.socket" |
| test ! -h "$root/etc/systemd/system/another-target@.target.wants/some-some-link7.socket" |
| test ! -h "$root/etc/systemd/system/target2@some-some-link7.target.requires/some-some-link7.socket" |
| test ! -h "$root/etc/systemd/system/another-target2@.target.requires/some-some-link7.socket" |
| |
| # TODO: repeat the tests above for presets |
| |
| : '-------SYSTEMD_OS_RELEASE relative to root-------------------' |
| # check that os-release overwriting works as expected with root |
| test -e "$root/etc/os-release" |
| |
| cat >"$root/etc/os-release2" <<EOF |
| ID='the-id2' |
| EOF |
| |
| SYSTEMD_OS_RELEASE="$root/etc/os-release2" check_alias o 'the-id2' |