diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-05-08 21:00:06 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2014-05-09 00:51:48 +0200 |
commit | 91afe9eb8d8f86db6b97b4aee5b77ab486657726 (patch) | |
tree | ddfee2ac1898ef77fb36a466080a8ca20f10b310 /nixos/modules/installer | |
parent | 1bd8ced9c0eb4002ffa2afb3e4a60c5bccfc28ef (diff) | |
download | nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar.gz nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar.bz2 nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar.lz nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar.xz nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.tar.zst nixlib-91afe9eb8d8f86db6b97b4aee5b77ab486657726.zip |
nixos-generate-config: Use stable device paths (e.g. /dev/disk/by-uuid/X)
Diffstat (limited to 'nixos/modules/installer')
-rw-r--r-- | nixos/modules/installer/tools/nixos-generate-config.pl | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl index 23f9c3a4ca06..e8b725d6ea4c 100644 --- a/nixos/modules/installer/tools/nixos-generate-config.pl +++ b/nixos/modules/installer/tools/nixos-generate-config.pl @@ -1,9 +1,11 @@ #! @perl@ +use Cwd 'abs_path'; use File::Spec; use File::Path; use File::Basename; use File::Slurp; +use File::stat; sub uniq { @@ -236,6 +238,24 @@ if ($virt eq "qemu" || $virt eq "kvm" || $virt eq "bochs") { } +# For a device name like /dev/sda1, find a more stable path like +# /dev/disk/by-uuid/X or /dev/disk/by-label/Y. +sub findStableDevPath { + my ($dev) = @_; + return $dev if substr($dev, 0, 1) ne "/"; + return $dev unless -e $dev; + + my $st = stat($dev) or return $dev; + + foreach my $dev2 (glob("/dev/disk/by-uuid/*"), glob("/dev/mapper/*"), glob("/dev/disk/by-label/*")) { + my $st2 = stat($dev2) or next; + return $dev2 if $st->rdev == $st2->rdev; + } + + return $dev; +} + + # Generate the swapDevices option from the currently activated swap # devices. my @swaps = read_file("/proc/swaps"); @@ -243,7 +263,9 @@ shift @swaps; my @swapDevices; foreach my $swap (@swaps) { $swap =~ /^(\S+)\s/; - push @swapDevices, "{ device = \"$1\"; }"; + next unless -e $1; + my $dev = findStableDevPath $1; + push @swapDevices, "{ device = \"$dev\"; }"; } @@ -315,7 +337,7 @@ EOF # Emit the filesystem. $fileSystems .= <<EOF; fileSystems.\"$mountPoint\" = - { device = \"$device\"; + { device = \"${\(findStableDevPath $device)}\"; fsType = \"$fsType\"; EOF @@ -344,7 +366,7 @@ sub toNixExpr { sub multiLineList { my $indent = shift; - return "[ ]" if !@_; + return " [ ]" if !@_; $res = "\n${indent}[ "; my $first = 1; foreach my $s (@_) { |