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

This commit is contained in:
Martin Weinelt 2022-11-19 18:08:40 +01:00 committed by GitHub
commit c021df5792
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 5 deletions

View file

@ -342,6 +342,14 @@ checkFS() {
return 0 return 0
} }
escapeFstab() {
local original="$1"
# Replace space
local escaped="${original// /\\040}"
# Replace tab
echo "${escaped//$'\t'/\\011}"
}
# Function for mounting a file system. # Function for mounting a file system.
mountFS() { mountFS() {
@ -569,7 +577,7 @@ while read -u 3 mountPoint; do
continue continue
fi fi
mountFS "$device" "$mountPoint" "$options" "$fsType" mountFS "$device" "$(escapeFstab "$mountPoint")" "$(escapeFstab "$options")" "$fsType"
done done
exec 3>&- exec 3>&-

View file

@ -167,7 +167,7 @@ let
else throw "No device specified for mount point ${fs.mountPoint}.") else throw "No device specified for mount point ${fs.mountPoint}.")
+ " " + escape (rootPrefix + fs.mountPoint) + " " + escape (rootPrefix + fs.mountPoint)
+ " " + fs.fsType + " " + fs.fsType
+ " " + builtins.concatStringsSep "," (fs.options ++ (extraOpts fs)) + " " + escape (builtins.concatStringsSep "," (fs.options ++ (extraOpts fs)))
+ " " + (optionalString (!excludeChecks) + " " + (optionalString (!excludeChecks)
("0 " + (if skipCheck fs then "0" else if fs.mountPoint == "/" then "1" else "2"))) ("0 " + (if skipCheck fs then "0" else if fs.mountPoint == "/" then "1" else "2")))
+ "\n" + "\n"

View file

@ -77,6 +77,7 @@ in rec {
(onFullSupported "nixos.tests.i3wm") (onFullSupported "nixos.tests.i3wm")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSimple") (onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSimple")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvolDefault") (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.btrfsSubvols")
(onSystems ["x86_64-linux"] "nixos.tests.installer.luksroot") (onSystems ["x86_64-linux"] "nixos.tests.installer.luksroot")
(onSystems ["x86_64-linux"] "nixos.tests.installer.lvm") (onSystems ["x86_64-linux"] "nixos.tests.installer.lvm")

View file

@ -8,9 +8,10 @@
# them when fixed. # them when fixed.
inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; }) inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; })
# bcache # bcache
# btrfsSimple btrfsSimple
# btrfsSubvolDefault btrfsSubvolDefault
# btrfsSubvols btrfsSubvolEscape
btrfsSubvols
# encryptedFSWithKeyfile # encryptedFSWithKeyfile
# grub1 # grub1
# luksroot # luksroot

View file

@ -911,4 +911,25 @@ in {
) )
''; '';
}; };
# 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",
)
'';
};
} }