nixos/stage-2: Added boot.logCommands

Changed files
+33 -1
nixos
modules
+24
nixos/modules/system/boot/stage-2-init.sh
···
mount -t tmpfs -o "mode=0755" tmpfs /var/setuid-wrappers
+
# Optionally log the script output to /dev/kmsg or /run/log/stage-2-init.log.
+
# Only at this point are all the necessary prerequisites ready for these commands.
+
if test -n "@logCommands@"; then
+
exec {logOutFd}>&1 {logErrFd}>&2
+
if test -w /dev/kmsg; then
+
exec > >(tee -i /proc/self/fd/"$logOutFd" | while read line; do
+
if test -n "$line"; then
+
echo "stage-2-init: $line" > /dev/kmsg
+
fi
+
done) 2>&1
+
else
+
mkdir -p /run/log
+
exec > >(tee -i /run/log/stage-2-init.log) 2>&1
+
fi
+
fi
+
+
# Run the script that performs all configuration activation that does
# not have to be done at boot time.
echo "running activation script..."
···
# Run any user-specified commands.
@shell@ @postBootCommands@
+
+
+
# Reset the logging file descriptors
+
if test -n "@logCommands@"; then
+
exec 1>&$logOutFd 2>&$logErrFd
+
exec {logOutFd}>&- {logErrFd}>&-
+
fi
# Start systemd.
+9 -1
nixos/modules/system/boot/stage-2.nix
···
src = ./stage-2-init.sh;
shellDebug = "${pkgs.bashInteractive}/bin/bash";
isExecutable = true;
-
inherit (config.boot) devShmSize runSize;
+
inherit (config.boot) logCommands devShmSize runSize;
inherit (config.nix) readOnlyStore;
inherit (config.networking) useHostResolvConf;
ttyGid = config.ids.gids.tty;
···
options = {
boot = {
+
+
logCommands = mkOption {
+
default = false;
+
type = types.bool;
+
description = ''
+
Whether to replicate command output of stage-1 booting to <filename>/dev/kmsg</filename> or <filename>/run/log/stage-2-init.log</filename> if <filename>/dev/kmsg</filename> is not writable.
+
'';
+
};
postBootCommands = mkOption {
default = "";