diff --git a/nixos/modules/virtualisation/proxmox-lxc.nix b/nixos/modules/virtualisation/proxmox-lxc.nix index 548421e48e2b3..9a8325f92636d 100644 --- a/nixos/modules/virtualisation/proxmox-lxc.nix +++ b/nixos/modules/virtualisation/proxmox-lxc.nix @@ -1,4 +1,9 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: with lib; @@ -42,19 +47,35 @@ with lib; in mkIf cfg.enable { system.build.tarball = pkgs.callPackage ../../lib/make-system-tarball.nix { - storeContents = [{ - object = config.system.build.toplevel; - symlink = "none"; - }]; + storeContents = [ + { + object = config.system.build.toplevel; + symlink = "none"; + } + ]; - contents = [{ - source = config.system.build.toplevel + "/init"; - target = "/sbin/init"; - }]; + contents = [ + { + source = config.system.build.toplevel + "/init"; + target = "/sbin/init"; + } + ]; extraCommands = "mkdir -p root etc/systemd/network"; }; + boot.postBootCommands = '' + # After booting, register the contents of the Nix store in the Nix + # database. + if [ -f /nix-path-registration ]; then + ${config.nix.package.out}/bin/nix-store --load-db < /nix-path-registration && + rm /nix-path-registration + fi + + # nixos-rebuild also requires a "system" profile + ${config.nix.package.out}/bin/nix-env -p /nix/var/nix/profiles/system --set /run/current-system + ''; + boot = { isContainer = true; loader.initScript.enable = true; @@ -84,11 +105,22 @@ with lib; }; systemd = { - mounts = mkIf (!cfg.privileged) [{ - enable = false; - where = "/sys/kernel/debug"; - }]; - services."getty@".unitConfig.ConditionPathExists = [ "" "/dev/%I" ]; + mounts = mkIf (!cfg.privileged) [ + { + enable = false; + where = "/sys/kernel/debug"; + } + ]; + + # By default only starts getty on tty0 but first on LXC is tty1 + services."autovt@".unitConfig.ConditionPathExists = [ + "" + "/dev/%I" + ]; + + # These are disabled by `console.enable` but console via tty is the default in Proxmox + services."getty@tty1".enable = lib.mkForce true; + services."autovt@".enable = lib.mkForce true; }; };