asterinas/distro/modules/core.nix

72 lines
2.6 KiB
Nix
Raw Normal View History

{ config, lib, pkgs, ... }:
let
kernel = builtins.path { path = builtins.getEnv "NIXOS_KERNEL"; };
stage-1-init = builtins.path { path = builtins.getEnv "NIXOS_STAGE_1_INIT"; };
initramfs = pkgs.makeInitrd {
contents = [
{
object = "${pkgs.busybox}/bin";
symlink = "/bin";
}
{
object = stage-1-init;
symlink = "/init";
}
];
};
resolv-conf = builtins.path { path = builtins.getEnv "NIXOS_RESOLV_CONF"; };
# If set to "1", the system will not proceed to switch to the root filesystem after
# initial boot. Instead, it will drop into an initramfs shell. This is primarily
# intended for debugging purposes.
break-into-stage1-shell = "0";
in {
boot.loader.grub.enable = true;
boot.loader.grub.efiSupport = true;
boot.loader.grub.device = "nodev";
boot.loader.grub.efiInstallAsRemovable = true;
boot.initrd.enable = false;
boot.kernel.enable = false;
# Hook function will be called in stage-2-init and before running systemd.
boot.postBootCommands = ''
echo "Executing postBootCommands..."
rm -rf /etc/resolv.conf
ln -s ${resolv-conf} /etc/resolv.conf
if [ "${builtins.getEnv "NIXOS_DISABLE_SYSTEMD"}" = "true" ]; then
${builtins.getEnv "NIXOS_STAGE_2_INIT"}
fi
'';
2025-12-09 07:30:02 +00:00
# Execute test-command on hvc0 console after boot if the test-command is
# not empty (for CI testing).
environment.loginShellInit =
lib.mkIf ("${builtins.getEnv "NIXOS_TEST_COMMAND"}" != "") ''
if [ "$(tty)" = "/dev/hvc0" ]; then
${builtins.getEnv "NIXOS_TEST_COMMAND"}
poweroff
fi
'';
system.systemBuilderCommands = ''
echo "PATH=/bin:/nix/var/nix/profiles/system/sw/bin ostd.log_level=${
builtins.getEnv "LOG_LEVEL"
} console=${
builtins.getEnv "CONSOLE"
} -- sh /init root=/dev/vda2 init=/nix/var/nix/profiles/system/stage-2-init rd.break=${break-into-stage1-shell}" > $out/kernel-params
mv $out/init $out/stage-2-init
sed -i 's_^\([[:space:]]*\)\(exec > >(tee -i /run/log/stage-2-init.log) 2>&1\)$_\1# \2_' $out/stage-2-init
if [ "${builtins.getEnv "NIXOS_DISABLE_SYSTEMD"}" = "true" ]; then
sed -i 's/^[[:space:]]*echo "starting systemd..."$/# &/' $out/stage-2-init
sed -i 's/^[[:space:]]*exec \/run\/current-system\/systemd\/lib\/systemd\/systemd "$@"$/# &/' $out/stage-2-init
fi
rm -rf $out/init
ln -s /bin/busybox $out/init
ln -s ${kernel} $out/kernel
ln -s ${initramfs}/initrd $out/initrd
'';
system.activationScripts.modprobe = lib.mkForce "";
nix.settings = {
filter-syscalls = false;
require-sigs = false;
sandbox = false;
};
}