]> git.scottworley.com Git - nixos-qemu-vm-isolation/commitdiff
squashfs -> ext4, which makes images ~5x larger. :(
authorScott Worley <scottworley@scottworley.com>
Fri, 21 Jul 2023 07:40:51 +0000 (00:40 -0700)
committerScott Worley <scottworley@scottworley.com>
Fri, 21 Jul 2023 09:49:01 +0000 (02:49 -0700)
https://github.com/NixOS/nixpkgs/pull/236656 changed NixOS's qemu-vm
disk-finding mechanism to use filesystem labels.

squashfs doesn't support filesystem labels (see
https://github.com/plougher/squashfs-tools/issues/59 ).

So we can't use squashfs anymore.  :(

The simple test's nix store image is 240M as squashfs and 1.3G as ext4.

README.md
modules/qemu-vm-isolation.nix

index ec9ba70f536d3b382eed51b5e97672e50b80ed15..6a6fb436787d2171bad51b2bc9c27c83db167785 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 Isolate NixOS QEMU VMs from each other and from the host by using a
-squashfs for the VM's /nix/store that contains only the VM's dependencies
+private /nix/store image that contains only the VM's dependencies
 (like the installer has) rather than a virtio mount of the host's entire
 /nix/store.
 
index ad586ecc1af14245107efe6db9a83dc7925f4927..260e9fec7323c985a53c0fc1f197b13c765af525 100644 (file)
@@ -14,21 +14,35 @@ let
 
 in {
 
-  boot.initrd.availableKernelModules = [ "squashfs" ];
-
   fileSystems = mkVMOverride {
     "${storeMountPath}" = {
       device =
         lookupDriveDeviceName "nixstore" config.virtualisation.qemu.drives;
-      fsType = "squashfs";
+      fsType = "ext4";
       options = [ "ro" ];
       neededForBoot = true;
     };
   };
 
-  system.build.squashfsStore =
-    pkgs.callPackage (modulesPath + "/../lib/make-squashfs.nix") {
-      storeContents = config.virtualisation.additionalPaths;
+  # We use this to disable fsck runs on the ext4 nix store image because stage-1
+  # fsck crashes (maybe because the device is read-only?), halting boot.
+  boot.initrd.checkJournalingFS = false;
+
+  system.build.nixStoreImage =
+    import (modulesPath + "/../lib/make-disk-image.nix") {
+      inherit pkgs config lib;
+      additionalPaths = [
+        (config.virtualisation.host.pkgs.closureInfo {
+          rootPaths = config.virtualisation.additionalPaths;
+        })
+      ];
+      onlyNixStore = true;
+      label = "nix-store";
+      partitionTableType = "none";
+      installBootLoader = false;
+      diskSize = "auto";
+      additionalSpace = "0M";
+      copyChannel = false;
     };
 
   virtualisation = {
@@ -37,7 +51,7 @@ in {
 
     qemu.drives = [{
       name = "nixstore";
-      file = "${config.system.build.squashfsStore}";
+      file = "${config.system.build.nixStoreImage}/nixos.img";
       driveExtraOpts = {
         format = "raw";
         read-only = "on";