Merge pull request #197254 from Atemu/fstab-escape-options

+9 -1
nixos/modules/system/boot/stage-1-init.sh
···
return 0
}
+
escapeFstab() {
+
local original="$1"
+
+
# Replace space
+
local escaped="${original// /\\040}"
+
# Replace tab
+
echo "${escaped//$'\t'/\\011}"
+
}
# Function for mounting a file system.
mountFS() {
···
continue
fi
-
mountFS "$device" "$mountPoint" "$options" "$fsType"
+
mountFS "$device" "$(escapeFstab "$mountPoint")" "$(escapeFstab "$options")" "$fsType"
done
exec 3>&-
+1 -1
nixos/modules/tasks/filesystems.nix
···
else throw "No device specified for mount point ‘${fs.mountPoint}’.")
+ " " + escape (rootPrefix + fs.mountPoint)
+ " " + fs.fsType
-
+ " " + builtins.concatStringsSep "," (fs.options ++ (extraOpts fs))
+
+ " " + escape (builtins.concatStringsSep "," (fs.options ++ (extraOpts fs)))
+ " " + (optionalString (!excludeChecks)
("0 " + (if skipCheck fs then "0" else if fs.mountPoint == "/" then "1" else "2")))
+ "\n"
+1
nixos/release-combined.nix
···
(onFullSupported "nixos.tests.i3wm")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSimple")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvolDefault")
+
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvolEscape")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvols")
(onSystems ["x86_64-linux"] "nixos.tests.installer.luksroot")
(onSystems ["x86_64-linux"] "nixos.tests.installer.lvm")
+4 -3
nixos/tests/installer-systemd-stage-1.nix
···
# them when fixed.
inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; })
# bcache
-
# btrfsSimple
-
# btrfsSubvolDefault
-
# btrfsSubvols
+
btrfsSimple
+
btrfsSubvolDefault
+
btrfsSubvolEscape
+
btrfsSubvols
# encryptedFSWithKeyfile
# grub1
# luksroot
+21
nixos/tests/installer.nix
···
)
'';
};
+
+
# Test to see if we can deal with subvols that need to be escaped in fstab
+
btrfsSubvolEscape = makeInstallerTest "btrfsSubvolEscape" {
+
createPartitions = ''
+
machine.succeed(
+
"sgdisk -Z /dev/vda",
+
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
+
"mkswap /dev/vda2 -L swap",
+
"swapon -L swap",
+
"mkfs.btrfs -L root /dev/vda3",
+
"btrfs device scan",
+
"mount LABEL=root /mnt",
+
"btrfs subvol create '/mnt/nixos in space'",
+
"btrfs subvol create /mnt/boot",
+
"umount /mnt",
+
"mount -o 'defaults,subvol=nixos in space' LABEL=root /mnt",
+
"mkdir /mnt/boot",
+
"mount -o defaults,subvol=boot LABEL=root /mnt/boot",
+
)
+
'';
+
};
}