From 7098b0fcdfd7fa4b82c036d8116b60b78f497316 Mon Sep 17 00:00:00 2001 From: Michael Weiss Date: Fri, 11 May 2018 19:13:10 +0200 Subject: nixos/switch-to-configuration: Never stop system.slice Problem: Restarting (stopping) system.slice would not only stop X11 but also most system units/services. We obviously don't want this happening to users when they switch from 18.03 to 18.09 or nixos-unstable. Reason: The following change in systemd: https://github.com/systemd/systemd/commit/d8e5a9338278d6602a0c552f01f298771a384798 The commit adds system.slice to the perpetual units, which means removing the unit file and adding it to the source code. This is done so that system.slice can't be stopped anymore but in our case it ironically would cause this script to stop system.slice because the unit file was removed (and an older systemd version is still running). Related issue: https://github.com/NixOS/nixpkgs/issues/39791 --- .../system/activation/switch-to-configuration.pl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'nixos') diff --git a/nixos/modules/system/activation/switch-to-configuration.pl b/nixos/modules/system/activation/switch-to-configuration.pl index 2ce04ed5342..ecd35767e01 100644 --- a/nixos/modules/system/activation/switch-to-configuration.pl +++ b/nixos/modules/system/activation/switch-to-configuration.pl @@ -166,6 +166,24 @@ while (my ($unit, $state) = each %{$activePrev}) { if (-e $prevUnitFile && ($state->{state} eq "active" || $state->{state} eq "activating")) { if (! -e $newUnitFile || abs_path($newUnitFile) eq "/dev/null") { + # Ignore (i.e. never stop) these units: + if ($unit eq "system.slice") { + # TODO: This can be removed a few months after 18.09 is out + # (i.e. after everyone switched away from 18.03). + # Problem: Restarting (stopping) system.slice would not only + # stop X11 but also most system units/services. We obviously + # don't want this happening to users when they switch from 18.03 + # to 18.09 or nixos-unstable. + # Reason: The following change in systemd: + # https://github.com/systemd/systemd/commit/d8e5a9338278d6602a0c552f01f298771a384798 + # The commit adds system.slice to the perpetual units, which + # means removing the unit file and adding it to the source code. + # This is done so that system.slice can't be stopped anymore but + # in our case it ironically would cause this script to stop + # system.slice because the unit was removed (and an older + # systemd version is still running). + next; + } my $unitInfo = parseUnit($prevUnitFile); $unitsToStop{$unit} = 1 if boolIsTrue($unitInfo->{'X-StopOnRemoval'} // "yes"); } -- cgit 1.4.1