nixos: Fix detection of btrfs root volume

Regression introduced by 801c920e95642ec663d4aa486c81e5443e25b182.

Since then, the btrfsSimple subtest of the installer VM test fails with:

Btrfs did not return a path for the subvolume at /

The reason for this is that the output for "btrfs subvol show" has
changed between version 4.8.2 and 4.13.1.

For example the output of "btrfs subvol show /" in version 4.8.2 was:

/ is toplevel subvolume

In version 4.13.1, the output now is the following and thus the regular
expressions used in nixos-generate-config.pl and install-grub.pl now
match (which results in the error mentioned above):

/
Name: <FS_TREE>
UUID: -
Parent UUID: -
Received UUID: -
Creation time: -
Subvolume ID: 5
Generation: 287270
Gen at creation: 0
Parent ID: 0
Top level ID: 0
Flags: -
Snapshot(s):

In order to fix this I've changed nixos-generate-config.pl and
install-grub.pl, because both use "btrfs subvol show" in a similar vein,
so the regex for parsing the output now doesn't match anymore whenever
the volume path is "/", which should result in the same behaviour as we
had with btrfs-progs version 4.8.2.

Tested against the btrfsSimple, btrfsSubvols and btrfsSubvolDefault
subtests of the installer VM test and they all succeed now.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>

aszlig f4e74259 d1e1ee7b

+2 -2
+1 -1
nixos/modules/installer/tools/nixos-generate-config.pl
··· 402 402 if ($status != 0 || join("", @info) =~ /ERROR:/) { 403 403 die "Failed to retrieve subvolume info for $mountPoint\n"; 404 404 } 405 - my @ids = join("", @info) =~ m/Subvolume ID:[ \t\n]*([0-9]*)/; 405 + my @ids = join("\n", @info) =~ m/^(?!\/\n).*Subvolume ID:[ \t\n]*([0-9]+)/s; 406 406 if ($#ids > 0) { 407 407 die "Btrfs subvol name for $mountPoint listed multiple times in mount\n" 408 408 } elsif ($#ids == 0) {
+1 -1
nixos/modules/system/boot/loader/grub/install-grub.pl
··· 197 197 if ($status != 0) { 198 198 die "Failed to retrieve subvolume info for @{[$fs->mount]}\n"; 199 199 } 200 - my @ids = join("", @id_info) =~ m/Subvolume ID:[ \t\n]*([^ \t\n]*)/; 200 + my @ids = join("\n", @id_info) =~ m/^(?!\/\n).*Subvolume ID:[ \t\n]*([0-9]+)/s; 201 201 if ($#ids > 0) { 202 202 die "Btrfs subvol name for @{[$fs->device]} listed multiple times in mount\n" 203 203 } elsif ($#ids == 0) {