nixos: Add working container VM (w/ vaultwarden)
Also improve IPv6 addressing / routing
This commit is contained in:
@@ -10,6 +10,40 @@ let
|
||||
devVMKeyPath = "/run/dev.key";
|
||||
ctrProfiles = n: "/nix/var/nix/profiles/per-container/${n}";
|
||||
|
||||
dummyReady = pkgs.runCommandCC "dummy-sd-ready" {
|
||||
buildInputs = [ pkgs.systemd ];
|
||||
passAsFile = [ "code" ];
|
||||
code = ''
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <systemd/sd-daemon.h>
|
||||
|
||||
void handler(int signum) {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main() {
|
||||
// systemd sends this to PID 1 for an "orderly shutdown"
|
||||
signal(SIGRTMIN+3, handler);
|
||||
|
||||
int ret =
|
||||
sd_notifyf(0, "READY=1\n"
|
||||
"STATUS=Dummy container, please deploy for real!\n"
|
||||
"MAINPID=%lu",
|
||||
(unsigned long)getpid());
|
||||
if (ret <= 0) {
|
||||
fprintf(stderr, "sd_notify() returned %d\n", ret);
|
||||
return ret == 0 ? -1 : ret;
|
||||
}
|
||||
|
||||
pause();
|
||||
return 0;
|
||||
};
|
||||
'';
|
||||
} ''
|
||||
$CC -o "$out" -x c -lsystemd "$codePath"
|
||||
'';
|
||||
dummyProfile = pkgs.writeTextFile {
|
||||
name = "dummy-init";
|
||||
executable = true;
|
||||
@@ -19,10 +53,7 @@ let
|
||||
#!${pkgs.runtimeShell}
|
||||
${pkgs.iproute2}/bin/ip link set dev host0 up
|
||||
|
||||
while true; do
|
||||
echo "This is a dummy, please deploy the real container!"
|
||||
${pkgs.coreutils}/bin/sleep 5
|
||||
done
|
||||
exec ${dummyReady}
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -185,6 +216,7 @@ in
|
||||
reload =
|
||||
# `switch-to-configuration test` switches config without trying to update bootloader
|
||||
''
|
||||
# TODO: This still breaks on first deploy over the dummy...
|
||||
[ -e "${system}"/bin/switch-to-configuration ] && \
|
||||
systemd-run --pipe --machine ${n} -- "${containerSystem}"/bin/switch-to-configuration test
|
||||
'';
|
||||
@@ -250,13 +282,9 @@ in
|
||||
Virtualization = "container";
|
||||
};
|
||||
networkConfig = {
|
||||
DHCP = "yes";
|
||||
LLDP = true;
|
||||
EmitLLDP = "customer-bridge";
|
||||
};
|
||||
dhcpConfig = {
|
||||
UseTimezone = true;
|
||||
};
|
||||
};
|
||||
|
||||
# If the host is a dev VM
|
||||
|
@@ -113,7 +113,7 @@ let
|
||||
threads = mkOpt' ints.unsigned 1 "Number of threads per core.";
|
||||
};
|
||||
memory = mkOpt' ints.unsigned 1024 "Amount of RAM (mebibytes).";
|
||||
vga = mkOpt' str "qxl" "VGA card type.";
|
||||
vga = mkOpt' str "virtio" "VGA card type.";
|
||||
spice.enable = mkBoolOpt' true "Whether to enable SPICE.";
|
||||
networks = mkOpt' (attrsOf (submodule netOpts)) { } "Networks to attach VM to.";
|
||||
drives = mkOpt' (attrsOf (submodule driveOpts)) { } "Drives to attach to VM.";
|
||||
|
Reference in New Issue
Block a user