Merge pull request #197254 from Atemu/fstab-escape-options
This commit is contained in:
commit
c021df5792
5 changed files with 36 additions and 5 deletions
|
@ -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>&-
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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",
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue