mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 21:25:30 +03:00
nixos/qemu-vm: use new overlayfs API
This commit is contained in:
parent
54674e9063
commit
ded6d983d6
1 changed files with 16 additions and 41 deletions
|
@ -1046,13 +1046,6 @@ in
|
||||||
|
|
||||||
boot.loader.supportsInitrdSecrets = mkIf (!cfg.useBootLoader) (mkVMOverride false);
|
boot.loader.supportsInitrdSecrets = mkIf (!cfg.useBootLoader) (mkVMOverride false);
|
||||||
|
|
||||||
boot.initrd.postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable && cfg.writableStore) ''
|
|
||||||
echo "mounting overlay filesystem on /nix/store..."
|
|
||||||
mkdir -p -m 0755 $targetRoot/nix/.rw-store/store $targetRoot/nix/.rw-store/work $targetRoot/nix/store
|
|
||||||
mount -t overlay overlay $targetRoot/nix/store \
|
|
||||||
-o lowerdir=$targetRoot/nix/.ro-store,upperdir=$targetRoot/nix/.rw-store/store,workdir=$targetRoot/nix/.rw-store/work || fail
|
|
||||||
'';
|
|
||||||
|
|
||||||
systemd.tmpfiles.settings."10-qemu-vm" = {
|
systemd.tmpfiles.settings."10-qemu-vm" = {
|
||||||
"/etc/NIXOS".f = {
|
"/etc/NIXOS".f = {
|
||||||
mode = "0644";
|
mode = "0644";
|
||||||
|
@ -1081,8 +1074,7 @@ in
|
||||||
'';
|
'';
|
||||||
|
|
||||||
boot.initrd.availableKernelModules =
|
boot.initrd.availableKernelModules =
|
||||||
optional cfg.writableStore "overlay"
|
optional (cfg.qemu.diskInterface == "scsi") "sym53c8xx"
|
||||||
++ optional (cfg.qemu.diskInterface == "scsi") "sym53c8xx"
|
|
||||||
++ optional (cfg.tpm.enable) "tpm_tis";
|
++ optional (cfg.tpm.enable) "tpm_tis";
|
||||||
|
|
||||||
virtualisation.additionalPaths = [ config.system.build.toplevel ];
|
virtualisation.additionalPaths = [ config.system.build.toplevel ];
|
||||||
|
@ -1090,7 +1082,9 @@ in
|
||||||
virtualisation.sharedDirectories = {
|
virtualisation.sharedDirectories = {
|
||||||
nix-store = mkIf cfg.mountHostNixStore {
|
nix-store = mkIf cfg.mountHostNixStore {
|
||||||
source = builtins.storeDir;
|
source = builtins.storeDir;
|
||||||
target = "/nix/store";
|
# Always mount this to /nix/.ro-store because we never want to actually
|
||||||
|
# write to the host Nix Store.
|
||||||
|
target = "/nix/.ro-store";
|
||||||
securityModel = "none";
|
securityModel = "none";
|
||||||
};
|
};
|
||||||
xchg = {
|
xchg = {
|
||||||
|
@ -1200,10 +1194,7 @@ in
|
||||||
virtualisation.fileSystems = let
|
virtualisation.fileSystems = let
|
||||||
mkSharedDir = tag: share:
|
mkSharedDir = tag: share:
|
||||||
{
|
{
|
||||||
name =
|
name = share.target;
|
||||||
if tag == "nix-store" && cfg.writableStore
|
|
||||||
then "/nix/.ro-store"
|
|
||||||
else share.target;
|
|
||||||
value.device = tag;
|
value.device = tag;
|
||||||
value.fsType = "9p";
|
value.fsType = "9p";
|
||||||
value.neededForBoot = true;
|
value.neededForBoot = true;
|
||||||
|
@ -1228,7 +1219,17 @@ in
|
||||||
# Sync with systemd's tmp.mount;
|
# Sync with systemd's tmp.mount;
|
||||||
options = [ "mode=1777" "strictatime" "nosuid" "nodev" "size=${toString config.boot.tmp.tmpfsSize}" ];
|
options = [ "mode=1777" "strictatime" "nosuid" "nodev" "size=${toString config.boot.tmp.tmpfsSize}" ];
|
||||||
};
|
};
|
||||||
"/nix/${if cfg.writableStore then ".ro-store" else "store"}" = lib.mkIf cfg.useNixStoreImage {
|
"/nix/store" = lib.mkIf (cfg.useNixStoreImage || cfg.mountHostNixStore) (if cfg.writableStore then {
|
||||||
|
overlay = {
|
||||||
|
lowerdir = [ "/nix/.ro-store" ];
|
||||||
|
upperdir = "/nix/.rw-store/upper";
|
||||||
|
workdir = "/nix/.rw-store/work";
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
device = "/nix/.ro-store";
|
||||||
|
options = [ "bind" ];
|
||||||
|
});
|
||||||
|
"/nix/.ro-store" = lib.mkIf cfg.useNixStoreImage {
|
||||||
device = "/dev/disk/by-label/${nixStoreFilesystemLabel}";
|
device = "/dev/disk/by-label/${nixStoreFilesystemLabel}";
|
||||||
neededForBoot = true;
|
neededForBoot = true;
|
||||||
options = [ "ro" ];
|
options = [ "ro" ];
|
||||||
|
@ -1246,32 +1247,6 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.systemd = lib.mkIf (config.boot.initrd.systemd.enable && cfg.writableStore) {
|
|
||||||
mounts = [{
|
|
||||||
where = "/sysroot/nix/store";
|
|
||||||
what = "overlay";
|
|
||||||
type = "overlay";
|
|
||||||
options = "lowerdir=/sysroot/nix/.ro-store,upperdir=/sysroot/nix/.rw-store/store,workdir=/sysroot/nix/.rw-store/work";
|
|
||||||
wantedBy = ["initrd-fs.target"];
|
|
||||||
before = ["initrd-fs.target"];
|
|
||||||
requires = ["rw-store.service"];
|
|
||||||
after = ["rw-store.service"];
|
|
||||||
unitConfig.RequiresMountsFor = "/sysroot/nix/.ro-store";
|
|
||||||
}];
|
|
||||||
services.rw-store = {
|
|
||||||
before = [ "shutdown.target" ];
|
|
||||||
conflicts = [ "shutdown.target" ];
|
|
||||||
unitConfig = {
|
|
||||||
DefaultDependencies = false;
|
|
||||||
RequiresMountsFor = "/sysroot/nix/.rw-store";
|
|
||||||
};
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = "/bin/mkdir -p -m 0755 /sysroot/nix/.rw-store/store /sysroot/nix/.rw-store/work /sysroot/nix/store";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = (if cfg.useDefaultFilesystems then mkVMOverride else mkDefault) [ ];
|
swapDevices = (if cfg.useDefaultFilesystems then mkVMOverride else mkDefault) [ ];
|
||||||
boot.initrd.luks.devices = (if cfg.useDefaultFilesystems then mkVMOverride else mkDefault) {};
|
boot.initrd.luks.devices = (if cfg.useDefaultFilesystems then mkVMOverride else mkDefault) {};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue