mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 06:00:33 +03:00
grub installation: integrate trustedGRUB + fix broken equality check
This commit is contained in:
parent
d7869f46ca
commit
65cbbc75b0
2 changed files with 39 additions and 7 deletions
|
@ -433,15 +433,18 @@ foreach my $fn (glob "$bootPath/kernels/*") {
|
|||
#
|
||||
|
||||
struct(GrubState => {
|
||||
name => '$',
|
||||
version => '$',
|
||||
efi => '$',
|
||||
devices => '$',
|
||||
efiMountPoint => '$',
|
||||
});
|
||||
sub readGrubState {
|
||||
my $defaultGrubState = GrubState->new(version => "", efi => "", devices => "", efiMountPoint => "" );
|
||||
my $defaultGrubState = GrubState->new(name => "", version => "", efi => "", devices => "", efiMountPoint => "" );
|
||||
open FILE, "<$bootPath/grub/state" or return $defaultGrubState;
|
||||
local $/ = "\n";
|
||||
my $name = <FILE>;
|
||||
chomp($name);
|
||||
my $version = <FILE>;
|
||||
chomp($version);
|
||||
my $efi = <FILE>;
|
||||
|
@ -451,7 +454,7 @@ sub readGrubState {
|
|||
my $efiMountPoint = <FILE>;
|
||||
chomp($efiMountPoint);
|
||||
close FILE;
|
||||
my $grubState = GrubState->new(version => $version, efi => $efi, devices => $devices, efiMountPoint => $efiMountPoint );
|
||||
my $grubState = GrubState->new(name => $name, version => $version, efi => $efi, devices => $devices, efiMountPoint => $efiMountPoint );
|
||||
return $grubState
|
||||
}
|
||||
|
||||
|
@ -497,10 +500,11 @@ my $prevGrubState = readGrubState();
|
|||
my @prevDeviceTargets = split/:/, $prevGrubState->devices;
|
||||
|
||||
my $devicesDiffer = scalar (List::Compare->new( '-u', '-a', \@deviceTargets, \@prevDeviceTargets)->get_symmetric_difference() );
|
||||
my $versionDiffer = (get("fullVersion") eq \$prevGrubState->version);
|
||||
my $efiDiffer = ($efiTarget eq \$prevGrubState->efi);
|
||||
my $efiMountPointDiffer = ($efiSysMountPoint eq \$prevGrubState->efiMountPoint);
|
||||
my $requireNewInstall = $devicesDiffer || $versionDiffer || $efiDiffer || $efiMountPointDiffer || (($ENV{'NIXOS_INSTALL_GRUB'} // "") eq "1");
|
||||
my $nameDiffer = !(get("fullName") eq $prevGrubState->name);
|
||||
my $versionDiffer = !(get("fullVersion") eq $prevGrubState->version);
|
||||
my $efiDiffer = !($efiTarget eq $prevGrubState->efi);
|
||||
my $efiMountPointDiffer = !($efiSysMountPoint eq $prevGrubState->efiMountPoint);
|
||||
my $requireNewInstall = $devicesDiffer || $nameDiffer || $versionDiffer || $efiDiffer || $efiMountPointDiffer || (($ENV{'NIXOS_INSTALL_GRUB'} // "") eq "1");
|
||||
|
||||
# install a symlink so that grub can detect the boot drive when set
|
||||
# as the root directory
|
||||
|
@ -543,6 +547,7 @@ if (($requireNewInstall != 0) && ($efiTarget eq "only" || $efiTarget eq "both"))
|
|||
# update GRUB state file
|
||||
if ($requireNewInstall != 0) {
|
||||
open FILE, ">$bootPath/grub/state" or die "cannot create $bootPath/grub/state: $!\n";
|
||||
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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue