From 5d7723dd5ba1ee02595f03554acc139b627b3834 Mon Sep 17 00:00:00 2001 From: Janne Heß Date: Fri, 29 Sep 2023 19:46:10 +0200 Subject: nixos/switch-to-configuration: Lock the switch This prevents any concurrent switches from happening which is not an issue I have seen people complaining about but it seems like a good measure. --- nixos/modules/system/activation/switch-to-configuration.pl | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'nixos/modules') diff --git a/nixos/modules/system/activation/switch-to-configuration.pl b/nixos/modules/system/activation/switch-to-configuration.pl index e05f89bb0fb..31b24f85528 100755 --- a/nixos/modules/system/activation/switch-to-configuration.pl +++ b/nixos/modules/system/activation/switch-to-configuration.pl @@ -22,6 +22,7 @@ use JSON::PP; use IPC::Cmd; use Sys::Syslog qw(:standard :macros); use Cwd qw(abs_path); +use Fcntl ':flock'; ## no critic(ControlStructures::ProhibitDeepNests) ## no critic(ErrorHandling::RequireCarping) @@ -91,6 +92,8 @@ if (!-f "/etc/NIXOS" && (read_file("/etc/os-release", err_mode => "quiet") // "" } make_path("/run/nixos", { mode => oct(755) }); +open(my $stc_lock, '>>', '/run/nixos/switch-to-configuration.lock') or die "Could not open lock - $!"; +flock($stc_lock, LOCK_EX) or die "Could not acquire lock - $!"; openlog("nixos", "", LOG_USER); # Install or update the bootloader. @@ -983,4 +986,5 @@ if ($res == 0) { syslog(LOG_ERR, "switching to system configuration $toplevel failed (status $res)"); } +close($stc_lock) or die "Could not close lock - $!"; exit($res); -- cgit 1.4.1