1
0
mirror of https://github.com/systemd/systemd synced 2025-11-10 20:34:45 +01:00

Compare commits

...

13 Commits

Author SHA1 Message Date
Daan De Meyer
434a270ccd userdb: Add missing .membership extension to membership files
Follow up for fe0342edf4693ac14c8cb9a977afa09e4acd4daf

This also drops the mkosi testuser from the wheel and systemd-journal
groups as the integration tests rely on the testuser not being to read
the full journal.

(cherry picked from commit 472161f3688d8b2bf14d0ef0d3c2585e4ac0f40d)
2025-11-07 09:49:11 +01:00
Daan De Meyer
56f1d948d5 mkosi: Stop installing devel packages
These aren't required for tests and pull in a bunch of dependencies,
so let's not install them into the final image.

(cherry picked from commit 7a18a538efbcc33ecc715f80cd40dc525a04dda4)
2025-11-07 09:49:11 +01:00
Thomas Blume
7d79badf2a test: add policy packages for TEST-06-SELINUX in openSUSE
(cherry picked from commit 4c7e30c4e043d0763b09fcf67192f23565e1f646)
2025-11-07 09:49:11 +01:00
Luca Boccassi
3bac245049 mkosi: provide detached verity signatures too for minimal images
Useful for manual testing in the VM

(cherry picked from commit 39175477bd6e094542671599e0e258daa6351115)
2025-11-07 09:49:11 +01:00
Luca Boccassi
fefc86e3f2 test: install bsdextrautils in debian minimal img
'rev' moved to bsdextrautils and TEST-50-DISSECT uses it, so it now
fails:

[   83.534905] bash[3581]: +++ grep '^now' /proc/timer_list
[   83.535479] bash[3582]: +++ cut '-d ' -f3
[   83.535774] bash[3583]: +++ rev
[   83.535774] bash[3583]: bash: line 1: rev: command not found

(cherry picked from commit 2a5e68e27d952a6840f04e7af0e680c727b83850)
2025-11-07 09:49:11 +01:00
Frantisek Sumsal
4b1c2989f6 mkosi: explicitly pull in libz1 on OpenSUSE
Otherwise it pulls in libz-ng-compat1 which isn't 100% compatible with
libz1, and more importantly it requires an ldconfig drop-in in /etc/
(/etc/ld.so.conf.d/zlib-ng-compat-x86_64.conf) which breaks hermetic-usr
and TEST-07-PID1:

systemd[5582]: /usr/lib/systemd/systemd: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

(cherry picked from commit f50e6fd8971fd59e59712325bf99c90b5579d477)
2025-11-07 09:49:11 +01:00
Yu Watanabe
2dea27ca99 mkosi: avoid infinite reboot on failure
If systemd-pcrphase-initrd.service and friends failed for some reasons,
the test VM will reboot infinitely and the test will timeout. Let's
propagate the failure to the host and fail the test earlier in that case.

(cherry picked from commit d526ab8a9aa74798e453dabf8c55636305238110)
2025-11-07 09:49:11 +01:00
Yu Watanabe
b83813ad30 mkosi: drop man package from global config
Some distributions does not have man package, but named man-db or so,
and most distribution specific mkosi.conf files already have them.
Let's drop man from the global config.

(cherry picked from commit f8d5efc70388822c06a2dc026db2ffbc29357afe)
2025-11-07 09:49:11 +01:00
Frantisek Sumsal
07006088f7 test: temporarily skip the EnterNamespace= test w/o embedded debuginfo
The EnterNamespace= feature currently doesn't work if the debuginfo is
separated from the crashing binary. Until that's resolved, let's run the
test only if the test binary has embedded debuginfo (.debug_info
section; e.g. when systemd is built without WITH_DEBUG=1) or it contains
MiniDebugInfo (.gnu_debugdata section; default on Fedora and CentOS).

See: https://github.com/systemd/systemd/pull/39268#issuecomment-3390745718
(cherry picked from commit 80b4cacf1b121c8b1ec444970cc566dc4efd1837)
2025-11-07 09:49:11 +01:00
Frantisek Sumsal
532366b5aa mkosi: install test dependencies for EnterNamespace= test
The test for the EnterNamespace= feature [0] has been both broken and
disabled since the migration to the mkosi framework, as it's missing the
libdw.pc file for pkg-config, so the test is skipped completely, and
it's also missing gcc to actually build the test binary.

[0] Part of TEST-87-AUX-UTILS-VM.coredump.sh

(cherry picked from commit 4d8e8d44ab3f6f99102faf0dcb53ca4de4d517ae)
2025-11-07 09:49:11 +01:00
Frantisek Sumsal
8505d0e3d8 test: exclude test-stacktrace(-not)?-symbolized from the coredump check
As they are expected coredumps from the EnterNamespace= feature test.

(cherry picked from commit cfb604f8f7c83912648d69bd3ad89c2436b4b8ef)
2025-11-07 09:49:11 +01:00
Frantisek Sumsal
a0da62f2cb test: build the crashing test binary outside of the test
So we don't have to pull in gcc and other stuff into it.

Also, make the test itself a bit more robust and debug-able.

(cherry picked from commit 937f609b41b9e27eba69c5ddbab4df2232e5a37b)
2025-11-07 09:49:11 +01:00
Yu Watanabe
94989a170d test: use relative paths to executables
This also makes shebang always use env command, and drops unnecessary
'bash -c' or 'sh -c' when a signle command is invoked in the shell,
like sleep or echo.

(cherry picked from commit e2c5e9c0116f410a87958c9eeb361cd47fdc34b0)
2025-11-07 09:49:11 +01:00
111 changed files with 340 additions and 227 deletions

View File

@ -111,7 +111,6 @@ Packages=
llvm llvm
lsof lsof
lvm2 lvm2
man
mdadm mdadm
mtools mtools
nano nano

View File

@ -22,6 +22,7 @@ Packages=
dbus-broker dbus-broker
dbus-broker-units dbus-broker-units
dhcp dhcp
elfutils
erofs-utils erofs-utils
f2fs-tools f2fs-tools
git git
@ -39,6 +40,7 @@ Packages=
openssl openssl
pacman pacman
perf perf
pkgconf
polkit polkit
procps-ng procps-ng
psmisc psmisc

View File

@ -9,7 +9,6 @@ PrepareScripts=systemd.prepare
VolatilePackages= VolatilePackages=
systemd systemd
systemd-container systemd-container
systemd-devel
systemd-journal-remote systemd-journal-remote
systemd-libs systemd-libs
systemd-networkd systemd-networkd
@ -28,6 +27,8 @@ Packages=
device-mapper-event device-mapper-event
device-mapper-multipath device-mapper-multipath
dfuzzer dfuzzer
elfutils-devel
elfutils-libs
erofs-utils erofs-utils
git-core git-core
glibc-langpack-de glibc-langpack-de
@ -49,6 +50,7 @@ Packages=
pam pam
passwd passwd
perf perf
pkgconf
policycoreutils policycoreutils
polkit polkit
procps-ng procps-ng

View File

@ -12,10 +12,8 @@ VolatilePackages=
libnss-resolve libnss-resolve
libnss-systemd libnss-systemd
libpam-systemd libpam-systemd
libsystemd-dev
libsystemd-shared libsystemd-shared
libsystemd0 libsystemd0
libudev-dev
systemd systemd
systemd-container systemd-container
systemd-coredump systemd-coredump
@ -53,6 +51,8 @@ Packages=
isc-dhcp-server isc-dhcp-server
knot knot
libcap-ng-utils libcap-ng-utils
libdw-dev
libdw1
locales locales
login login
man-db man-db
@ -63,6 +63,7 @@ Packages=
openssh-server openssh-server
passwd passwd
polkitd polkitd
pkgconf
procps procps
psmisc psmisc
python3-pexpect python3-pexpect

View File

@ -17,7 +17,6 @@ VolatilePackages=
libudev1 libudev1
systemd systemd
systemd-container systemd-container
systemd-devel
systemd-doc systemd-doc
systemd-experimental systemd-experimental
systemd-homed systemd-homed
@ -58,7 +57,11 @@ Packages=
knot knot
libapparmor1 libapparmor1
libcap-progs libcap-progs
libdw-devel
libdw1
libtss2-tcti-device0 libtss2-tcti-device0
libz1
man
multipath-tools multipath-tools
ncat ncat
open-iscsi open-iscsi
@ -67,6 +70,8 @@ Packages=
pam pam
patterns-base-minimal_base patterns-base-minimal_base
perf perf
policycoreutils
pkgconf
procps4 procps4
psmisc psmisc
python3-pefile python3-pefile
@ -76,6 +81,8 @@ Packages=
quota quota
rsync rsync
sed sed
selinux-policy
selinux-policy-targeted
shadow shadow
softhsm softhsm
squashfs squashfs

View File

