From 142f65e07a7f3c8d37eb150443140213d80a7046 Mon Sep 17 00:00:00 2001 From: Roger Qiu Date: Mon, 22 Feb 2016 16:42:24 +1100 Subject: nixos/stage-1: Added boot.initrd.logCommands --- nixos/modules/system/boot/stage-1-init.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'nixos/modules/system/boot/stage-1-init.sh') diff --git a/nixos/modules/system/boot/stage-1-init.sh b/nixos/modules/system/boot/stage-1-init.sh index 95df0ace1ca4..94cecdf1fd79 100644 --- a/nixos/modules/system/boot/stage-1-init.sh +++ b/nixos/modules/system/boot/stage-1-init.sh @@ -71,6 +71,24 @@ mount -t devtmpfs -o "size=@devSize@" devtmpfs /dev mkdir -p /run mount -t tmpfs -o "mode=0755,size=@runSize@" tmpfs /run +# Optionally log the script output to /dev/kmsg or /run/log/stage-1-init.log +if test -n "@logCommands@"; then + mkdir -p /tmp + mkfifo /tmp/stage-1-init.log.fifo + logOutFd=8 && logErrFd=9 + eval "exec $logOutFd>&1 $logErrFd>&2" + if test -w /dev/kmsg; then + tee -i < /tmp/stage-1-init.log.fifo /proc/self/fd/"$logOutFd" | while read line; do + if test -n "$line"; then + echo "stage-1-init: $line" > /dev/kmsg + fi + done & + else + mkdir -p /run/log + tee -i < /tmp/stage-1-init.log.fifo /run/log/stage-1-init.log & + fi + exec > /tmp/stage-1-init.log.fifo 2>&1 +fi # Process the kernel command line. export stage2Init=/init @@ -415,6 +433,14 @@ fi # Stop udevd. udevadm control --exit +# Reset the logging file descriptors. +# Do this just before pkill, which will kill the tee process. +if test -n "@logCommands@" +then + exec 1>&$logOutFd 2>&$logErrFd + eval "exec $logOutFd>&- $logErrFd>&-" +fi + # Kill any remaining processes, just to be sure we're not taking any # with us into stage 2. But keep storage daemons like unionfs-fuse. pkill -9 -v -f '@' -- cgit 1.4.1