|
27 | 27 | else "/dev/vda" |
28 | 28 | else throw "No disk letter when /nix/store is not in disk"; |
29 | 29 |
|
| 30 | + # Check if the writable store overlay is a virtiofs share |
| 31 | + isRwStoreVirtiofsShare = builtins.any ({mountPoint, proto, ... }: |
| 32 | + mountPoint == config.microvm.writableStoreOverlay |
| 33 | + && proto == "virtiofs" |
| 34 | + ) config.microvm.shares; |
| 35 | + |
30 | 36 | in |
31 | 37 | lib.mkIf config.microvm.guest.enable { |
32 | 38 | fileSystems = lib.mkMerge [ ( |
@@ -82,6 +88,8 @@ lib.mkIf config.microvm.guest.enable { |
82 | 88 | "lowerdir=${roStore}" |
83 | 89 | "upperdir=${writableStoreOverlay}/store" |
84 | 90 | "workdir=${writableStoreOverlay}/work" |
| 91 | + ] ++ lib.optionals isRwStoreVirtiofsShare [ |
| 92 | + "userxattr" |
85 | 93 | ]; |
86 | 94 | depends = [ roStore writableStoreOverlay ]; |
87 | 95 | }; |
@@ -132,11 +140,13 @@ lib.mkIf config.microvm.guest.enable { |
132 | 140 | where = "/sysroot/nix/store"; |
133 | 141 | what = "overlay"; |
134 | 142 | type = "overlay"; |
135 | | - options = builtins.concatStringsSep "," [ |
| 143 | + options = builtins.concatStringsSep "," ([ |
136 | 144 | "lowerdir=/sysroot${roStore}" |
137 | 145 | "upperdir=/sysroot${writableStoreOverlay}/store" |
138 | 146 | "workdir=/sysroot${writableStoreOverlay}/work" |
139 | | - ]; |
| 147 | + ] ++ lib.optionals isRwStoreVirtiofsShare [ |
| 148 | + "userxattr" |
| 149 | + ]); |
140 | 150 | wantedBy = [ "initrd-fs.target" ]; |
141 | 151 | before = [ "initrd-fs.target" ]; |
142 | 152 | requires = [ "rw-store.service" ]; |
|
0 commit comments