summaryrefslogtreecommitdiff
path: root/test/test-functions
Commit message (Collapse)AuthorAgeFilesLines
* test: pass $BUILD_DIR as $COVERAGE_BUILD_DIR to the system managerFrantisek Sumsal2023-05-151-0/+5
| | | | To make additional coverage-related tweaks slightly easier.
* test: install the overlayfs/loop modules unconditionallyFrantisek Sumsal2023-05-141-4/+3
|
* test: bind mount the $BUILD_DIR into nspawn containersFrantisek Sumsal2023-05-141-0/+6
| | | | | when collecting coverage. This applies only to containers started via machinectl (or directly via the systemd-nspawn@.service unit).
* test: use dropins to override system configurationFrantisek Sumsal2023-05-141-11/+13
| | | | Instead of touching the configuration files directly.
* test: always install the script utilityFrantisek Sumsal2023-05-131-0/+1
|
* test: add a couple of tests for machinectlFrantisek Sumsal2023-05-131-0/+1
|
* test: clean up the nspawn tests a bitFrantisek Sumsal2023-05-121-2/+1
|
* test: use sed and grep instead of perlZbigniew Jędrzejewski-Szmek2023-05-091-16/+13
| | | | | | | | | | | This gets rid of the all-but-one remaining uses of perl. I tested the new code on my machine, so I'm fairly confident that it works as expected. install_iscsi() has one majestic perl invocation, but we can't get rid of it easily: it extends the code of tgt-admin to print some list of files. Obviously this only works because tgt-admin is written in perl, and perl will be installed if tgt-admin is installed. install_iscsi() is used in TEST-64-UDEV-STORAGE conditionally if tgtadm is installed, so this can stay as is.
* tree-wide: code spelling fixesFrantisek Sumsal2023-04-201-1/+1
| | | | As reported by Fossies.
* test: add a couple of tests for getty-generatorFrantisek Sumsal2023-04-141-0/+1
|
* test: drop binary stripping stuffFrantisek Sumsal2023-04-121-20/+6
| | | | | | | | Stripping the binaries in the test images makes potential stack straces quite useless, so let's drop the stripping stuff to make test fails a bit more developer friendly. Related: https://github.com/systemd/systemd-centos-ci/pull/616
* test-64: add tests for compat devlinks for NVMe driveYu Watanabe2023-04-081-0/+1
|
* test: check if we skip the full setup on daemon-reexecFrantisek Sumsal2023-04-071-1/+1
| | | | | | A simple test case for issue #27106. Resolves: #27139
* test/test-functions: fix typo in install_suse_systemd()Thomas Blume2023-04-041-1/+1
|
* Merge pull request #27087 from mrc0mmand/missing-coverageFrantisek Sumsal2023-04-011-5/+8
|\ | | | | test: set ReadWritePaths= for test-.services when built w/ coverage
| * test: set ReadWritePaths= for test-.services when built w/ coverageFrantisek Sumsal2023-03-311-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | Let's make the dropin, to make the build dir writable for gcov, a bit more generic, so it can be used by all units starting with prefix test-. This should help with a bunch of recent reports about missing coverage I got, as well as with existing test units using DynamicUser=true. This might feel a bit like a magic trick from behind the curtains, but I want to touch the actual tests as little as possible, since it makes them unnecessarily messy (see the various workarounds for sanitizers), and the coverage reports are generated only in a specific CI job anyway.
* | test: use setpriv instead of su for user switch from rootThomas Blume2023-03-311-2/+3
|/ | | | | | | | | | | | systemd-repart needs to find mkfs.ext4 for the test. This is located in the directory /usr/sbin on openSUSE Tumbleweed. But since the variable ALWAYS_SET_PATH in /etc/login.defs is set to yes, su re-initializes the $PATH variable and removes /usr/sbin. Hence, mkfs.ext4 is not found and the test fails. Using setpriv instead of su fixes this issue and is more appropriate to do the switch user task from root. [zjs: move setpriv to $BASICTOOLS and force-push to retrigger CI]
* test: do not remove state directory on failureLuca Boccassi2023-03-291-2/+2
| | | | | | | The test log is in the state directory, and we want to keep it around when a test fails. Follow-up for: 256a835f1c6c646a55039659aa2db186fbeb5c5d
* portable: add PORTABLE_NAME_AND_VERSION= and other metadata to LogsExtraFields=Luca Boccassi2023-03-281-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is useful to identify log messages with metadata from the images they run on. Look for ID/VERSION_ID/IMAGE_ID/IMAGE_VERSION/BUILD_ID, with a SYSEXT_ prefix if we are looking at an extension, and append via LogExtraFields= as respectively PORTABLE_NAME_AND_VERSION= in case of a single image. In case of extensions, append as PORTABLE_ROOT_NAME_AND_VERSION= for the base and one PORTABLE_EXTENSION_AND_VERSION= for each extension. Example with a base and two extensions, with the unit coming from the first extension: [Service] RootImage=/home/bluca/git/systemd/base.raw Environment=PORTABLE=app0.raw BindReadOnlyPaths=/etc/os-release:/run/host/os-release LogExtraFields=PORTABLE=app0.raw Environment=PORTABLE_ROOT=base.raw LogExtraFields=PORTABLE_ROOT=base.raw LogExtraFields=PORTABLE_ROOT_NAME_AND_VERSION=debian_10 ExtensionImages=/home/bluca/git/systemd/app0.raw LogExtraFields=PORTABLE_EXTENSION=app0.raw LogExtraFields=PORTABLE_EXTENSION_NAME_AND_VERSION=app_0 ExtensionImages=/home/bluca/git/systemd/app1.raw LogExtraFields=PORTABLE_EXTENSION=app1.raw LogExtraFields=PORTABLE_EXTENSION_NAME_AND_VERSION=app_1
* test: don't export $TOOLS_DIRFranck Bui2023-03-271-2/+2
| | | | It's not (and shouldn't be) used by any test scripts.
* test: clean up $STATEDIR tooFranck Bui2023-03-271-0/+1
|
* test: $STATEDIR should not point to /usr/lib/systemd/tests when NO_BUILD=1Franck Bui2023-03-271-2/+10
| | | | | | | | When testing the binaries from the host, make sure to not store the state data below /usr but use a dedicated directory in /var/tmp/ instead. The working directories of the tests, initially located in /var/tmp, are also moved in a dedicated directory /var/tmp/systemd-tests.
* Merge pull request #26870 from fbuihuu/move-unit-tests-in-a-dedicated-subdirLuca Boccassi2023-03-271-14/+4
|\ | | | | Move unit tests in a dedicated subdir
| * test: install symlinks with valid targets on SUSE and DebianFranck Bui2023-03-261-2/+2
| |
| * test: on openSUSE install the collection of unit test binaries in the target ↵Franck Bui2023-03-241-10/+1
| | | | | | | | only for TEST-02-UNITTESTS
| * test: install unit tests in a dedicated subdirectory below '$testsdir'Franck Bui2023-03-241-3/+2
| | | | | | | | | | | | | | | | | | | | | | /usr/lib/systemd/tests may contain more than the unit tests. For example on SUSE we also install the integration tests there. Putting the unit tests in a dedicated directory named 'unit-tests' makes the layout cleaner. Note that `run-unit-tests.py` has not been moved so we don't need to adjust (Fedora) packaging and users also don't need to descend into the subdirectory.
* | test: filter the merged coverage report insteadFrantisek Sumsal2023-03-251-1/+1
| | | | | | | | | | | | | | So we don't have to do this twice - once for the base report and then for each "real" one. Follow-up to 7fdd6e157a.
* | test: do an initial coverage captureFrantisek Sumsal2023-03-251-8/+25
|/ | | | | | | | | | I noticed that our coverage reports miss some files completely - this happens when the test doesn't touch the code in them at all, so the generated coverage data (and resulting reports) have no information about them. Let's fix this by doing an initial zero coverage capture that contains a zeroed counter for every instrumented line in every file, so when we later merge it with a capture from the test, it shows up with a missing coverage instead of not showing at all.
* test: wrap mkfs.*/mksquashfs/mkswap binaries when running w/ ASanFrantisek Sumsal2023-03-161-5/+7
|
* test: bump the D-Bus related timeouts to 120sFrantisek Sumsal2023-03-091-2/+2
| | | | | | | | Let's attempt to reduce the amount of flakes further when the AWS region we run in is under heavy load and the hypervisor stars stealing our CPU time. Follow-up to e0cbb73911 and c78d18215b.
* test: drop whitespace after shell redirection operatorsZbigniew Jędrzejewski-Szmek2023-02-061-2/+2
| | | | | | | | | | (The one case that is left unchanged is '< <(subcommand)'.) This way, the style with no gap was already dominant. This way, the reader immediately knows that ' < ' is a comparison operator and ' << ' is a shift. In a few cases, replace custom EOF replacement by just EOF. There is no point in using someting like "_EOL" unless "EOF" appears in the text.
* test: wrap delv & dig when running with sanitizersFrantisek Sumsal2023-01-271-1/+2
| | | | | | | | | On Arch both delv and dig pull in libnss_resolve: ``` $ grep resolve /etc/nsswitch.conf hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns ```
* test: bump the client-side timeout in sd-bus as wellFrantisek Sumsal2023-01-231-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | Since c78d18215b D-Bus services now have 60s to start, but the client side (sd-bus) still waits only for 25s before giving up: ``` [ 226.196380] testsuite-71.sh[556]: + assert_in 'Static hostname: H' '' [ 226.332965] testsuite-71.sh[576]: + set +ex [ 226.332965] testsuite-71.sh[576]: FAIL: 'Static hostname: H' not found in: [ 228.910782] sh[577]: + systemctl poweroff --no-block [ 232.255584] hostnamectl[565]: Failed to query system properties: Connection timed out [ 236.827514] systemd[1]: end.service: Consumed 2.131s CPU time. [ 237.476969] dbus-daemon[566]: [system] Successfully activated service 'org.freedesktop.hostname1' [ 237.516308] systemd[1]: system-modprobe.slice: Consumed 1.533s CPU time. [ 237.794635] systemd[1]: testsuite-71.service: Main process exited, code=exited, status=1/FAILURE [ 237.818469] systemd[1]: testsuite-71.service: Failed with result 'exit-code'. [ 237.931415] systemd[1]: Failed to start testsuite-71.service. [ 238.000833] systemd[1]: testsuite-71.service: Consumed 5.651s CPU time. [ 238.181030] systemd[1]: Reached target testsuite.target. ``` Let's override the timeout in sd-bus as well to mitigate this. Follow-up to c78d18215b3e5b0f0896ddb1d0d72c666b5e830b.
* test: bump D-Bus service start timeout if we run without accelFrantisek Sumsal2023-01-171-0/+12
| | | | | | | | | | | | | | | | | | | | | | | The default (25s) doesn't seem to be enough in some cases (especially in VMs without acceleration), causing spurious timeouts: [ 174.297658] dbus-daemon[647]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.0' (uid=0 pid=645 comm="hostnamectl " label="kernel") [ 184.202313] systemd[1]: systemd-update-utmp-runlevel.service: Consumed 1.253s CPU time. [ 197.335422] systemd[1]: Started dbus.service. [ 199.211468] testsuite-71.sh[639]: + assert_in 'Static hostname: H' '' [ 199.347192] dbus-daemon[647]: [system] Failed to activate service 'org.freedesktop.hostname1': timed out (service_start_timeout=25000ms) [ 199.394879] testsuite-71.sh[657]: + set +ex [ 199.438918] testsuite-71.sh[657]: FAIL: 'Static hostname: H' not found in: [ 200.966006] systemd-logind[631]: Watching system buttons on /dev/input/event0 (Power Button) [ 201.008178] systemd-logind[631]: Watching system buttons on /dev/input/event1 (AT Translated Set 2 keyboard) [ 201.034106] systemd-logind[631]: New seat seat0. [ 201.238267] sh[658]: + systemctl poweroff --no-block [ 201.329890] systemd[1]: Starting systemd-hostnamed.service... [ 202.156622] systemd[1]: systemd-update-utmp-runlevel.service: Deactivated successfully. [ 204.818913] hostnamectl[645]: Failed to query system properties: Connection timed out [ 205.195583] systemd[1]: testsuite-71.service: Main process exited, code=exited, status=1/FAILURE [ 205.227237] systemd[1]: testsuite-71.service: Failed with result 'exit-code'. [ 205.712780] systemd[1]: Failed to start testsuite-71.service.
* p11kit: switch to dlopen()Luca Boccassi2022-12-191-1/+5
|
* TEST-65: check cat-config operation in chrootZbigniew Jędrzejewski-Szmek2022-12-071-0/+1
| | | | This verifies the fix in 2075b6dd394e09a0f203b9cc7e3253908397f933.
* test: double default image sizeLuca Boccassi2022-12-051-1/+1
| | | | I am now hitting the 500MB limit on Debian stable.
* Merge pull request #25389 from fbuihuu/update-test-for-opensuseYu Watanabe2022-11-191-10/+20
|\ | | | | Update test/ for openSUSE
| * tests: update install_suse_systemd()Franck Bui2022-11-181-10/+15
| | | | | | | | | | | | | | | | | | | | - Use inst_recursive() and image_install() helpers where appropriate - Update comments to explain why we need to install the test data manually in $initdir - Install manual/ in $initdir as TEST-35-LOGIN relies on manual/test-session-properties
| * tests: install dmi-sysfs module on openSUSEFranck Bui2022-11-151-0/+2
| | | | | | | | Required by TEST-54-CREDS.
| * tests: install systemd-resolved on openSUSEFranck Bui2022-11-151-1/+4
| | | | | | | | | | It's needed since systemd-resolved has its own test suite (commit fb6f25d7b979134adf57).
* | mkfs-util: Add support to populate vfat without mounting using mcopyDaan De Meyer2022-11-151-0/+5
| | | | | | | | | | | | | | | | mkfs.vfat doesn't support specifying a root directory to bootstrap the filesystem from (see https://github.com/dosfstools/dosfstools/issues/183). Instead, we can use the mcopy tool from the mtools package to copy files into the vfat filesystem after creating it without needing to mount the vfat filesystem.
* | repart: Add Minimize= integration testDaan De Meyer2022-11-141-0/+3
|/
* test: install realpath into the test imagesFrantisek Sumsal2022-11-081-0/+1
|
* test: fix keymaps installation on ArchFrantisek Sumsal2022-11-071-12/+13
| | | | Where the keymaps live under /usr/share/kbd/keymaps/.
* test: fix locale installation when locale-gen is usedFrantisek Sumsal2022-11-071-7/+12
| | | | | locale-gen might merge all compiled locales into a simple archive, so we need to install it as well if necessary.
* test: don't ignore non-existent paths in inst_recursive()Frantisek Sumsal2022-11-071-0/+4
| | | | | The process substitution in the while loop hides errors raised by the find utility, which might (and did), in turn, hide errors in test setup.
* tests: add nspawn's rootidmap integration testQuentin Deslandes2022-10-171-2/+2
| | | | | Add integration test to testsuite-13.sh to ensure rootidmap option map user IDs as expected.
* test: disable LSan in the ASan env wrapperFrantisek Sumsal2022-10-121-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This wrapper is used in situations where we don't care about *San reports, we just want to make things work. However, with enabled LSan we might trigger some bogus reports we're definitely not interested in, causing unexpected test fails. Spotted on C8S in TEST-34-DYNAMICUSERMIGRATE: ``` [10654.804162] testsuite-34.sh[56]: + systemctl start testservice-34-check-writable.service Starting testservice-34-check-writable.service... [10655.055969] bash[546]: + set -o pipefail [10655.056127] bash[546]: + declare -a writable_dirs [10655.056234] bash[546]: + readarray -t writable_dirs [10655.060838] bash[548]: ++ find / '(' -path /var/tmp -o -path /tmp -o -path /proc -o -path /dev/mqueue -o -path /dev/shm -o -path /sys/fs/bpf -o -path /dev/.lxc -o -path /sys/devices/system/cpu ')' -prune -o -type d -writable -print [10655.061534] bash[549]: ++ sort -u [10655.688740] bash[547]: ================================================================= [10655.689075] bash[547]: ==547==ERROR: LeakSanitizer: detected memory leaks [10655.689246] bash[547]: Direct leak of 112 byte(s) in 1 object(s) allocated from: [10655.743851] bash[547]: #0 0x7ffff752d364 (/usr/lib64/clang/14.0.0/lib/libclang_rt.asan-powerpc64le.so+0x13d364) (BuildId: 321f4ed1caea6a1a4c37f9272e07275cf16f034d) [10655.744060] bash[547]: #1 0x1000b5d20 in xmalloc (/usr/bin/bash+0xb5d20) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.744224] bash[547]: #2 0x100083338 (/usr/bin/bash+0x83338) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.744393] bash[547]: #3 0x10008847c (/usr/bin/bash+0x8847c) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.744552] bash[547]: #4 0x1000af6ec in redirection_expand (/usr/bin/bash+0xaf6ec) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.744728] bash[547]: #5 0x1000b005c (/usr/bin/bash+0xb005c) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.744886] bash[547]: #6 0x1000b1388 in do_redirections (/usr/bin/bash+0xb1388) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745051] bash[547]: #7 0x100050484 (/usr/bin/bash+0x50484) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745208] bash[547]: #8 0x100052160 in execute_command_internal (/usr/bin/bash+0x52160) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745376] bash[547]: #9 0x100052a10 in execute_command_internal (/usr/bin/bash+0x52a10) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745536] bash[547]: #10 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745711] bash[547]: #11 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.745870] bash[547]: #12 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746038] bash[547]: #13 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746198] bash[547]: #14 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746367] bash[547]: #15 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746548] bash[547]: #16 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746741] bash[547]: #17 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.746897] bash[547]: #18 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747067] bash[547]: #19 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747227] bash[547]: #20 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747414] bash[547]: #21 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747573] bash[547]: #22 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747741] bash[547]: #23 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.747896] bash[547]: #24 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748064] bash[547]: #25 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748225] bash[547]: #26 0x100053e38 in execute_command (/usr/bin/bash+0x53e38) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748390] bash[547]: #27 0x1000529d8 in execute_command_internal (/usr/bin/bash+0x529d8) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748553] bash[547]: #28 0x1000bf91c in parse_and_execute (/usr/bin/bash+0xbf91c) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748717] bash[547]: #29 0x1000311ec (/usr/bin/bash+0x311ec) (BuildId: da38eb38f6870bdc2a6ef51c52aa6ce20921fe40) [10655.748883] bash[547]: Direct leak of 17 byte(s) in 1 object(s) allocated from: ... ```
* test: configure ldconfig's cache in the minimal verity imagesFrantisek Sumsal2022-10-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The glibc stuff on ppc64le C8S is a little bit wild, as there are two versions: ``` $ ldconfig -p | grep libc.so libc.so.6 (libc6,64bit, hwcap: "power9", OS ABI: Linux 3.10.0) => /lib64/glibc-hwcaps/power9/libc-2.28.so libc.so.6 (libc6,64bit, OS ABI: Linux 3.10.0) => /lib64/libc.so.6 ``` and with `/etc/ld.so.cache` present all binaries use the first one: ``` $ ldd /bin/cat linux-vdso64.so.1 (0x00007fffa8070000) libc.so.6 => /lib64/glibc-hwcaps/power9/libc-2.28.so (0x00007fffa7e20000) /lib64/ld64.so.2 (0x00007fffa8090000) ``` However, without the cache the binaries will fall back to `/lib64/libc.so.6` which breaks tests that use the minimal verity images (like TEST-29), because we install only the first version (that's shown by `ldd` at the time the images are created): ``` [ 91.595343] testsuite-29.sh[747]: + portablectl --profile=trusted attach --now --runtime /usr/share/minimal_0.raw minimal-app0 Starting systemd-portabled.service... [ OK ] Started systemd-portabled.service. Starting minimal-app0-foo.service... Starting minimal-app0.service... [ 104.432217] cat[858]: cat: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory [ 104.435080] cat[857]: cat: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory [FAILED] Failed to start minimal-app0.service. See 'systemctl status minimal-app0.service' for details. ``` ``` $ chroot /var/tmp/systemd-test.nMHPfc/minimal/ /bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory ``` With the ldconfig's cache it seems to work as expected: ``` $ chroot /var/tmp/systemd-test.gVtYLg/minimal bash-4.4# cat --version cat (GNU coreutils) 8.30 ... ```