summary refs log tree commit diff
path: root/nixos/modules/installer
diff options
context:
space:
mode:
authorWilliam A. Kennington III <william@wkennington.com>2014-08-30 15:33:44 -0700
committerWilliam A. Kennington III <william@wkennington.com>2014-09-02 09:16:13 -0700
commit7fae42352235b9315021005928fea9a058c516e8 (patch)
tree679568690aaf4b648488fc0ad03bd2b5396771ae /nixos/modules/installer
parent0b66483c9a64ccda86828edadda29d5ccd532b9f (diff)
downloadnixlib-7fae42352235b9315021005928fea9a058c516e8.tar
nixlib-7fae42352235b9315021005928fea9a058c516e8.tar.gz
nixlib-7fae42352235b9315021005928fea9a058c516e8.tar.bz2
nixlib-7fae42352235b9315021005928fea9a058c516e8.tar.lz
nixlib-7fae42352235b9315021005928fea9a058c516e8.tar.xz
nixlib-7fae42352235b9315021005928fea9a058c516e8.tar.zst
nixlib-7fae42352235b9315021005928fea9a058c516e8.zip
nixos/generate-config: Support detecting nested subvolumes
Diffstat (limited to 'nixos/modules/installer')
-rw-r--r--nixos/modules/installer/tools/nixos-generate-config.pl22
1 files changed, 16 insertions, 6 deletions
diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl
index 73dd87cef5cf..ab5b2954f6b5 100644
--- a/nixos/modules/installer/tools/nixos-generate-config.pl
+++ b/nixos/modules/installer/tools/nixos-generate-config.pl
@@ -346,15 +346,25 @@ EOF
 
     # Is this a btrfs filesystem?
     if ($fsType eq "btrfs") {
-        my ($status, @info) = runCommand("btrfs subvol show $rootDir$mountPoint");
+        my ($status, @id_info) = runCommand("btrfs subvol show $rootDir$mountPoint");
         if ($status != 0) {
-            die "Failed to retreive subvolume info for $mountPoint";
+            die "Failed to retreive subvolume info for $mountPoint\n";
         }
-        my @subvols = join("", @info) =~ m/Name:[ \t\n]*([^ \t\n]*)/;
-        if ($#subvols > 0) {
+        my @ids = join("", @id_info) =~ m/Object ID:[ \t\n]*([^ \t\n]*)/;
+        if ($#ids > 0) {
             die "Btrfs subvol name for $mountPoint listed multiple times in mount\n"
-        } elsif ($#subvols == 0) {
-            push @extraOptions, "subvol=$subvols[0]";
+        } elsif ($#ids == 0) {
+            my ($status, @path_info) = runCommand("btrfs subvol list $rootDir$mountPoint");
+            if ($status != 0) {
+                die "Failed to find $mountPoint subvolume id from btrfs\n";
+            }
+            my @paths = join("", @path_info) =~ m/ID $ids[0] [^\n]* path ([^\n]*)/;
+            if ($#paths > 0) {
+                die "Btrfs returned multiple paths for a single subvolume id, mountpoint $mountPoint\n";
+            } elsif ($#paths != 0) {
+                die "Btrfs did not return a path for the subvolume at $mountPoint\n";
+            }
+            push @extraOptions, "subvol=$paths[0]";
         }
     }