2020-01-22 06:45:01 +01:00
|
|
|
import ./make-test-python.nix ({ pkgs, ... }: {
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
name = "systemd";
|
|
|
|
|
2022-03-21 00:15:30 +01:00
|
|
|
nodes.machine = { lib, ... }: {
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
imports = [ common/user-account.nix common/x11.nix ];
|
|
|
|
|
2020-08-05 01:34:12 +02:00
|
|
|
virtualisation.emptyDiskImages = [ 512 512 ];
|
|
|
|
|
|
|
|
environment.systemPackages = [ pkgs.cryptsetup ];
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
|
2021-02-14 12:23:50 +01:00
|
|
|
virtualisation.fileSystems = {
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
"/test-x-initrd-mount" = {
|
|
|
|
device = "/dev/vdb";
|
|
|
|
fsType = "ext2";
|
|
|
|
autoFormat = true;
|
|
|
|
noCheck = true;
|
|
|
|
options = [ "x-initrd.mount" ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
systemd.extraConfig = "DefaultEnvironment=\"XXX_SYSTEM=foo\"";
|
|
|
|
systemd.user.extraConfig = "DefaultEnvironment=\"XXX_USER=bar\"";
|
|
|
|
services.journald.extraConfig = "Storage=volatile";
|
2020-01-26 23:41:19 +01:00
|
|
|
test-support.displayManager.auto.user = "alice";
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
|
2019-07-25 20:50:02 +02:00
|
|
|
systemd.shutdown.test = pkgs.writeScript "test.shutdown" ''
|
2020-04-07 08:25:48 +02:00
|
|
|
#!${pkgs.runtimeShell}
|
2020-11-24 16:29:28 +01:00
|
|
|
PATH=${lib.makeBinPath (with pkgs; [ util-linux coreutils ])}
|
2019-07-25 20:50:02 +02:00
|
|
|
mount -t 9p shared -o trans=virtio,version=9p2000.L /tmp/shared
|
|
|
|
touch /tmp/shared/shutdown-test
|
|
|
|
umount /tmp/shared
|
|
|
|
'';
|
|
|
|
|
2021-12-16 04:09:07 +01:00
|
|
|
systemd.services.oncalendar-test = {
|
|
|
|
description = "calendar test";
|
|
|
|
# Japan does not have DST which makes the test a little bit simpler
|
|
|
|
startAt = "Wed 10:00 Asia/Tokyo";
|
|
|
|
script = "true";
|
|
|
|
};
|
|
|
|
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
systemd.services.testservice1 = {
|
|
|
|
description = "Test Service 1";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
|
|
serviceConfig.Type = "oneshot";
|
|
|
|
script = ''
|
|
|
|
if [ "$XXX_SYSTEM" = foo ]; then
|
|
|
|
touch /system_conf_read
|
|
|
|
fi
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
systemd.user.services.testservice2 = {
|
|
|
|
description = "Test Service 2";
|
|
|
|
wantedBy = [ "default.target" ];
|
|
|
|
serviceConfig.Type = "oneshot";
|
|
|
|
script = ''
|
|
|
|
if [ "$XXX_USER" = bar ]; then
|
|
|
|
touch "$HOME/user_conf_read"
|
|
|
|
fi
|
|
|
|
'';
|
|
|
|
};
|
2020-07-09 03:43:12 +02:00
|
|
|
|
|
|
|
systemd.watchdog = {
|
|
|
|
device = "/dev/watchdog";
|
|
|
|
runtimeTime = "30s";
|
|
|
|
rebootTime = "10min";
|
|
|
|
kexecTime = "5min";
|
|
|
|
};
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
2020-01-22 06:45:01 +01:00
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
|
|
|
|
machine.wait_for_x()
|
2018-04-16 00:43:33 +02:00
|
|
|
# wait for user services
|
2020-01-22 06:45:01 +01:00
|
|
|
machine.wait_for_unit("default.target", "alice")
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
|
2023-09-28 16:27:53 +02:00
|
|
|
with subtest("systemctl edit suggests --runtime"):
|
|
|
|
# --runtime is suggested when using `systemctl edit`
|
|
|
|
ret, out = machine.execute("systemctl edit testservice1.service 2>&1")
|
|
|
|
assert ret == 1
|
|
|
|
assert out.rstrip("\n") == "The unit-directory '/etc/systemd/system' is read-only on NixOS, so it's not possible to edit system-units directly. Use 'systemctl edit --runtime' instead."
|
|
|
|
# editing w/o `--runtime` is possible for user-services, however
|
|
|
|
# it's not possible because we're not in a tty when grepping
|
|
|
|
# (i.e. hacky way to ensure that the error from above doesn't appear here).
|
|
|
|
_, out = machine.execute("systemctl --user edit testservice2.service 2>&1")
|
|
|
|
assert out.rstrip("\n") == "Cannot edit units if not on a tty."
|
|
|
|
|
2021-12-16 04:09:07 +01:00
|
|
|
# Regression test for https://github.com/NixOS/nixpkgs/issues/105049
|
|
|
|
with subtest("systemd reads timezone database in /etc/zoneinfo"):
|
|
|
|
timer = machine.succeed("TZ=UTC systemctl show --property=TimersCalendar oncalendar-test.timer")
|
|
|
|
assert re.search("next_elapse=Wed ....-..-.. 01:00:00 UTC", timer), f"got {timer.strip()}"
|
|
|
|
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
# Regression test for https://github.com/NixOS/nixpkgs/issues/35415
|
2020-01-22 06:45:01 +01:00
|
|
|
with subtest("configuration files are recognized by systemd"):
|
|
|
|
machine.succeed("test -e /system_conf_read")
|
|
|
|
machine.succeed("test -e /home/alice/user_conf_read")
|
|
|
|
machine.succeed("test -z $(ls -1 /var/log/journal)")
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
|
2020-11-19 01:59:07 +01:00
|
|
|
with subtest("regression test for https://bugs.freedesktop.org/show_bug.cgi?id=77507"):
|
|
|
|
retcode, output = machine.execute("systemctl status testservice1.service")
|
|
|
|
assert retcode in [0, 3] # https://bugs.freedesktop.org/show_bug.cgi?id=77507
|
|
|
|
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
# Regression test for https://github.com/NixOS/nixpkgs/issues/35268
|
2020-01-22 06:45:01 +01:00
|
|
|
with subtest("file system with x-initrd.mount is not unmounted"):
|
|
|
|
machine.succeed("mountpoint -q /test-x-initrd-mount")
|
|
|
|
machine.shutdown()
|
2019-07-25 20:50:02 +02:00
|
|
|
|
2020-01-22 06:45:01 +01:00
|
|
|
subprocess.check_call(
|
|
|
|
[
|
|
|
|
"qemu-img",
|
|
|
|
"convert",
|
|
|
|
"-O",
|
|
|
|
"raw",
|
|
|
|
"vm-state-machine/empty0.qcow2",
|
|
|
|
"x-initrd-mount.raw",
|
|
|
|
]
|
|
|
|
)
|
|
|
|
extinfo = subprocess.check_output(
|
|
|
|
[
|
|
|
|
"${pkgs.e2fsprogs}/bin/dumpe2fs",
|
|
|
|
"x-initrd-mount.raw",
|
|
|
|
]
|
|
|
|
).decode("utf-8")
|
|
|
|
assert (
|
|
|
|
re.search(r"^Filesystem state: *clean$", extinfo, re.MULTILINE) is not None
|
|
|
|
), ("File system was not cleanly unmounted: " + extinfo)
|
|
|
|
|
2020-06-21 16:25:50 +02:00
|
|
|
# Regression test for https://github.com/NixOS/nixpkgs/pull/91232
|
|
|
|
with subtest("setting transient hostnames works"):
|
|
|
|
machine.succeed("hostnamectl set-hostname --transient machine-transient")
|
|
|
|
machine.fail("hostnamectl set-hostname machine-all")
|
|
|
|
|
2020-01-22 06:45:01 +01:00
|
|
|
with subtest("systemd-shutdown works"):
|
|
|
|
machine.shutdown()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
machine.succeed("test -e /tmp/shared/shutdown-test")
|
|
|
|
|
|
|
|
# Test settings from /etc/sysctl.d/50-default.conf are applied
|
|
|
|
with subtest("systemd sysctl settings are applied"):
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
assert "fq_codel" in machine.succeed("sysctl net.core.default_qdisc")
|
|
|
|
|
2020-07-09 03:43:12 +02:00
|
|
|
# Test systemd is configured to manage a watchdog
|
|
|
|
with subtest("systemd manages hardware watchdog"):
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
# It seems that the device's path doesn't appear in 'systemctl show' so
|
|
|
|
# check it separately.
|
|
|
|
assert "WatchdogDevice=/dev/watchdog" in machine.succeed(
|
|
|
|
"cat /etc/systemd/system.conf"
|
|
|
|
)
|
|
|
|
|
|
|
|
output = machine.succeed("systemctl show | grep Watchdog")
|
2020-08-24 12:40:02 +02:00
|
|
|
# assert "RuntimeWatchdogUSec=30s" in output
|
|
|
|
# for some reason RuntimeWatchdogUSec, doesn't seem to be updated in here.
|
2020-08-13 20:49:43 +02:00
|
|
|
assert "RebootWatchdogUSec=10min" in output
|
|
|
|
assert "KExecWatchdogUSec=5min" in output
|
2020-08-05 01:34:12 +02:00
|
|
|
|
|
|
|
# Test systemd cryptsetup support
|
|
|
|
with subtest("systemd successfully reads /etc/crypttab and unlocks volumes"):
|
|
|
|
# create a luks volume and put a filesystem on it
|
|
|
|
machine.succeed(
|
|
|
|
"echo -n supersecret | cryptsetup luksFormat -q /dev/vdc -",
|
|
|
|
"echo -n supersecret | cryptsetup luksOpen --key-file - /dev/vdc foo",
|
|
|
|
"mkfs.ext3 /dev/mapper/foo",
|
|
|
|
)
|
|
|
|
|
|
|
|
# create a keyfile and /etc/crypttab
|
|
|
|
machine.succeed("echo -n supersecret > /var/lib/luks-keyfile")
|
|
|
|
machine.succeed("chmod 600 /var/lib/luks-keyfile")
|
|
|
|
machine.succeed("echo 'luks1 /dev/vdc /var/lib/luks-keyfile luks' > /etc/crypttab")
|
|
|
|
|
|
|
|
# after a reboot, systemd should unlock the volume and we should be able to mount it
|
|
|
|
machine.shutdown()
|
|
|
|
machine.succeed("systemctl status systemd-cryptsetup@luks1.service")
|
|
|
|
machine.succeed("mkdir -p /tmp/luks1")
|
|
|
|
machine.succeed("mount /dev/mapper/luks1 /tmp/luks1")
|
2020-11-19 01:59:07 +01:00
|
|
|
|
|
|
|
# Do some IP traffic
|
|
|
|
output_ping = machine.succeed(
|
2023-09-07 04:27:20 +02:00
|
|
|
"systemd-run --wait -- ping -c 1 127.0.0.1 2>&1"
|
2020-11-19 01:59:07 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
with subtest("systemd reports accounting data on system.slice"):
|
|
|
|
output = machine.succeed("systemctl status system.slice")
|
|
|
|
assert "CPU:" in output
|
|
|
|
assert "Memory:" in output
|
|
|
|
|
|
|
|
assert "IP:" in output
|
|
|
|
assert "0B in, 0B out" not in output
|
|
|
|
|
|
|
|
assert "IO:" in output
|
|
|
|
assert "0B read, 0B written" not in output
|
|
|
|
|
|
|
|
with subtest("systemd per-unit accounting works"):
|
|
|
|
assert "IP traffic received: 84B" in output_ping
|
|
|
|
assert "IP traffic sent: 84B" in output_ping
|
2022-03-23 15:56:23 +01:00
|
|
|
|
|
|
|
with subtest("systemd environment is properly set"):
|
|
|
|
machine.systemctl("daemon-reexec") # Rewrites /proc/1/environ
|
|
|
|
machine.succeed("grep -q TZDIR=/etc/zoneinfo /proc/1/environ")
|
systemd: Update to latest NixOS branch
Updated to the latest version of the nixos-v237 branch, which fixes two
things:
* Make sure that systemd looks in /etc for configuration files.
https://github.com/NixOS/systemd/pull/15
* Fix handling of the x-initrd.mount option.
https://github.com/NixOS/systemd/pull/16
I've added NixOS VM tests for both to ensure we won't run into
regressions. The newly added systemd test only tests for that and is by
no means exhaustive, but it's a start.
Personally I only wanted to fix the former issue, because that's the one
I've been debugging. After sending in a pull request for our systemd
fork (https://github.com/NixOS/systemd/pull/17) I got a notice from
@Mic92, that he already fixed this and his fix was even better as it's
even suitable for upstream (so we hopefully can drop that patch
someday).
The reason why the second one came in was simply because it has been
merged before the former, but I thought it would be a good idea to have
tests for that as well.
In addition I've removed the sysconfdir=$out/etc entry to make sure the
default (/etc) is used. Installing is still done to $out, because those
directories that were previously into sysconfdir now get into
factoryconfdir.
Quote from commit NixOS/systemd@98067cc806ae0d2759cdd2334f230cd8548e531:
By default systemd should read all its configuration from /etc.
Therefore we rely on -Dsysconfdir=/etc in meson as default value.
Unfortunately this would also lead to installation of systemd's own
configuration files to `/etc` whereas we are limited to /nix/store. To
counter that this commit introduces two new configuration variables
`factoryconfdir` and `factorypkgconfdir` to install systemd's own
configuration into nix store again, while having executables looking
up files in /etc.
Tested this change against all of the NixOS VM tests we have in
nixos/release.nix. Between this change and its parent no new tests were
failing (although a lot of them were flaky).
Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Mic92, @tk-ecotelecom, @edolstra, @fpletz
Fixes: #35415
Fixes: #35268
2018-03-03 07:10:22 +01:00
|
|
|
'';
|
2019-07-25 20:50:02 +02:00
|
|
|
})
|