From aeb516c741a1156a66acafa14322b47c63cfd709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Tue, 5 Jul 2016 23:40:35 +0200 Subject: [PATCH] nixos/grub: change state file device separator from ':' to ',' ':' is currently used as separator in /boot/grub/state for the list of devices GRUB should be installed to. The problem is that ':' itself may appear in a device path: /dev/disk/by-id/usb-SanDisk_Cruzer_20043512300546C0B317-0:0 With such a path, NixOS will install GRUB *every* time, because it thinks the configuration differs from the state file (due to the wrong list split). Fix it by using ',' as separator. For existing systems with GRUB installed on multiple devices, this change means that GRUB will be installed one extra time. --- nixos/modules/system/boot/loader/grub/install-grub.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl index b8ef02da4bc2..94d87b436065 100644 --- a/nixos/modules/system/boot/loader/grub/install-grub.pl +++ b/nixos/modules/system/boot/loader/grub/install-grub.pl @@ -501,7 +501,7 @@ sub getEfiTarget { my @deviceTargets = getDeviceTargets(); my $efiTarget = getEfiTarget(); my $prevGrubState = readGrubState(); -my @prevDeviceTargets = split/:/, $prevGrubState->devices; +my @prevDeviceTargets = split/,/, $prevGrubState->devices; my $devicesDiffer = scalar (List::Compare->new( '-u', '-a', \@deviceTargets, \@prevDeviceTargets)->get_symmetric_difference()); my $nameDiffer = get("fullName") ne $prevGrubState->name; @@ -549,7 +549,7 @@ if ($requireNewInstall != 0) { print FILE get("fullName"), "\n" or die; print FILE get("fullVersion"), "\n" or die; print FILE $efiTarget, "\n" or die; - print FILE join( ":", @deviceTargets ), "\n" or die; + print FILE join( ",", @deviceTargets ), "\n" or die; print FILE $efiSysMountPoint, "\n" or die; close FILE or die; }