# Regression test for systemd-timesync having moved the state directory without # upstream providing a migration path. https://github.com/systemd/systemd/issues/12131 import ./make-test.nix (let common = { lib, ... }: { # override the `false` value from the qemu-vm base profile services.timesyncd.enable = lib.mkForce true; }; mkVM = conf: { imports = [ conf common ]; }; in { name = "systemd-timesyncd"; nodes = { current = mkVM {}; pre1909 = mkVM ({lib, ... }: with lib; { # create the path that should be migrated by our activation script when # upgrading to a newer nixos version system.stateVersion = "19.03"; system.activationScripts.simulate-old-timesync-state-dir = mkBefore '' rm -f /var/lib/systemd/timesync mkdir -p /var/lib/systemd /var/lib/private/systemd/timesync ln -s /var/lib/private/systemd/timesync /var/lib/systemd/timesync chown systemd-timesync: /var/lib/private/systemd/timesync ''; }); }; testScript = '' startAll; $current->succeed('systemctl status systemd-timesyncd.service'); # on a new install with a recent systemd there should not be any # leftovers from the dynamic user mess $current->succeed('test -e /var/lib/systemd/timesync'); $current->succeed('test ! -L /var/lib/systemd/timesync'); # timesyncd should be running on the upgrading system since we fixed the # file bits in the activation script $pre1909->succeed('systemctl status systemd-timesyncd.service'); # the path should be gone after the migration $pre1909->succeed('test ! -e /var/lib/private/systemd/timesync'); # and the new path should no longer be a symlink $pre1909->succeed('test -e /var/lib/systemd/timesync'); $pre1909->succeed('test ! -L /var/lib/systemd/timesync'); # after a restart things should still work and not fail in the activation # scripts and cause the boot to fail.. $pre1909->shutdown; $pre1909->start; $pre1909->succeed('systemctl status systemd-timesyncd.service'); ''; })