Merge pull request #231283 from nikstur/filesystems-erofs
nixos/filesystems: init erofs
This commit is contained in:
commit
1ee11b8a31
4 changed files with 120 additions and 44 deletions
|
@ -1374,6 +1374,7 @@
|
|||
./tasks/filesystems/cifs.nix
|
||||
./tasks/filesystems/ecryptfs.nix
|
||||
./tasks/filesystems/envfs.nix
|
||||
./tasks/filesystems/erofs.nix
|
||||
./tasks/filesystems/exfat.nix
|
||||
./tasks/filesystems/ext.nix
|
||||
./tasks/filesystems/f2fs.nix
|
||||
|
|
|
@ -293,6 +293,9 @@ checkFS() {
|
|||
# Skip fsck for inherently readonly filesystems.
|
||||
if [ "$fsType" = squashfs ]; then return 0; fi
|
||||
|
||||
# Skip fsck.erofs because it is still experimental.
|
||||
if [ "$fsType" = erofs ]; then return 0; fi
|
||||
|
||||
# If we couldn't figure out the FS type, then skip fsck.
|
||||
if [ "$fsType" = auto ]; then
|
||||
echo 'cannot check filesystem with type "auto"!'
|
||||
|
|
21
nixos/modules/tasks/filesystems/erofs.nix
Normal file
21
nixos/modules/tasks/filesystems/erofs.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
|
||||
inInitrd = lib.any (fs: fs == "erofs") config.boot.initrd.supportedFilesystems;
|
||||
inSystem = lib.any (fs: fs == "erofs") config.boot.supportedFilesystems;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
config = lib.mkIf (inInitrd || inSystem) {
|
||||
|
||||
system.fsPackages = [ pkgs.erofs-utils ];
|
||||
|
||||
boot.initrd.availableKernelModules = lib.mkIf inInitrd [ "erofs" ];
|
||||
|
||||
# fsck.erofs is currently experimental and should not be run as a
|
||||
# privileged user. Thus, it is not included in the initrd.
|
||||
|
||||
};
|
||||
}
|
|
@ -1,6 +1,14 @@
|
|||
import ./make-test-python.nix ({ lib, pkgs, ... }:
|
||||
{ system ? builtins.currentSystem
|
||||
, config ? { }
|
||||
, pkgs ? import ../.. { inherit system config; }
|
||||
}:
|
||||
|
||||
with import ../lib/testing-python.nix { inherit system pkgs; };
|
||||
with pkgs.lib;
|
||||
{
|
||||
name = "non-default-filesystems";
|
||||
btrfs = makeTest
|
||||
{
|
||||
name = "non-default-filesystems-btrfs";
|
||||
|
||||
nodes.machine =
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
@ -52,4 +60,47 @@ import ./make-test-python.nix ({ lib, pkgs, ... }:
|
|||
machine.succeed("grep -E '/dev/vda / btrfs rw,relatime,space_cache=v2,subvolid=[0-9]+,subvol=/root 0 0' /proc/mounts")
|
||||
machine.succeed("grep -E '/dev/vda /home btrfs rw,relatime,space_cache=v2,subvolid=[0-9]+,subvol=/home 0 0' /proc/mounts")
|
||||
'';
|
||||
})
|
||||
};
|
||||
|
||||
erofs =
|
||||
let
|
||||
fsImage = "/tmp/non-default-filesystem.img";
|
||||
in
|
||||
makeTest {
|
||||
name = "non-default-filesystems-erofs";
|
||||
|
||||
nodes.machine = _: {
|
||||
virtualisation.qemu.drives = [{
|
||||
name = "non-default-filesystem";
|
||||
file = fsImage;
|
||||
}];
|
||||
|
||||
virtualisation.fileSystems."/non-default" = {
|
||||
device = "/dev/vdb";
|
||||
fsType = "erofs";
|
||||
neededForBoot = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmp_dir:
|
||||
with open(f"{tmp_dir}/filesystem", "w") as f:
|
||||
f.write("erofs")
|
||||
|
||||
subprocess.run([
|
||||
"${pkgs.erofs-utils}/bin/mkfs.erofs",
|
||||
"${fsImage}",
|
||||
tmp_dir,
|
||||
])
|
||||
|
||||
machine.start()
|
||||
machine.wait_for_unit("default.target")
|
||||
|
||||
file_contents = machine.succeed("cat /non-default/filesystem")
|
||||
assert "erofs" in file_contents
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue