mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-27 05:43:50 +03:00
grub module: fix useOSProber when installing grub as EFI
This commit is contained in:
parent
29a2978fdf
commit
a6665adde8
@ -443,9 +443,40 @@ my $confFile = $grubVersion == 1 ? "$bootPath/grub/menu.lst" : "$bootPath/grub/g
|
|||||||
my $tmpFile = $confFile . ".tmp";
|
my $tmpFile = $confFile . ".tmp";
|
||||||
writeFile($tmpFile, $conf);
|
writeFile($tmpFile, $conf);
|
||||||
|
|
||||||
|
|
||||||
|
# check whether to install GRUB EFI or not
|
||||||
|
sub getEfiTarget {
|
||||||
|
if ($grubVersion == 1) {
|
||||||
|
return "no"
|
||||||
|
} elsif (($grub ne "") && ($grubEfi ne "")) {
|
||||||
|
# EFI can only be installed when target is set;
|
||||||
|
# A target is also required then for non-EFI grub
|
||||||
|
if (($grubTarget eq "") || ($grubTargetEfi eq "")) { die }
|
||||||
|
else { return "both" }
|
||||||
|
} elsif (($grub ne "") && ($grubEfi eq "")) {
|
||||||
|
# TODO: It would be safer to disallow non-EFI grub installation if no taget is given.
|
||||||
|
# If no target is given, then grub auto-detects the target which can lead to errors.
|
||||||
|
# E.g. it seems as if grub would auto-detect a EFI target based on the availability
|
||||||
|
# of a EFI partition.
|
||||||
|
# However, it seems as auto-detection is currently relied on for non-x86_64 and non-i386
|
||||||
|
# architectures in NixOS. That would have to be fixed in the nixos modules first.
|
||||||
|
return "no"
|
||||||
|
} elsif (($grub eq "") && ($grubEfi ne "")) {
|
||||||
|
# EFI can only be installed when target is set;
|
||||||
|
if ($grubTargetEfi eq "") { die }
|
||||||
|
else {return "only" }
|
||||||
|
} else {
|
||||||
|
# prevent an installation if neither grub nor grubEfi is given
|
||||||
|
return "neither"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $efiTarget = getEfiTarget();
|
||||||
|
|
||||||
# Append entries detected by os-prober
|
# Append entries detected by os-prober
|
||||||
if (get("useOSProber") eq "true") {
|
if (get("useOSProber") eq "true") {
|
||||||
system(get("shell"), "-c", "pkgdatadir=$grub/share/grub $grub/etc/grub.d/30_os-prober >> $tmpFile");
|
my $targetpackage = ($efiTarget eq "no") ? $grub : $grubEfi;
|
||||||
|
system(get("shell"), "-c", "pkgdatadir=$targetpackage/share/grub $targetpackage/etc/grub.d/30_os-prober >> $tmpFile");
|
||||||
}
|
}
|
||||||
|
|
||||||
# Atomically switch to the new config
|
# Atomically switch to the new config
|
||||||
@ -498,36 +529,7 @@ sub getDeviceTargets {
|
|||||||
}
|
}
|
||||||
return @devices;
|
return @devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
# check whether to install GRUB EFI or not
|
|
||||||
sub getEfiTarget {
|
|
||||||
if ($grubVersion == 1) {
|
|
||||||
return "no"
|
|
||||||
} elsif (($grub ne "") && ($grubEfi ne "")) {
|
|
||||||
# EFI can only be installed when target is set;
|
|
||||||
# A target is also required then for non-EFI grub
|
|
||||||
if (($grubTarget eq "") || ($grubTargetEfi eq "")) { die }
|
|
||||||
else { return "both" }
|
|
||||||
} elsif (($grub ne "") && ($grubEfi eq "")) {
|
|
||||||
# TODO: It would be safer to disallow non-EFI grub installation if no taget is given.
|
|
||||||
# If no target is given, then grub auto-detects the target which can lead to errors.
|
|
||||||
# E.g. it seems as if grub would auto-detect a EFI target based on the availability
|
|
||||||
# of a EFI partition.
|
|
||||||
# However, it seems as auto-detection is currently relied on for non-x86_64 and non-i386
|
|
||||||
# architectures in NixOS. That would have to be fixed in the nixos modules first.
|
|
||||||
return "no"
|
|
||||||
} elsif (($grub eq "") && ($grubEfi ne "")) {
|
|
||||||
# EFI can only be installed when target is set;
|
|
||||||
if ($grubTargetEfi eq "") { die }
|
|
||||||
else {return "only" }
|
|
||||||
} else {
|
|
||||||
# prevent an installation if neither grub nor grubEfi is given
|
|
||||||
return "neither"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
my @deviceTargets = getDeviceTargets();
|
my @deviceTargets = getDeviceTargets();
|
||||||
my $efiTarget = getEfiTarget();
|
|
||||||
my $prevGrubState = readGrubState();
|
my $prevGrubState = readGrubState();
|
||||||
my @prevDeviceTargets = split/,/, $prevGrubState->devices;
|
my @prevDeviceTargets = split/,/, $prevGrubState->devices;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user