about summary refs log tree commit diff
path: root/nixos/modules/system/activation
diff options
context:
space:
mode:
authorMichael Weiss <dev.primeos@gmail.com>2018-05-11 19:13:10 +0200
committerMichael Weiss <dev.primeos@gmail.com>2018-07-17 19:37:36 +0200
commit7098b0fcdfd7fa4b82c036d8116b60b78f497316 (patch)
treeb8a0d99f64dfb1a2a7b06e8a8f4e8f03ebd630fa /nixos/modules/system/activation
parentffaf902ee34d1c85b98903f1bcc9c573f145fd13 (diff)
downloadnixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar.gz
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar.bz2
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar.lz
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar.xz
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.tar.zst
nixlib-7098b0fcdfd7fa4b82c036d8116b60b78f497316.zip
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
Diffstat (limited to 'nixos/modules/system/activation')
-rw-r--r--nixos/modules/system/activation/switch-to-configuration.pl18
1 files changed, 18 insertions, 0 deletions
diff --git a/nixos/modules/system/activation/switch-to-configuration.pl b/nixos/modules/system/activation/switch-to-configuration.pl
index 2ce04ed5342c..ecd35767e01d 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");
         }