@ -3,10 +3,6 @@
"uid": 4711, "uid": 4711,
"disposition": "regular", "disposition": "regular",
"enforcePasswordPolicy": false, "enforcePasswordPolicy": false,
"memberOf": [
"wheel",
"systemd-journal"
],
"shell": "/bin/bash", "shell": "/bin/bash",
"privileged": { "privileged": {
"hashedPassword": ["$1$kqp7NF1f$tNnQcshPX53CSfRKTQD0R1"] "hashedPassword": ["$1$kqp7NF1f$tNnQcshPX53CSfRKTQD0R1"]

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -0,0 +1,2 @@
[Unit]
FailureAction=exit

View File

@ -7,6 +7,7 @@ Distribution=|ubuntu
[Content] [Content]
PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/systemd.prepare PrepareScripts=%D/mkosi/mkosi.conf.d/debian-ubuntu/systemd.prepare
Packages= Packages=
bsdextrautils
hostname hostname
iproute2 iproute2
mount mount

View File

@ -28,6 +28,7 @@ rm -f /etc/resolv.conf
for f in "$BUILDROOT"/usr/share/*.verity.sig; do for f in "$BUILDROOT"/usr/share/*.verity.sig; do
jq --join-output '.rootHash' "$f" >"${f%.verity.sig}.roothash" jq --join-output '.rootHash' "$f" >"${f%.verity.sig}.roothash"
jq --join-output '.signature' "$f" | base64 --decode >"${f%.verity.sig}.roothash.p7s"
done done
# We want /var/log/journal to be created on first boot so it can be created with the right chattr settings by # We want /var/log/journal to be created on first boot so it can be created with the right chattr settings by

View File

@ -276,6 +276,17 @@ executables += [
'sources' : files('test-compress.c'), 'sources' : files('test-compress.c'),
'link_with' : [libshared], 'link_with' : [libshared],
}, },
test_template + {
'sources' : files('test-coredump-stacktrace.c'),
'type' : 'manual',
# This test intentionally crashes with SIGSEGV by dereferencing a NULL pointer
# to generate a coredump with a predictable stack trace. To prevent sanitizers
# from catching the error first let's disable them explicitly, and also always
# build with minimal optimizations to make the stack trace predictable no matter
# what we build the rest of systemd with
'override_options' : ['b_sanitize=none', 'strip=false', 'debug=true'],
'c_args' : ['-fno-sanitize=all', '-fno-optimize-sibling-calls', '-O1'],
},
test_template + { test_template + {
'sources' : files('test-cryptolib.c'), 'sources' : files('test-cryptolib.c'),
'dependencies' : libopenssl, 'dependencies' : libopenssl,

View File

@ -0,0 +1,29 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/* This is a test program that intentionally segfaults so we can generate a
* predictable-ish stack trace in tests. */
#include <stdlib.h>
__attribute__((noinline))
static void baz(int *x) {
*x = rand();
}
__attribute__((noinline))
static void bar(void) {
int * volatile x = NULL;
baz(x);
}
__attribute__((noinline))
static void foo(void) {
bar();
}
int main(void) {
foo();
return 0;
}

View File

@ -1405,7 +1405,7 @@ static int load_credential_one(
if (ur) if (ur)
STRV_FOREACH(g, ur->member_of) { STRV_FOREACH(g, ur->member_of) {
_cleanup_free_ char *membership = strjoin(ur->user_name, ":", *g); _cleanup_free_ char *membership = strjoin(ur->user_name, ":", *g, ".membership");
if (!membership) if (!membership)
return log_oom(); return log_oom();
@ -1417,7 +1417,7 @@ static int load_credential_one(
} }
else else
STRV_FOREACH(u, gr->members) { STRV_FOREACH(u, gr->members) {
_cleanup_free_ char *membership = strjoin(*u, ":", gr->group_name); _cleanup_free_ char *membership = strjoin(*u, ":", gr->group_name, ".membership");
if (!membership) if (!membership)
return log_oom(); return log_oom();

View File

@ -5,4 +5,4 @@ After=always-activating.socket
[Service] [Service]
Type=notify Type=notify
ExecStart=bash -c 'sleep infinity' ExecStart=sleep infinity

View File

@ -3,4 +3,4 @@
Description=Hello World Description=Hello World
[Service] [Service]
ExecStart=/bin/echo "Hello World" ExecStart=echo "Hello World"

View File

@ -3,6 +3,6 @@
OnFailure=restart-on-failure.service OnFailure=restart-on-failure.service
[Service] [Service]
ExecStart=/bin/sleep infinity ExecStart=sleep infinity
Restart=on-failure Restart=on-failure
RestartMode=direct RestartMode=direct

View File

@ -3,6 +3,6 @@
OnFailure=restart-on-failure.service OnFailure=restart-on-failure.service
[Service] [Service]
ExecStart=/bin/sleep infinity ExecStart=sleep infinity
Restart=on-failure Restart=on-failure
RestartMode=normal RestartMode=normal

View File

@ -4,4 +4,4 @@ Description=Sleep infinitely
[Service] [Service]
Type=simple Type=simple
ExecStart=/bin/sleep infinity ExecStart=sleep infinity

View File

@ -4,4 +4,4 @@ Description=Sleep for 1 minute
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=/bin/sleep 60 ExecStart=sleep 60

View File

@ -2,5 +2,5 @@
[Service] [Service]
Type=oneshot Type=oneshot
RemainAfterExit=yes RemainAfterExit=yes
ExecStart=/bin/echo "I'm unstoppable!" ExecStart=echo "I'm unstoppable!"
ExecStop=/bin/systemctl start --no-block unstoppable.service ExecStop=systemctl start --no-block unstoppable.service

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=/bin/echo Start Hola ExecStart=echo Start Hola
ExecReload=/bin/echo Reload Hola ExecReload=echo Reload Hola
ExecStop=/bin/echo Stop Hola ExecStop=echo Stop Hola
RemainAfterExit=yes RemainAfterExit=yes

View File

@ -4,5 +4,5 @@ Description=Issue 14566 Repro
[Service] [Service]
ExecStart=/usr/lib/systemd/tests/testdata/TEST-07-PID1.units/%N.sh ExecStart=/usr/lib/systemd/tests/testdata/TEST-07-PID1.units/%N.sh
ExecStopPost=/bin/true ExecStopPost=true
KillMode=mixed KillMode=mixed

View File

@ -5,6 +5,6 @@ Description=Issue 16115 Repro with on-abnormal
[Service] [Service]
Type=simple Type=simple
Restart=on-abnormal Restart=on-abnormal
ExecCondition=/bin/false ExecCondition=false
ExecStart=sleep 100 ExecStart=sleep 100
RestartSec=1 RestartSec=1

View File

@ -5,6 +5,6 @@ Description=Issue 16115 Repro with on-failure
[Service] [Service]
Type=simple Type=simple
Restart=on-failure Restart=on-failure
ExecCondition=/bin/false ExecCondition=false
ExecStart=sleep 100 ExecStart=sleep 100
RestartSec=1 RestartSec=1

View File

@ -5,6 +5,6 @@ Description=Issue 22257 Repro with Restart=always
[Service] [Service]
Type=simple Type=simple
Restart=always Restart=always
ExecCondition=/bin/false ExecCondition=false
ExecStart=sleep 100 ExecStart=sleep 100
RestartSec=1 RestartSec=1

View File

@ -13,4 +13,4 @@ Environment=SERVICE=fail_stop extend_timeout_interval=5 sleep_interval=7 start_i
ExecStart=/usr/lib/systemd/tests/testdata/TEST-16-EXTEND-TIMEOUT.units/extend-timeout.sh ExecStart=/usr/lib/systemd/tests/testdata/TEST-16-EXTEND-TIMEOUT.units/extend-timeout.sh
# Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1 # Due to 6041a7ee2c1bbff6301082f192fc1b0882400d42 SIGTERM isn't sent as the service shuts down with STOPPING=1
# This file makes the test assess.sh quicker by notifying it that this test has finished. # This file makes the test assess.sh quicker by notifying it that this test has finished.
ExecStopPost=/bin/bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated' ExecStopPost=bash -c '[[ $SERVICE_RESULT == timeout && $EXIT_CODE == killed ]] && touch /fail_runtime.terminated'

View File

@ -2,9 +2,9 @@
[Unit] [Unit]
Description=TEST-62-RESTRICT-IFACES-altname Description=TEST-62-RESTRICT-IFACES-altname
[Service] [Service]
ExecStart=/bin/sh -c 'ping -c 1 -W 0.2 192.168.113.1' ExecStart=sh -c 'ping -c 1 -W 0.2 192.168.113.1'
ExecStart=/bin/sh -c 'ping -c 1 -W 0.2 192.168.113.5' ExecStart=sh -c 'ping -c 1 -W 0.2 192.168.113.5'
ExecStart=/bin/sh -c '! ping -c 1 -W 0.2 192.168.113.9' ExecStart=sh -c '! ping -c 1 -W 0.2 192.168.113.9'
RestrictNetworkInterfaces=veth0-altname-with-more-than-15-chars RestrictNetworkInterfaces=veth0-altname-with-more-than-15-chars
RestrictNetworkInterfaces=veth1-altname-with-more-than-15-chars RestrictNetworkInterfaces=veth1-altname-with-more-than-15-chars
Type=oneshot Type=oneshot

View File

@ -1,4 +1,4 @@
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=bash -c 'sleep infinity' ExecStart=sleep infinity

View File

@ -5,4 +5,4 @@ After=test63-issue-24577-dep.service
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=bash -c 'sleep infinity' ExecStart=sleep infinity

View File

@ -5,7 +5,7 @@ integration_tests += [
integration_test_template + { integration_test_template + {
'name' : fs.name(meson.current_source_dir()), 'name' : fs.name(meson.current_source_dir()),
'storage': 'persistent', 'storage': 'persistent',
'coredump-exclude-regex' : '/(test-usr-dump|test-dump|bash)$', 'coredump-exclude-regex' : '/(test-usr-dump|test-dump|test-stacktrace(-not)?-symbolized|bash)$',
'vm' : true, 'vm' : true,
'firmware' : 'auto', 'firmware' : 'auto',
}, },

View File

@ -26,7 +26,7 @@ EOF
journalctl --rotate journalctl --rotate
ID="$(systemd-id128 new)" ID="$(systemd-id128 new)"
systemd-cat -t "$ID" /bin/bash -c "for ((i=0;i<100;i++)); do echo -n hoge with ${c}; done; echo" systemd-cat -t "$ID" bash -c "for ((i=0;i<100;i++)); do echo -n hoge with ${c}; done; echo"
journalctl --sync journalctl --sync
timeout 10 bash -c "until SYSTEMD_LOG_LEVEL=debug journalctl --verify --quiet --file /var/log/journal/$MACHINE_ID/system.journal 2>&1 | grep -q -F 'compress=${c}'; do sleep .5; done" timeout 10 bash -c "until SYSTEMD_LOG_LEVEL=debug journalctl --verify --quiet --file /var/log/journal/$MACHINE_ID/system.journal 2>&1 | grep -q -F 'compress=${c}'; do sleep .5; done"

View File

@ -93,7 +93,7 @@ grep -vq "^_PID=$PID" /tmp/output
# https://github.com/systemd/systemd/issues/15654 # https://github.com/systemd/systemd/issues/15654
ID=$(systemd-id128 new) ID=$(systemd-id128 new)
printf "This will\nusually fail\nand be truncated\n" >/tmp/expected printf "This will\nusually fail\nand be truncated\n" >/tmp/expected
systemd-cat -t "$ID" /bin/sh -c 'env echo -n "This will";echo;env echo -n "usually fail";echo;env echo -n "and be truncated";echo;' systemd-cat -t "$ID" sh -c 'env echo -n "This will";echo;env echo -n "usually fail";echo;env echo -n "and be truncated";echo;'
journalctl --sync journalctl --sync
journalctl -b -o cat -t "$ID" >/tmp/output journalctl -b -o cat -t "$ID" >/tmp/output
diff /tmp/expected /tmp/output diff /tmp/expected /tmp/output
@ -122,7 +122,7 @@ journalctl -b -n 1 /bin/true /bin/false
journalctl -b -n 1 /bin/true + /bin/false journalctl -b -n 1 /bin/true + /bin/false
journalctl -b -n 1 -r --unit "systemd*" journalctl -b -n 1 -r --unit "systemd*"
systemd-run --user -M "testuser@.host" /bin/echo hello systemd-run --user -M "testuser@.host" echo hello
journalctl --sync journalctl --sync
journalctl -b -n 1 -r --user-unit "*" journalctl -b -n 1 -r --user-unit "*"
@ -160,7 +160,7 @@ journalctl --header | grep system.journal
journalctl --field _EXE | grep . >/dev/null journalctl --field _EXE | grep . >/dev/null
journalctl --no-hostname --utc --catalog | grep . >/dev/null journalctl --no-hostname --utc --catalog | grep . >/dev/null
# Exercise executable_is_script() and the related code, e.g. `journalctl -b /path/to/a/script.sh` should turn # Exercise executable_is_script() and the related code, e.g. `journalctl -b /path/to/a/script.sh` should turn
# into ((_EXE=/bin/bash AND _COMM=script.sh) AND _BOOT_ID=c002e3683ba14fa8b6c1e12878386514) # into ((_EXE=/usr/bin/bash AND _COMM=script.sh) AND _BOOT_ID=c002e3683ba14fa8b6c1e12878386514)
journalctl -b "$(readlink -f "$0")" | grep . >/dev/null journalctl -b "$(readlink -f "$0")" | grep . >/dev/null
journalctl -b "$(systemd-id128 boot-id)" | grep . >/dev/null journalctl -b "$(systemd-id128 boot-id)" | grep . >/dev/null
journalctl --since yesterday --reverse | grep . >/dev/null journalctl --since yesterday --reverse | grep . >/dev/null
@ -221,7 +221,7 @@ journalctl --follow --merge | head -n1 | grep .
rm -f /tmp/issue-26746-log /tmp/issue-26746-cursor rm -f /tmp/issue-26746-log /tmp/issue-26746-cursor
ID="$(systemd-id128 new)" ID="$(systemd-id128 new)"
journalctl -t "$ID" --follow --cursor-file=/tmp/issue-26746-cursor | tee /tmp/issue-26746-log & journalctl -t "$ID" --follow --cursor-file=/tmp/issue-26746-cursor | tee /tmp/issue-26746-log &
systemd-cat -t "$ID" /bin/sh -c 'echo hogehoge' systemd-cat -t "$ID" sh -c 'echo hogehoge'
# shellcheck disable=SC2016 # shellcheck disable=SC2016
timeout 10 bash -c 'until [[ -f /tmp/issue-26746-log && "$(cat /tmp/issue-26746-log)" =~ hogehoge ]]; do sleep .5; done' timeout 10 bash -c 'until [[ -f /tmp/issue-26746-log && "$(cat /tmp/issue-26746-log)" =~ hogehoge ]]; do sleep .5; done'
pkill -TERM journalctl pkill -TERM journalctl

View File

@ -405,7 +405,7 @@ if [[ ! -v ASAN_OPTIONS ]]; then
# Here, -p EnvironmentFile=-/usr/lib/systemd/systemd-asan-env does not work, # Here, -p EnvironmentFile=-/usr/lib/systemd/systemd-asan-env does not work,
# as sd-executor loads NSS module and fails before applying the environment: # as sd-executor loads NSS module and fails before applying the environment:
# (true)[660]: test-dynamicuser-fail.service: Changing to the requested working directory failed: No such file or directory # (true)[660]: test-dynamicuser-fail.service: Changing to the requested working directory failed: No such file or directory
# (true)[660]: test-dynamicuser-fail.service: Failed at step CHDIR spawning /usr/bin/true: No such file or directory # (true)[660]: test-dynamicuser-fail.service: Failed at step CHDIR spawning true: No such file or directory
# TEST-07-PID1.sh[660]: ==660==LeakSanitizer has encountered a fatal error. # TEST-07-PID1.sh[660]: ==660==LeakSanitizer has encountered a fatal error.
# TEST-07-PID1.sh[660]: ==660==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1 # TEST-07-PID1.sh[660]: ==660==HINT: For debugging, try setting environment variable LSAN_OPTIONS=verbosity=1:log_threads=1
# TEST-07-PID1.sh[660]: ==660==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc) # TEST-07-PID1.sh[660]: ==660==HINT: LeakSanitizer does not work under ptrace (strace, gdb, etc)

View File

@ -193,7 +193,7 @@ testcase_issue_6533() {
cat >"$unit_path" <<EOF cat >"$unit_path" <<EOF
[Service] [Service]
Type=simple Type=simple
ExecStart=/bin/sleep 5 ExecStart=sleep 5
EOF EOF
systemctl daemon-reload systemctl daemon-reload
@ -207,7 +207,7 @@ EOF
cat >"$unit_path" <<EOF cat >"$unit_path" <<EOF
[Service] [Service]
Type=simple Type=simple
ExecStart=/bin/sleep 5 ExecStart=sleep 5
ExecStart=bash -c "echo foo >>$log_file" ExecStart=bash -c "echo foo >>$log_file"
EOF EOF
systemctl daemon-reload systemctl daemon-reload

View File

@ -23,7 +23,7 @@ trap cleanup EXIT
cat > /run/systemd/system/"$UNIT" <<EOF cat > /run/systemd/system/"$UNIT" <<EOF
[Service] [Service]
ExecStart=/usr/bin/true ExecStart=true
RemainAfterExit=yes RemainAfterExit=yes
EOF EOF

View File

@ -23,7 +23,7 @@ trap cleanup EXIT
cat > /run/systemd/system/"$UNIT" <<EOF cat > /run/systemd/system/"$UNIT" <<EOF
[Service] [Service]
ExecStart=/usr/bin/true ExecStart=true
EOF EOF
mkdir /run/systemd/system/"$UNIT".d mkdir /run/systemd/system/"$UNIT".d

View File

@ -18,7 +18,7 @@ INTERNALPID=$!
disown disown
# Start a test process outside of our own cgroup # Start a test process outside of our own cgroup
systemd-run -p DynamicUser=1 --unit=test-sleep.service /bin/sleep infinity systemd-run -p DynamicUser=1 --unit=test-sleep.service sleep infinity
EXTERNALPID="$(systemctl show -P MainPID test-sleep.service)" EXTERNALPID="$(systemctl show -P MainPID test-sleep.service)"
# Update our own main PID to the external test PID, this should work # Update our own main PID to the external test PID, this should work
@ -162,11 +162,11 @@ chmod 755 /dev/shm/test-mainpid3.sh
test "$(systemctl show -P Result test-mainpidsh3.service)" = timeout test "$(systemctl show -P Result test-mainpidsh3.service)" = timeout
# Test that scope units work # Test that scope units work
systemd-run --scope --unit test-true.scope /bin/true systemd-run --scope --unit test-true.scope true
test "$(systemctl show -P Result test-true.scope)" = success test "$(systemctl show -P Result test-true.scope)" = success
# Test that user scope units work as well # Test that user scope units work as well
systemctl start user@4711.service systemctl start user@4711.service
runas testuser systemd-run --scope --user --unit test-true.scope /bin/true runas testuser systemd-run --scope --user --unit test-true.scope true
test "$(systemctl show -P Result test-true.scope)" = success test "$(systemctl show -P Result test-true.scope)" = success

View File

@ -35,7 +35,7 @@ cat << 'EOF' > /run/systemd/system/mqueue-ownership.service
Description=Dummy service for the socket unit Description=Dummy service for the socket unit
Requires=%N.socket Requires=%N.socket
[Service] [Service]
ExecStart=/usr/bin/true ExecStart=true
Type=oneshot Type=oneshot
EOF EOF

View File

@ -4,4 +4,4 @@ set -eux
set -o pipefail set -o pipefail
# For issue https://github.com/systemd/systemd/issues/29526 # For issue https://github.com/systemd/systemd/issues/29526
systemd-run -p PrivateNetwork=yes --wait /bin/true systemd-run -p PrivateNetwork=yes --wait true

View File

@ -41,7 +41,7 @@ PrivateUsers=yes
TemporaryFileSystem=/run /var/opt /var/lib /vol TemporaryFileSystem=/run /var/opt /var/lib /vol
${exec_directory_directive} ${exec_directory_directive}
${exec_quota_directive} ${exec_quota_directive}
ExecStart=/bin/bash -c ' \ ExecStart=bash -c ' \
set -eux; \ set -eux; \
set -o pipefail; \ set -o pipefail; \
touch ${directory}/quotadir/testfile; \ touch ${directory}/quotadir/testfile; \
@ -77,7 +77,7 @@ PrivateUsers=yes
TemporaryFileSystem=/run /var/opt /var/lib /vol TemporaryFileSystem=/run /var/opt /var/lib /vol
${exec_directory_directive} ${exec_directory_directive}
${exec_quota_directive} ${exec_quota_directive}
ExecStart=/bin/bash -c ' \ ExecStart=bash -c ' \
set -eux; \ set -eux; \
set -o pipefail; \ set -o pipefail; \
(! fallocate -l 10000G ${directory}/quotadir/largefile); \ (! fallocate -l 10000G ${directory}/quotadir/largefile); \

View File

@ -121,8 +121,8 @@ After=basic.target
[Service] [Service]
Type=oneshot Type=oneshot
ExecStart=/bin/sh -c 'echo "$EXPECTED_OUTPUT" > "$guest_output"' ExecStart=sh -c 'echo "$EXPECTED_OUTPUT" > "$guest_output"'
ExecStartPost=/usr/bin/systemctl --no-block exit 0 ExecStartPost=systemctl --no-block exit 0
TimeoutStopSec=15s TimeoutStopSec=15s
[Install] [Install]

View File

@ -6,4 +6,4 @@ set -o pipefail
# Make sure that we never mistake a process starting but failing quickly for a process failing to start, with Type=exec. # Make sure that we never mistake a process starting but failing quickly for a process failing to start, with Type=exec.
# See https://github.com/systemd/systemd/pull/30799 # See https://github.com/systemd/systemd/pull/30799
seq 25 | xargs -n 1 -P 0 systemd-run -p Type=exec /bin/false seq 25 | xargs -n 1 -P 0 systemd-run -p Type=exec false

View File

@ -40,7 +40,7 @@ done
# Create one "long running" container with some basic signal handling # Create one "long running" container with some basic signal handling
create_dummy_container /var/lib/machines/long-running create_dummy_container /var/lib/machines/long-running
cat >/var/lib/machines/long-running/sbin/init <<\EOF cat >/var/lib/machines/long-running/sbin/init <<\EOF
#!/usr/bin/bash #!/usr/bin/env bash
set -x set -x
@ -317,7 +317,7 @@ varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Unreg
# test io.systemd.Machine.List with addresses, OSRelease, and UIDShift fields # test io.systemd.Machine.List with addresses, OSRelease, and UIDShift fields
create_dummy_container "/var/lib/machines/container-without-os-release" create_dummy_container "/var/lib/machines/container-without-os-release"
cat >>/var/lib/machines/container-without-os-release/sbin/init <<\EOF cat >>/var/lib/machines/container-without-os-release/sbin/init <<\EOF
#!/usr/bin/bash #!/usr/bin/env bash
set -x set -x
@ -399,13 +399,13 @@ rm -f /tmp/none-existent-file
# server side, to not generate early SIGHUP. Hence, let's just invoke "sleep # server side, to not generate early SIGHUP. Hence, let's just invoke "sleep
# infinity" client side, once we acquired the fd (passing it to it), and kill # infinity" client side, once we acquired the fd (passing it to it), and kill
# it once we verified everything worked. # it once we verified everything worked.
PID=$(systemd-notify --fork -- varlinkctl --exec call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Open '{"name": ".host", "mode": "shell", "user": "root", "path": "/bin/bash", "args": ["/bin/bash", "-c", "echo $FOO > /tmp/none-existent-file"], "environment": ["FOO=BAR"]}' -- sleep infinity) PID=$(systemd-notify --fork -- varlinkctl --exec call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Open '{"name": ".host", "mode": "shell", "user": "root", "path": "/usr/bin/bash", "args": ["bash", "-c", "echo $FOO > /tmp/none-existent-file"], "environment": ["FOO=BAR"]}' -- sleep infinity)
timeout 30 bash -c "until test -e /tmp/none-existent-file; do sleep .5; done" timeout 30 bash -c "until test -e /tmp/none-existent-file; do sleep .5; done"
grep -q "BAR" /tmp/none-existent-file grep -q "BAR" /tmp/none-existent-file
kill "$PID" kill "$PID"
# Test varlinkctl's --exec fd passing logic properly # Test varlinkctl's --exec fd passing logic properly
assert_eq "$(varlinkctl --exec call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Open '{"name": ".host", "mode": "shell", "user": "root", "path": "/bin/bash", "args": ["/bin/bash", "-c", "echo $((7 + 8))"], "environment": ["TERM=dumb"]}' -- bash -c 'read -r -N 2 x <&3 ; echo "$x"')" 15 assert_eq "$(varlinkctl --exec call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.Open '{"name": ".host", "mode": "shell", "user": "root", "path": "/usr/bin/bash", "args": ["bash", "-c", "echo $((7 + 8))"], "environment": ["TERM=dumb"]}' -- bash -c 'read -r -N 2 x <&3 ; echo "$x"')" 15
# test io.systemd.Machine.MapFrom # test io.systemd.Machine.MapFrom
varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.MapFrom '{"name": "long-running", "uid":0, "gid": 0}' varlinkctl call /run/systemd/machine/io.systemd.Machine io.systemd.Machine.MapFrom '{"name": "long-running", "uid":0, "gid": 0}'

View File

@ -351,7 +351,8 @@ EOF
# Create a simple "entrypoint" script that validates that the container # Create a simple "entrypoint" script that validates that the container
# is created correctly according to the OCI config # is created correctly according to the OCI config
cat >"$OCI/rootfs/entrypoint.sh" <<EOF cat >"$OCI/rootfs/entrypoint.sh" <<EOF
#!/usr/bin/bash -e #!/usr/bin/env bash
set -e
# Mounts # Mounts
mountpoint /root mountpoint /root

View File

@ -193,7 +193,7 @@ testcase_sanity() {
# "Fake" getent passwd's bare minimum, so we don't have to pull it in # "Fake" getent passwd's bare minimum, so we don't have to pull it in
# with all the DSO shenanigans # with all the DSO shenanigans
cat >"$root/bin/getent" <<\EOF cat >"$root/bin/getent" <<\EOF
#!/bin/bash #!/usr/bin/env bash
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
: :
@ -456,7 +456,7 @@ Port=tcp:60
Port=udp:60:61 Port=udp:60:61
EOF EOF
cat >"$root/entrypoint.sh" <<\EOF cat >"$root/entrypoint.sh" <<\EOF
#!/bin/bash #!/usr/bin/env bash
set -ex set -ex
env env
@ -844,7 +844,7 @@ testcase_owneridmap() {
# "Fake" getent passwd's bare minimum, so we don't have to pull it in # "Fake" getent passwd's bare minimum, so we don't have to pull it in
# with all the DSO shenanigans # with all the DSO shenanigans
cat >"$root/bin/getent" <<\EOF cat >"$root/bin/getent" <<\EOF
#!/bin/bash #!/usr/bin/env bash
if [[ $# -eq 0 ]]; then if [[ $# -eq 0 ]]; then
: :
@ -869,7 +869,7 @@ EOF
--user=testuser \ --user=testuser \
--bind=/tmp/owneridmap/bind:/home/testuser:owneridmap \ --bind=/tmp/owneridmap/bind:/home/testuser:owneridmap \
${COVERAGE_BUILD_DIR:+--bind="$COVERAGE_BUILD_DIR"} \ ${COVERAGE_BUILD_DIR:+--bind="$COVERAGE_BUILD_DIR"} \
/usr/bin/bash -c "$cmd" |& tee nspawn.out; then bash -c "$cmd" |& tee nspawn.out; then
if grep -q "Failed to map ids for bind mount.*: Function not implemented" nspawn.out; then if grep -q "Failed to map ids for bind mount.*: Function not implemented" nspawn.out; then
echo "idmapped mounts are not supported, skipping the test..." echo "idmapped mounts are not supported, skipping the test..."
return 0 return 0
@ -906,7 +906,8 @@ testcase_os_release() {
create_dummy_container "$root" create_dummy_container "$root"
entrypoint="$root/entrypoint.sh" entrypoint="$root/entrypoint.sh"
cat >"$entrypoint" <<\EOF cat >"$entrypoint" <<\EOF
#!/usr/bin/bash -ex #!/usr/bin/env bash
set -ex
. /tmp/os-release . /tmp/os-release
[[ -n "${ID:-}" && "$ID" != "$container_host_id" ]] && exit 1 [[ -n "${ID:-}" && "$ID" != "$container_host_id" ]] && exit 1
@ -953,7 +954,7 @@ testcase_machinectl_bind() {
cat >"$service_path" <<EOF cat >"$service_path" <<EOF
[Service] [Service]
Type=notify Type=notify
ExecStart=systemd-nspawn --directory="$root" --notify-ready=no /usr/bin/bash -xec "$cmd" ExecStart=systemd-nspawn --directory="$root" --notify-ready=no bash -xec "$cmd"
EOF EOF
systemctl daemon-reload systemctl daemon-reload

View File

@ -25,7 +25,8 @@ mount --bind "$(mktemp --tmpdir=/var/tmp -d)" /var/lib/machines
# 1) Have no IP addresses assigned # 1) Have no IP addresses assigned
create_dummy_container /var/lib/machines/nss-mymachines-noip create_dummy_container /var/lib/machines/nss-mymachines-noip
cat >/var/lib/machines/nss-mymachines-noip/sbin/init <<\EOF cat >/var/lib/machines/nss-mymachines-noip/sbin/init <<\EOF
#!/usr/bin/bash -ex #!/usr/bin/env bash
set -ex
ip addr show dev ve-noip ip addr show dev ve-noip
touch /initialized touch /initialized
@ -38,7 +39,8 @@ EOF
# 2) Have one IP address assigned (IPv4 only) # 2) Have one IP address assigned (IPv4 only)
create_dummy_container /var/lib/machines/nss-mymachines-singleip create_dummy_container /var/lib/machines/nss-mymachines-singleip
cat >/var/lib/machines/nss-mymachines-singleip/sbin/init <<\EOF cat >/var/lib/machines/nss-mymachines-singleip/sbin/init <<\EOF
#!/usr/bin/bash -ex #!/usr/bin/env bash
set -ex
ip addr add 10.1.0.2/24 dev ve-singleip ip addr add 10.1.0.2/24 dev ve-singleip
ip addr show dev ve-singleip ip addr show dev ve-singleip
@ -51,7 +53,8 @@ EOF
# 3) Have bunch of IP addresses assigned (both IPv4 and IPv6) # 3) Have bunch of IP addresses assigned (both IPv4 and IPv6)
create_dummy_container /var/lib/machines/nss-mymachines-manyips create_dummy_container /var/lib/machines/nss-mymachines-manyips
cat >/var/lib/machines/nss-mymachines-manyips/sbin/init <<\EOF cat >/var/lib/machines/nss-mymachines-manyips/sbin/init <<\EOF
#!/usr/bin/bash -ex #!/usr/bin/env bash
set -ex
ip addr add 10.2.0.2/24 dev ve-manyips ip addr add 10.2.0.2/24 dev ve-manyips
for i in {100..120}; do for i in {100..120}; do

View File

@ -24,7 +24,7 @@ run0 -u testuser mkdir -p .local/state/machines
create_dummy_container /home/testuser/.local/state/machines/zurps create_dummy_container /home/testuser/.local/state/machines/zurps
cat >/home/testuser/.local/state/machines/zurps/sbin/init <<EOF cat >/home/testuser/.local/state/machines/zurps/sbin/init <<EOF
#!/bin/sh #!/usr/bin/env bash
echo "I am living in a container" echo "I am living in a container"
exec sleep infinity exec sleep infinity
EOF EOF

View File

@ -116,16 +116,16 @@ testcase_basic_dropins() {
echo "*** test service.d/ top level drop-in" echo "*** test service.d/ top level drop-in"
create_services test15-a test15-b create_services test15-a test15-b
check_ko test15-a ExecCondition "/bin/echo a" check_ko test15-a ExecCondition "echo a"
check_ko test15-b ExecCondition "/bin/echo b" check_ko test15-b ExecCondition "echo b"
mkdir -p /run/systemd/system/service.d mkdir -p /run/systemd/system/service.d
cat >/run/systemd/system/service.d/override.conf <<EOF cat >/run/systemd/system/service.d/override.conf <<EOF
[Service] [Service]
ExecCondition=/bin/echo %n ExecCondition=echo %n
EOF EOF
systemctl daemon-reload systemctl daemon-reload
check_ok test15-a ExecCondition "/bin/echo test15-a" check_ok test15-a ExecCondition "echo test15-a"
check_ok test15-b ExecCondition "/bin/echo test15-b" check_ok test15-b ExecCondition "echo test15-b"
rm -rf /run/systemd/system/service.d rm -rf /run/systemd/system/service.d
clear_units test15-{a,b,c,c1}.service clear_units test15-{a,b,c,c1}.service

View File

@ -70,21 +70,21 @@ runtime_max_sec=5
systemd-run \ systemd-run \
--property=RuntimeMaxSec=${runtime_max_sec}s \ --property=RuntimeMaxSec=${runtime_max_sec}s \
-u runtime-max-sec-test-1.service \ -u runtime-max-sec-test-1.service \
/usr/bin/sh -c "while true; do sleep 1; done" sh -c "while true; do sleep 1; done"
wait_for_timeout runtime-max-sec-test-1.service $((runtime_max_sec + 2)) wait_for_timeout runtime-max-sec-test-1.service $((runtime_max_sec + 2))
systemd-run \ systemd-run \
--property=RuntimeMaxSec=${runtime_max_sec}s \ --property=RuntimeMaxSec=${runtime_max_sec}s \
--scope \ --scope \
-u runtime-max-sec-test-2.scope \ -u runtime-max-sec-test-2.scope \
/usr/bin/sh -c "while true; do sleep 1; done" & sh -c "while true; do sleep 1; done" &
wait_for_timeout runtime-max-sec-test-2.scope $((runtime_max_sec + 2)) wait_for_timeout runtime-max-sec-test-2.scope $((runtime_max_sec + 2))
# These ensure that RuntimeMaxSec is honored for scope and service # These ensure that RuntimeMaxSec is honored for scope and service
# units if the value is changed and then the manager is reloaded. # units if the value is changed and then the manager is reloaded.
systemd-run \ systemd-run \
-u runtime-max-sec-test-3.service \ -u runtime-max-sec-test-3.service \
/usr/bin/sh -c "while true; do sleep 1; done" sh -c "while true; do sleep 1; done"
mkdir -p /etc/systemd/system/runtime-max-sec-test-3.service.d/ mkdir -p /etc/systemd/system/runtime-max-sec-test-3.service.d/
cat > /etc/systemd/system/runtime-max-sec-test-3.service.d/override.conf << EOF cat > /etc/systemd/system/runtime-max-sec-test-3.service.d/override.conf << EOF
[Service] [Service]
@ -96,7 +96,7 @@ wait_for_timeout runtime-max-sec-test-3.service $((runtime_max_sec + 2))
systemd-run \ systemd-run \
--scope \ --scope \
-u runtime-max-sec-test-4.scope \ -u runtime-max-sec-test-4.scope \
/usr/bin/sh -c "while true; do sleep 1; done" & sh -c "while true; do sleep 1; done" &
# Wait until the unit is running to avoid race with creating the override. # Wait until the unit is running to avoid race with creating the override.
until systemctl is-active runtime-max-sec-test-4.scope; do until systemctl is-active runtime-max-sec-test-4.scope; do

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
set -ex set -ex
set -o pipefail set -o pipefail
@ -7,7 +7,7 @@ mkdir -p /run/udev/rules.d/
cat >/run/udev/rules.d/50-testsuite.rules <<EOF cat >/run/udev/rules.d/50-testsuite.rules <<EOF
SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug" SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug"
ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", IMPORT{program}="/bin/echo -e HOGE=aa\\\\x20\\\\x20\\\\x20bb\nFOO=\\\\x20aaa\\\\x20\n\n\n" ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", IMPORT{program}="/usr/bin/echo -e HOGE=aa\\\\x20\\\\x20\\\\x20bb\nFOO=\\\\x20aaa\\\\x20\n\n\n"
EOF EOF
udevadm control --reload udevadm control --reload

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
set -ex set -ex
set -o pipefail set -o pipefail

View File

@ -17,8 +17,8 @@ SUBSYSTEM!="mem", GOTO="test_end"
KERNEL!="null", GOTO="test_end" KERNEL!="null", GOTO="test_end"
OPTIONS="log_level=debug" OPTIONS="log_level=debug"
PROGRAM=="/bin/touch /tmp/test-udev-marker" PROGRAM=="/usr/bin/touch /tmp/test-udev-marker"
PROGRAM!="/bin/sleep 60", ENV{PROGRAM_RESULT}="KILLED" PROGRAM!="/usr/bin/sleep 60", ENV{PROGRAM_RESULT}="KILLED"
LABEL="test_end" LABEL="test_end"
EOF EOF

View File

@ -17,9 +17,9 @@ KERNEL!="null", GOTO="end"
ACTION=="remove", GOTO="end" ACTION=="remove", GOTO="end"
IMPORT{db}="INVOCATIONS" IMPORT{db}="INVOCATIONS"
IMPORT{program}="/bin/bash -c 'systemctl show --property=InvocationID systemd-udevd.service'" IMPORT{program}="/usr/bin/bash -c 'systemctl show --property=InvocationID systemd-udevd.service'"
ENV{INVOCATIONS}+="%E{ACTION}_%E{SEQNUM}_%E{InvocationID}" ENV{INVOCATIONS}+="%E{ACTION}_%E{SEQNUM}_%E{InvocationID}"
ACTION=="add", RUN+="/bin/bash -c ':> /tmp/marker'", RUN+="/usr/bin/sleep 10" ACTION=="add", RUN+="/usr/bin/bash -c ':> /tmp/marker'", RUN+="/usr/bin/sleep 10"
LABEL="end" LABEL="end"
EOF EOF

View File

@ -160,13 +160,13 @@ echo "Failed to parse rules file $(pwd)/${rules}: No buffer space available" >"$
assert_1 "${rules}" assert_1 "${rules}"
{ {
printf 'RUN+="/bin/true",%8174s\\\n' ' ' printf 'RUN+="/usr/bin/true",%8170s\\\n' ' '
printf 'RUN+="/bin/false"%8174s\\\n' ' ' printf 'RUN+="/usr/bin/false"%8170s\\\n' ' '
echo echo
} >"${rules}" } >"${rules}"
assert_0 "${rules}" assert_0 "${rules}"
printf 'RUN+="/bin/true"%8176s\\\n #\n' ' ' ' ' >"${rules}" printf 'RUN+="/usr/bin/true"%8176s\\\n #\n' ' ' ' ' >"${rules}"
echo >>"${rules}" echo >>"${rules}"
cat >"${exp}" <<EOF cat >"${exp}" <<EOF
$(pwd)/${rules}:1 Line is too long, ignored. $(pwd)/${rules}:1 Line is too long, ignored.

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
set -ex set -ex
set -o pipefail set -o pipefail

View File

@ -43,7 +43,7 @@ EOF
testcase_iodevice_unitfile () { testcase_iodevice_unitfile () {
cat >/run/systemd/system/test1.service <<EOF cat >/run/systemd/system/test1.service <<EOF
[Service] [Service]
ExecStart=/usr/bin/sleep inf ExecStart=sleep inf
IOReadBandwidthMax=/dev/sda1 1M IOReadBandwidthMax=/dev/sda1 1M
IOReadBandwidthMax=/dev/sda2 2M IOReadBandwidthMax=/dev/sda2 2M
IOReadBandwidthMax=/dev/sda3 4M IOReadBandwidthMax=/dev/sda3 4M

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# With "e" don't attempt to set permissions when file doesn't exist, see # With "e" don't attempt to set permissions when file doesn't exist, see

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Basic tests for types creating directories # Basic tests for types creating directories

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Basic tests for types creating/writing files # Basic tests for types creating/writing files

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Basic tests for types creating fifos # Basic tests for types creating fifos

View File

@ -1,4 +1,4 @@
#! /bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
set -eux set -eux
set -o pipefail set -o pipefail

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Inspired by https://github.com/systemd/systemd/issues/9508 # Inspired by https://github.com/systemd/systemd/issues/9508

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Verifies the issues described by https://github.com/systemd/systemd/issues/10191 # Verifies the issues described by https://github.com/systemd/systemd/issues/10191

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Verify tmpfiles can run in a root directory under a path prefix that contains # Verify tmpfiles can run in a root directory under a path prefix that contains

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Tests for configuration directory and file precedences # Tests for configuration directory and file precedences

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Tests for the ":" uid/gid/mode modifier # Tests for the ":" uid/gid/mode modifier

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Check specifier expansion in L lines. # Check specifier expansion in L lines.

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Test for conditionalized execute bit ('X' bit) # Test for conditionalized execute bit ('X' bit)

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Test for C-style escapes in file names and contents # Test for C-style escapes in file names and contents

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Tests for the --purge switch # Tests for the --purge switch

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# #
# Tests for character and block device creation # Tests for character and block device creation

View File

@ -15,7 +15,7 @@ echo "[#1] Failing ExecReload= should not kill the service"
cat >"$SERVICE_PATH" <<EOF cat >"$SERVICE_PATH" <<EOF
[Service] [Service]
ExecStart=sleep infinity ExecStart=sleep infinity
ExecReload=/bin/false ExecReload=false
EOF EOF
systemctl daemon-reload systemctl daemon-reload
@ -31,9 +31,9 @@ echo "[#2] Failing ExecReload= should not kill the service (multiple ExecReload=
cat >"$SERVICE_PATH" <<EOF cat >"$SERVICE_PATH" <<EOF
[Service] [Service]
ExecStart=sleep infinity ExecStart=sleep infinity
ExecReload=/bin/true ExecReload=true
ExecReload=/bin/false ExecReload=false
ExecReload=/bin/true ExecReload=true
EOF EOF
systemctl daemon-reload systemctl daemon-reload
@ -48,7 +48,7 @@ echo "[#3] Failing ExecReload=- should not affect reload's exit code"
cat >"$SERVICE_PATH" <<EOF cat >"$SERVICE_PATH" <<EOF
[Service] [Service]
ExecStart=sleep infinity ExecStart=sleep infinity
ExecReload=-/bin/false ExecReload=-false
EOF EOF
systemctl daemon-reload systemctl daemon-reload

View File

@ -7,19 +7,19 @@ set -eux
systemd-analyze log-level debug systemd-analyze log-level debug
systemd-run --unit=simple1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=simple \ systemd-run --unit=simple1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=simple \
-p ExecStopPost='/bin/touch /run/simple1' true -p ExecStopPost='touch /run/simple1' true
test -f /run/simple1 test -f /run/simple1
(! systemd-run --unit=simple2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=simple \ (! systemd-run --unit=simple2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=simple \
-p ExecStopPost='/bin/touch /run/simple2' false) -p ExecStopPost='touch /run/simple2' false)
test -f /run/simple2 test -f /run/simple2
systemd-run --unit=exec1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=exec \ systemd-run --unit=exec1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=exec \
-p ExecStopPost='/bin/touch /run/exec1' sleep 1 -p ExecStopPost='touch /run/exec1' sleep 1
test -f /run/exec1 test -f /run/exec1
(! systemd-run --unit=exec2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=exec \ (! systemd-run --unit=exec2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=exec \
-p ExecStopPost='/bin/touch /run/exec2' sh -c 'sleep 1; false') -p ExecStopPost='touch /run/exec2' sh -c 'sleep 1; false')
test -f /run/exec2 test -f /run/exec2
cat >/tmp/forking1.sh <<EOF cat >/tmp/forking1.sh <<EOF
@ -36,7 +36,7 @@ EOF
chmod +x /tmp/forking1.sh chmod +x /tmp/forking1.sh
systemd-run --unit=forking1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec \ systemd-run --unit=forking1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec \
-p ExecStopPost='/bin/touch /run/forking1' /tmp/forking1.sh -p ExecStopPost='touch /run/forking1' /tmp/forking1.sh
test -f /run/forking1 test -f /run/forking1
cat >/tmp/forking2.sh <<EOF cat >/tmp/forking2.sh <<EOF
@ -53,29 +53,29 @@ EOF
chmod +x /tmp/forking2.sh chmod +x /tmp/forking2.sh
(! systemd-run --unit=forking2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec \ (! systemd-run --unit=forking2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=forking -p NotifyAccess=exec \
-p ExecStopPost='/bin/touch /run/forking2' /tmp/forking2.sh) -p ExecStopPost='touch /run/forking2' /tmp/forking2.sh)
test -f /run/forking2 test -f /run/forking2
systemd-run --unit=oneshot1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=oneshot \ systemd-run --unit=oneshot1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=oneshot \
-p ExecStopPost='/bin/touch /run/oneshot1' true -p ExecStopPost='touch /run/oneshot1' true
test -f /run/oneshot1 test -f /run/oneshot1
(! systemd-run --unit=oneshot2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=oneshot \ (! systemd-run --unit=oneshot2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=oneshot \
-p ExecStopPost='/bin/touch /run/oneshot2' false) -p ExecStopPost='touch /run/oneshot2' false)
test -f /run/oneshot2 test -f /run/oneshot2
systemd-run --unit=dbus1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus -p BusName=systemd.test.ExecStopPost \ systemd-run --unit=dbus1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus -p BusName=systemd.test.ExecStopPost \
-p ExecStopPost='/bin/touch /run/dbus1' \ -p ExecStopPost='touch /run/dbus1' \
busctl call org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus RequestName su systemd.test.ExecStopPost 4 || : busctl call org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus RequestName su systemd.test.ExecStopPost 4 || :
test -f /run/dbus1 test -f /run/dbus1
systemd-run --unit=dbus2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus -p BusName=systemd.test.ExecStopPost \ systemd-run --unit=dbus2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus -p BusName=systemd.test.ExecStopPost \
-p ExecStopPost='/bin/touch /run/dbus2' true -p ExecStopPost='touch /run/dbus2' true
test -f /run/dbus2 test -f /run/dbus2
# https://github.com/systemd/systemd/issues/19920 # https://github.com/systemd/systemd/issues/19920
(! systemd-run --unit=dbus3.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus \ (! systemd-run --unit=dbus3.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=dbus \
-p ExecStopPost='/bin/touch /run/dbus3' true) -p ExecStopPost='touch /run/dbus3' true)
cat >/tmp/notify1.sh <<EOF cat >/tmp/notify1.sh <<EOF
#!/usr/bin/env bash #!/usr/bin/env bash
@ -87,18 +87,19 @@ EOF
chmod +x /tmp/notify1.sh chmod +x /tmp/notify1.sh
systemd-run --unit=notify1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify \ systemd-run --unit=notify1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify \
-p ExecStopPost='/bin/touch /run/notify1' /tmp/notify1.sh -p ExecStopPost='touch /run/notify1' /tmp/notify1.sh
test -f /run/notify1 test -f /run/notify1
(! systemd-run --unit=notify2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify \ (! systemd-run --unit=notify2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=notify \
-p ExecStopPost='/bin/touch /run/notify2' true) -p ExecStopPost='touch /run/notify2' true)
test -f /run/notify2 test -f /run/notify2
systemd-run --unit=idle1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=idle -p ExecStopPost='/bin/touch /run/idle1' true systemd-run --unit=idle1.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=idle \
-p ExecStopPost='touch /run/idle1' true
test -f /run/idle1 test -f /run/idle1
(! systemd-run --unit=idle2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=idle \ (! systemd-run --unit=idle2.service --wait -p StandardOutput=tty -p StandardError=tty -p Type=idle \
-p ExecStopPost='/bin/touch /run/idle2' false) -p ExecStopPost='touch /run/idle2' false)
test -f /run/idle2 test -f /run/idle2
systemd-analyze log-level info systemd-analyze log-level info

View File

@ -20,16 +20,16 @@ property[7_seven]=ExecStopPost
# These should all get upgraded to the corresponding Ex property as the non-Ex variant # These should all get upgraded to the corresponding Ex property as the non-Ex variant
# does not support the ":" prefix (no-env-expand). # does not support the ":" prefix (no-env-expand).
for c in "${!property[@]}"; do for c in "${!property[@]}"; do
systemd-run --unit="$c" -r -p "Type=oneshot" -p "${property[$c]}=:/bin/echo \${$c}" true systemd-run --unit="$c" -r -p "Type=oneshot" -p "${property[$c]}=:echo \${$c}" true
systemctl show -p "${property[$c]}" "$c" | grep -F "path=/bin/echo ; argv[]=/bin/echo \${$c} ; ignore_errors=no" systemctl show -p "${property[$c]}" "$c" | grep -F "path=echo ; argv[]=echo \${$c} ; ignore_errors=no"
systemctl show -p "${property[$c]}Ex" "$c" | grep -F "path=/bin/echo ; argv[]=/bin/echo \${$c} ; flags=no-env-expand" systemctl show -p "${property[$c]}Ex" "$c" | grep -F "path=echo ; argv[]=echo \${$c} ; flags=no-env-expand"
done done
# Ex names on the commandline are supported for backward compat. # Ex names on the commandline are supported for backward compat.
for c in "${!property[@]}"; do for c in "${!property[@]}"; do
systemd-run --unit="${c}_ex" -r -p "Type=oneshot" -p "${property[$c]}Ex=:/bin/echo \${$c}" true systemd-run --unit="${c}_ex" -r -p "Type=oneshot" -p "${property[$c]}Ex=:echo \${$c}" true
systemctl show -p "${property[$c]}" "$c" | grep -F "path=/bin/echo ; argv[]=/bin/echo \${$c} ; ignore_errors=no" systemctl show -p "${property[$c]}" "$c" | grep -F "path=echo ; argv[]=echo \${$c} ; ignore_errors=no"
systemctl show -p "${property[$c]}Ex" "$c" | grep -F "path=/bin/echo ; argv[]=/bin/echo \${$c} ; flags=no-env-expand" systemctl show -p "${property[$c]}Ex" "$c" | grep -F "path=echo ; argv[]=echo \${$c} ; flags=no-env-expand"
done done
systemd-analyze log-level info systemd-analyze log-level info

View File

@ -14,7 +14,7 @@ MAX_SECS=60
systemctl log-level debug systemctl log-level debug
# test one: Restart=on-failure should restart the service # test one: Restart=on-failure should restart the service
(! systemd-run --unit=oneshot-restart-one -p Type=oneshot -p Restart=on-failure /bin/bash -c "exit 1") (! systemd-run --unit=oneshot-restart-one -p Type=oneshot -p Restart=on-failure bash -c "exit 1")
for ((secs = 0; secs < MAX_SECS; secs++)); do for ((secs = 0; secs < MAX_SECS; secs++)); do
[[ "$(systemctl show oneshot-restart-one.service -P NRestarts)" -le 0 ]] || break [[ "$(systemctl show oneshot-restart-one.service -P NRestarts)" -le 0 ]] || break
@ -35,7 +35,7 @@ TMP_FILE="/tmp/test-23-oneshot-restart-test$RANDOM"
-p StartLimitBurst=3 \ -p StartLimitBurst=3 \
-p Type=oneshot \ -p Type=oneshot \
-p Restart=on-failure \ -p Restart=on-failure \
-p ExecStart="/bin/bash -c 'printf a >>$TMP_FILE'" /bin/bash -c "exit 1") -p ExecStart="bash -c 'printf a >>$TMP_FILE'" bash -c "exit 1")
# wait for at least 3 restarts # wait for at least 3 restarts
for ((secs = 0; secs < MAX_SECS; secs++)); do for ((secs = 0; secs < MAX_SECS; secs++)); do

View File

@ -16,13 +16,13 @@ systemctl start user@0.service
( ! test -d "$HOME"/.local/state/foo) ( ! test -d "$HOME"/.local/state/foo)
( ! test -d "$HOME"/.config/foo) ( ! test -d "$HOME"/.config/foo)
systemd-run --user -p StateDirectory=foo --wait /bin/true systemd-run --user -p StateDirectory=foo --wait true
test -d "$HOME"/.local/state/foo test -d "$HOME"/.local/state/foo
( ! test -L "$HOME"/.local/state/foo) ( ! test -L "$HOME"/.local/state/foo)
( ! test -d "$HOME"/.config/foo) ( ! test -d "$HOME"/.config/foo)
systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait /bin/true systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait true
test -d "$HOME"/.local/state/foo test -d "$HOME"/.local/state/foo
( ! test -L "$HOME"/.local/state/foo) ( ! test -L "$HOME"/.local/state/foo)
@ -30,7 +30,7 @@ test -d "$HOME"/.config/foo
rmdir "$HOME"/.local/state/foo "$HOME"/.config/foo rmdir "$HOME"/.local/state/foo "$HOME"/.config/foo
systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait /bin/true systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait true
test -d "$HOME"/.local/state/foo test -d "$HOME"/.local/state/foo
( ! test -L "$HOME"/.local/state/foo) ( ! test -L "$HOME"/.local/state/foo)
@ -39,13 +39,13 @@ test -d "$HOME"/.config/foo
rmdir "$HOME"/.local/state/foo "$HOME"/.config/foo rmdir "$HOME"/.local/state/foo "$HOME"/.config/foo
# Now trigger an update scenario by creating a config dir first # Now trigger an update scenario by creating a config dir first
systemd-run --user -p ConfigurationDirectory=foo --wait /bin/true systemd-run --user -p ConfigurationDirectory=foo --wait true
( ! test -d "$HOME"/.local/state/foo) ( ! test -d "$HOME"/.local/state/foo)
test -d "$HOME"/.config/foo test -d "$HOME"/.config/foo
# This will look like an update and result in a symlink # This will look like an update and result in a symlink
systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait /bin/true systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait true
test -d "$HOME"/.local/state/foo test -d "$HOME"/.local/state/foo
test -L "$HOME"/.local/state/foo test -L "$HOME"/.local/state/foo
@ -54,7 +54,7 @@ test -d "$HOME"/.config/foo
test "$(readlink "$HOME"/.local/state/foo)" = ../../.config/foo test "$(readlink "$HOME"/.local/state/foo)" = ../../.config/foo
# Check that this will work safely a second time # Check that this will work safely a second time
systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait /bin/true systemd-run --user -p StateDirectory=foo -p ConfigurationDirectory=foo --wait true
( ! systemd-run --user -p StateDirectory=foo::ro --wait sh -c "echo foo > $HOME/.local/state/foo/baz") ( ! systemd-run --user -p StateDirectory=foo::ro --wait sh -c "echo foo > $HOME/.local/state/foo/baz")
( ! systemd-run --user -p StateDirectory=foo:bar:ro --wait sh -c "echo foo > $HOME/.local/state/foo/baz") ( ! systemd-run --user -p StateDirectory=foo:bar:ro --wait sh -c "echo foo > $HOME/.local/state/foo/baz")

View File

@ -12,16 +12,16 @@ touch /tmp/brokenbinary
chmod +x /tmp/brokenbinary chmod +x /tmp/brokenbinary
# These three commands should succeed. # These three commands should succeed.
systemd-run --unit=exec-one -p Type=simple /bin/sleep infinity systemd-run --unit=exec-one -p Type=simple sleep infinity
systemd-run --unit=exec-two -p Type=simple -p User=idontexist /bin/sleep infinity systemd-run --unit=exec-two -p Type=simple -p User=idontexist sleep infinity
systemd-run --unit=exec-three -p Type=simple /tmp/brokenbinary systemd-run --unit=exec-three -p Type=simple /tmp/brokenbinary
# And now, do the same with Type=exec, where the latter two should fail # And now, do the same with Type=exec, where the latter two should fail
systemd-run --unit=exec-four -p Type=exec /bin/sleep infinity systemd-run --unit=exec-four -p Type=exec sleep infinity
(! systemd-run --unit=exec-five -p Type=exec -p User=idontexist /bin/sleep infinity) (! systemd-run --unit=exec-five -p Type=exec -p User=idontexist sleep infinity)
(! systemd-run --unit=exec-six -p Type=exec /tmp/brokenbinary) (! systemd-run --unit=exec-six -p Type=exec /tmp/brokenbinary)
systemd-run --unit=exec-seven -p KillSignal=SIGTERM -p RestartKillSignal=SIGINT -p Type=exec /bin/sleep infinity systemd-run --unit=exec-seven -p KillSignal=SIGTERM -p RestartKillSignal=SIGINT -p Type=exec sleep infinity
# Both TERM and SIGINT happen to have the same number on all architectures # Both TERM and SIGINT happen to have the same number on all architectures
test "$(systemctl show --value -p KillSignal exec-seven.service)" -eq 15 test "$(systemctl show --value -p KillSignal exec-seven.service)" -eq 15
test "$(systemctl show --value -p RestartKillSignal exec-seven.service)" -eq 2 test "$(systemctl show --value -p RestartKillSignal exec-seven.service)" -eq 2
@ -37,7 +37,7 @@ busctl call \
org.freedesktop.systemd1.Manager StartTransientUnit \ org.freedesktop.systemd1.Manager StartTransientUnit \
"ssa(sv)a(sa(sv))" test-20933-ok.service replace 1 \ "ssa(sv)a(sa(sv))" test-20933-ok.service replace 1 \
ExecStart "a(sasb)" 1 \ ExecStart "a(sasb)" 1 \
/usr/bin/sleep 2 /usr/bin/sleep 1 true \ sleep 2 sleep 1 true \
0 0
# DBus call should fail but not crash systemd # DBus call should fail but not crash systemd
@ -46,7 +46,7 @@ busctl call \
org.freedesktop.systemd1.Manager StartTransientUnit \ org.freedesktop.systemd1.Manager StartTransientUnit \
"ssa(sv)a(sa(sv))" test-20933-bad.service replace 1 \ "ssa(sv)a(sa(sv))" test-20933-bad.service replace 1 \
ExecStart "a(sasb)" 1 \ ExecStart "a(sasb)" 1 \
/usr/bin/sleep 0 true \ sleep 0 true \
0) 0)
# Same but with the empty argv in the middle # Same but with the empty argv in the middle
@ -55,9 +55,9 @@ busctl call \
org.freedesktop.systemd1.Manager StartTransientUnit \ org.freedesktop.systemd1.Manager StartTransientUnit \
"ssa(sv)a(sa(sv))" test-20933-bad-middle.service replace 1 \ "ssa(sv)a(sa(sv))" test-20933-bad-middle.service replace 1 \
ExecStart "a(sasb)" 3 \ ExecStart "a(sasb)" 3 \
/usr/bin/sleep 2 /usr/bin/sleep 1 true \ sleep 2 sleep 1 true \
/usr/bin/sleep 0 true \ sleep 0 true \
/usr/bin/sleep 2 /usr/bin/sleep 1 true \ sleep 2 sleep 1 true \
0) 0)
systemd-analyze log-level info systemd-analyze log-level info

View File

@ -258,7 +258,7 @@ systemctl revert "$UNIT_NAME"
(! grep -r "CPUQuota=" "/run/systemd/system.control/${UNIT_NAME}.d/") (! grep -r "CPUQuota=" "/run/systemd/system.control/${UNIT_NAME}.d/")
# Failed-unit related tests # Failed-unit related tests
(! systemd-run --wait --unit "failed.service" /bin/false) (! systemd-run --wait --unit "failed.service" false)
systemctl is-failed failed.service systemctl is-failed failed.service
systemctl --state=failed | grep failed.service systemctl --state=failed | grep failed.service
systemctl --failed | grep failed.service systemctl --failed | grep failed.service
@ -405,7 +405,7 @@ if [[ -x /usr/lib/systemd/system-generators/systemd-sysv-generator ]]; then
# invalid dependency # invalid dependency
cat >"${SYSVINIT_PATH:?}/issue-24990" <<\EOF cat >"${SYSVINIT_PATH:?}/issue-24990" <<\EOF
#!/bin/bash #!/usr/bin/env bash
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides:test1 test2 # Provides:test1 test2
@ -459,7 +459,7 @@ EOF
# valid dependency # valid dependency
cat >"$SYSVINIT_PATH/issue-24990" <<\EOF cat >"$SYSVINIT_PATH/issue-24990" <<\EOF
#!/bin/bash #!/usr/bin/env bash
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides:test1 test2 # Provides:test1 test2

View File

@ -180,7 +180,7 @@ PrivateUsers=yes
TemporaryFileSystem=/run /var/opt /var/lib /vol TemporaryFileSystem=/run /var/opt /var/lib /vol
UMask=0000 UMask=0000
StateDirectory=testidmapped:sampleservice StateDirectory=testidmapped:sampleservice
ExecStart=/bin/bash -c ' \ ExecStart=bash -c ' \
set -eux; \ set -eux; \
set -o pipefail; \ set -o pipefail; \
touch /var/lib/sampleservice/testfile; \ touch /var/lib/sampleservice/testfile; \
@ -213,7 +213,7 @@ PrivateUsers=no
TemporaryFileSystem=/run /var/opt /var/lib /vol TemporaryFileSystem=/run /var/opt /var/lib /vol
UMask=0000 UMask=0000
StateDirectory=testidmapped:sampleservice StateDirectory=testidmapped:sampleservice
ExecStart=/bin/bash -c ' \ ExecStart=bash -c ' \
set -eux; \ set -eux; \
set -o pipefail; \ set -o pipefail; \
touch /var/lib/sampleservice/testfile; \ touch /var/lib/sampleservice/testfile; \

View File

@ -21,7 +21,7 @@ cleanup_test_user() (
setup_test_user() { setup_test_user() {
mkdir -p /var/spool/cron /var/spool/mail mkdir -p /var/spool/cron /var/spool/mail
useradd -m -s /bin/bash logind-test-user useradd -m -s /usr/bin/bash logind-test-user
trap cleanup_test_user EXIT trap cleanup_test_user EXIT
} }
@ -351,7 +351,7 @@ create_session() {
[Service] [Service]
Type=simple Type=simple
ExecStart= ExecStart=
ExecStart=-/sbin/agetty --autologin logind-test-user --noclear %I $TERM ExecStart=-agetty --autologin logind-test-user --noclear %I $TERM
Restart=no Restart=no
EOF EOF
systemctl daemon-reload systemctl daemon-reload
@ -679,7 +679,7 @@ session required pam_unix.so
EOF EOF
cat > "$SCRIPT" <<'EOF' cat > "$SCRIPT" <<'EOF'
#!/bin/bash #!/usr/bin/env bash
set -ex set -ex
typeset -i AMB MASK typeset -i AMB MASK
AMB="0x$(grep 'CapAmb:' /proc/self/status | cut -d: -f2 | tr -d '[:space:]')" AMB="0x$(grep 'CapAmb:' /proc/self/status | cut -d: -f2 | tr -d '[:space:]')"

View File

@ -339,7 +339,7 @@ testcase_watchdog() {
local unit="wd.service" local unit="wd.service"
systemd-run --collect --unit "$unit" --property WatchdogSec=4s --property Type=notify \ systemd-run --collect --unit "$unit" --property WatchdogSec=4s --property Type=notify \
/bin/bash -c 'systemd-notify --ready; while true; do systemd-notify WATCHDOG=1; sleep 1; done' bash -c 'systemd-notify --ready; while true; do systemd-notify WATCHDOG=1; sleep 1; done'
systemctl freeze "$unit" systemctl freeze "$unit"
check_freezer_state "$unit" "frozen" check_freezer_state "$unit" "frozen"

View File

@ -93,7 +93,7 @@ runas testuser systemd-run --wait --user --unit=test-devices \
# Same check as test/test-execute/exec-privatenetwork-yes.service # Same check as test/test-execute/exec-privatenetwork-yes.service
runas testuser systemd-run --wait --user --unit=test-network \ runas testuser systemd-run --wait --user --unit=test-network \
-p PrivateNetwork=yes \ -p PrivateNetwork=yes \
/bin/sh -x -c '! ip link | grep -E "^[0-9]+: " | grep -Ev ": (lo|(erspan|gre|gretap|ip_vti|ip6_vti|ip6gre|ip6tnl|sit|tunl)0@.*):"' sh -x -c '! ip link | grep -E "^[0-9]+: " | grep -Ev ": (lo|(erspan|gre|gretap|ip_vti|ip6_vti|ip6gre|ip6tnl|sit|tunl)0@.*):"'
(! runas testuser systemd-run --wait --user --unit=test-hostname \ (! runas testuser systemd-run --wait --user --unit=test-hostname \
-p ProtectHostname=yes \ -p ProtectHostname=yes \

View File

@ -519,14 +519,14 @@ userdbctl ssh-authorized-keys dropinuser | tee /tmp/authorized-keys
grep "ssh-ed25519" /tmp/authorized-keys grep "ssh-ed25519" /tmp/authorized-keys
grep "ecdsa-sha2-nistp256" /tmp/authorized-keys grep "ecdsa-sha2-nistp256" /tmp/authorized-keys
echo "my-top-secret-key 🐱" >/tmp/my-top-secret-key echo "my-top-secret-key 🐱" >/tmp/my-top-secret-key
userdbctl ssh-authorized-keys dropinuser --chain /bin/cat /tmp/my-top-secret-key | tee /tmp/authorized-keys userdbctl ssh-authorized-keys dropinuser --chain /usr/bin/cat /tmp/my-top-secret-key | tee /tmp/authorized-keys
grep "ssh-ed25519" /tmp/authorized-keys grep "ssh-ed25519" /tmp/authorized-keys
grep "ecdsa-sha2-nistp256" /tmp/authorized-keys grep "ecdsa-sha2-nistp256" /tmp/authorized-keys
grep "my-top-secret-key 🐱" /tmp/authorized-keys grep "my-top-secret-key 🐱" /tmp/authorized-keys
(! userdbctl ssh-authorized-keys 🐱) (! userdbctl ssh-authorized-keys 🐱)
(! userdbctl ssh-authorized-keys dropin-user --chain) (! userdbctl ssh-authorized-keys dropin-user --chain)
(! userdbctl ssh-authorized-keys dropin-user --chain '') (! userdbctl ssh-authorized-keys dropin-user --chain '')
(! SYSTEMD_LOG_LEVEL=debug userdbctl ssh-authorized-keys dropin-user --chain /bin/false) (! SYSTEMD_LOG_LEVEL=debug userdbctl ssh-authorized-keys dropin-user --chain /usr/bin/false)
(! userdbctl '') (! userdbctl '')
for opt in json multiplexer output synthesize with-dropin with-nss with-varlink; do for opt in json multiplexer output synthesize with-dropin with-nss with-varlink; do
@ -611,7 +611,7 @@ EOF
cat >/run/systemd/system/mysshserver@.service <<EOF cat >/run/systemd/system/mysshserver@.service <<EOF
[Service] [Service]
ExecStart=-/usr/sbin/sshd -i -d -e ExecStart=-sshd -i -d -e
StandardInput=socket StandardInput=socket
StandardOutput=socket StandardOutput=socket
StandardError=journal StandardError=journal

View File

@ -3,7 +3,7 @@
set -eux set -eux
set -o pipefail set -o pipefail
# Check that the /sbin/mount.ddi helper works # Check that the /usr/sbin/mount.ddi helper works
dir="/tmp/mounthelper.$RANDOM" dir="/tmp/mounthelper.$RANDOM"
mount -t ddi "$MINIMAL_IMAGE.gpt" "$dir" -o ro,X-mount.mkdir,discard mount -t ddi "$MINIMAL_IMAGE.gpt" "$dir" -o ro,X-mount.mkdir,discard
umount -R "$dir" umount -R "$dir"

View File

@ -17,9 +17,9 @@ systemd-dissect "$MINIMAL_IMAGE.raw" | grep -q -F -f <(sed 's/"//g' "$OS_RELEASE
systemd-dissect --list "$MINIMAL_IMAGE.raw" | grep -q '^etc/os-release$' systemd-dissect --list "$MINIMAL_IMAGE.raw" | grep -q '^etc/os-release$'
systemd-dissect --mtree "$MINIMAL_IMAGE.raw" --mtree-hash yes | \ systemd-dissect --mtree "$MINIMAL_IMAGE.raw" --mtree-hash yes | \
grep -qe "^./usr/bin/cat type=file mode=0755 uid=0 gid=0 size=[0-9]* sha256sum=[a-z0-9]*$" grep -qE "^.(/usr|)/bin/cat type=file mode=0755 uid=0 gid=0 size=[0-9]* sha256sum=[a-z0-9]*$"
systemd-dissect --mtree "$MINIMAL_IMAGE.raw" --mtree-hash no | \ systemd-dissect --mtree "$MINIMAL_IMAGE.raw" --mtree-hash no | \
grep -qe "^./usr/bin/cat type=file mode=0755 uid=0 gid=0 size=[0-9]*$" grep -qE "^.(/usr|)/bin/cat type=file mode=0755 uid=0 gid=0 size=[0-9]*$"
read -r SHA256SUM1 _ < <(systemd-dissect --copy-from "$MINIMAL_IMAGE.raw" etc/os-release | sha256sum) read -r SHA256SUM1 _ < <(systemd-dissect --copy-from "$MINIMAL_IMAGE.raw" etc/os-release | sha256sum)
test "$SHA256SUM1" != "" test "$SHA256SUM1" != ""
@ -867,7 +867,7 @@ echo "ID=_any" >/run/confexts/test/etc/extension-release.d/extension-release.tes
echo "ARCHITECTURE=_any" >>/run/confexts/test/etc/extension-release.d/extension-release.test echo "ARCHITECTURE=_any" >>/run/confexts/test/etc/extension-release.d/extension-release.test
echo "MARKER_CONFEXT_123" >/run/confexts/test/etc/testfile echo "MARKER_CONFEXT_123" >/run/confexts/test/etc/testfile
cat <<EOF >/run/confexts/test/etc/testscript cat <<EOF >/run/confexts/test/etc/testscript
#!/bin/bash #!/usr/bin/env bash
echo "This should not happen" echo "This should not happen"
EOF EOF
chmod +x /run/confexts/test/etc/testscript chmod +x /run/confexts/test/etc/testscript

View File

@ -24,7 +24,7 @@ run_with_cred_compare() (
) )
test_mount_with_credential() { test_mount_with_credential() {
local credfile tmpdir unit local credfile tmpdir unit mount_path mount_test
credfile="/tmp/mount-cred" credfile="/tmp/mount-cred"
tmpdir="/tmp/test-54-mount" tmpdir="/tmp/test-54-mount"
unit=$(systemd-escape --suffix mount --path "$tmpdir") unit=$(systemd-escape --suffix mount --path "$tmpdir")
@ -42,14 +42,16 @@ LoadCredential=loadcred:$credfile
EOF EOF
# Set up test mount type # Set up test mount type
cat >/usr/sbin/mount.thisisatest <<EOF mount_path="$(command -v mount 2>/dev/null)"
mount_test="${mount_path/\/bin/\/sbin}.thisisatest"
cat >"$mount_test" <<EOF
#!/usr/bin/env bash #!/usr/bin/env bash
# Mount after verifying credential file content # Mount after verifying credential file content
if [ \$(cat \${CREDENTIALS_DIRECTORY}/loadcred) = "foo" ]; then if [ \$(cat \${CREDENTIALS_DIRECTORY}/loadcred) = "foo" ]; then
mount -t tmpfs \$1 \$2 mount -t tmpfs \$1 \$2
fi fi
EOF EOF
chmod +x /usr/sbin/mount.thisisatest chmod +x "$mount_test"
# Verify mount succeeds # Verify mount succeeds
systemctl daemon-reload systemctl daemon-reload
@ -62,7 +64,7 @@ EOF
# Stop unit and delete files # Stop unit and delete files
systemctl stop "$unit" systemctl stop "$unit"
rm -f "$credfile" /run/systemd/system/"$unit" /usr/sbin/mount.thisisatest rm -f "$credfile" /run/systemd/system/"$unit" "$mount_test"
rm -rf "$tmpdir" rm -rf "$tmpdir"
} }

View File

@ -93,7 +93,7 @@ EOF
else else
# Ensure that we can start services even with a very low hard memory cap without oom-kills, but skip # Ensure that we can start services even with a very low hard memory cap without oom-kills, but skip
# under sanitizers as they balloon memory usage. # under sanitizers as they balloon memory usage.
systemd-run -t -p MemoryMax=10M -p MemorySwapMax=0 -p MemoryZSwapMax=0 /bin/true systemd-run -t -p MemoryMax=10M -p MemorySwapMax=0 -p MemoryZSwapMax=0 true
fi fi
test_basic() { test_basic() {

View File

@ -68,7 +68,7 @@ testcase_issue_23796() {
mount_path="$(command -v mount 2>/dev/null)" mount_path="$(command -v mount 2>/dev/null)"
mount_mytmpfs="${mount_path/\/bin/\/sbin}.mytmpfs" mount_mytmpfs="${mount_path/\/bin/\/sbin}.mytmpfs"
cat >"$mount_mytmpfs" <<EOF cat >"$mount_mytmpfs" <<EOF
#!/bin/bash #!/usr/bin/env bash
sleep ".\$RANDOM" sleep ".\$RANDOM"
exec -- $mount_path -t tmpfs tmpfs "\$2" exec -- $mount_path -t tmpfs tmpfs "\$2"
EOF EOF

View File

@ -1133,7 +1133,7 @@ Description=Test unit for systemd-analyze unit-shell
[Service] [Service]
Type=notify Type=notify
NotifyAccess=all NotifyAccess=all
ExecStart=/bin/sh -c "echo 'Hello from test unit' >/tmp/testfile; systemd-notify --ready; sleep infinity" ExecStart=sh -c "echo 'Hello from test unit' >/tmp/testfile; systemd-notify --ready; sleep infinity"
PrivateTmp=disconnected PrivateTmp=disconnected
EOF EOF
# Start the service # Start the service

View File

@ -69,7 +69,7 @@ EOF
# Script to check that when an OnSuccess= dependency fires, the correct # Script to check that when an OnSuccess= dependency fires, the correct
# MONITOR* env variables are passed. # MONITOR* env variables are passed.
cat >/tmp/check_on_success.sh <<"EOF" cat >/tmp/check_on_success.sh <<"EOF"
#!/bin/sh #!/usr/bin/env bash
set -ex set -ex
env | sort env | sort
@ -126,7 +126,7 @@ EOF
# Script to check that when an OnFailure= dependency fires, the correct # Script to check that when an OnFailure= dependency fires, the correct
# MONITOR* env variables are passed. # MONITOR* env variables are passed.
cat >/tmp/check_on_failure.sh <<"EOF" cat >/tmp/check_on_failure.sh <<"EOF"
#!/bin/sh #!/usr/bin/env bash
set -ex set -ex
env | sort env | sort

View File

@ -1,4 +1,4 @@
#!/usr/bin/python3 #!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later # SPDX-License-Identifier: LGPL-2.1-or-later
# pylint: disable=broad-except # pylint: disable=broad-except

View File

@ -19,6 +19,6 @@ systemd-tty-ask-password-agent --list
varlinkctl introspect /run/systemd/io.systemd.AskPassword varlinkctl introspect /run/systemd/io.systemd.AskPassword
# Spawn an agent that always replies all ask password requests with "waldo" # Spawn an agent that always replies all ask password requests with "waldo"
systemd-run -u waldo-ask-pw-agent.service -p Environment=SYSTEMD_ASK_PASSWORD_AGENT_PASSWORD=waldo -p Type=notify /usr/bin/systemd-tty-ask-password-agent --watch --console=/dev/console systemd-run -u waldo-ask-pw-agent.service -p Environment=SYSTEMD_ASK_PASSWORD_AGENT_PASSWORD=waldo -p Type=notify systemd-tty-ask-password-agent --watch --console=/dev/console
assert_eq "$(systemd-ask-password --no-tty)" "waldo" assert_eq "$(systemd-ask-password --no-tty)" "waldo"
assert_eq "$(varlinkctl call /usr/bin/systemd-ask-password io.systemd.AskPassword.Ask '{"message":"foobar"}' | jq '.passwords[0]')" "\"waldo\"" assert_eq "$(varlinkctl call /usr/bin/systemd-ask-password io.systemd.AskPassword.Ask '{"message":"foobar"}' | jq '.passwords[0]')" "\"waldo\""

View File

@ -36,7 +36,7 @@ busctl -C foobar
systemctl -C foobar systemctl -C foobar
systemd-run -C foobar -u sleepinfinity /bin/sleep infinity systemd-run -C foobar -u sleepinfinity sleep infinity
systemctl -C foobar status sleepinfinity systemctl -C foobar status sleepinfinity

Some files were not shown because too many files have changed in this diff Show More