Resolveu. Acontece que eu precisava redefinir os descritores de arquivo stdout e stderr que eu usei antes de chamar switch_root
no stage-1-init.sh.
Estou tentando registrar a saída de inicialização inicial do script de inicialização. É isso que está funcionando:
mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2
tee -i < /tmp/stage-1-init.log.fifo1 /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1
O snippet acima é colocado no script de inicialização inicial (shell é busybox ash) dentro do initrd, e a saída é registrada no arquivo /run/log/stage-1-init.log
e eu posso vê-lo mais tarde dentro do sistema inicializado, e há conteúdo dentro dele.
No entanto, também estou tentando adicionar um filtro sed
para filtrar linhas vazias:
mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2
tee -i < /tmp/stage-1-init.log.fifo1 /tmp/stage-1-init.log.fifo2 &
sed '/^$/d' < /tmp/stage-1-init.log.fifo2 > /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1
No momento em que mudo para o script inferior, não há saída em /run/log/stage-1-init.log
. O arquivo está completamente vazio, mas o arquivo é criado.
Instalei o busybox localmente no sistema inicializado para testar as versões ASH e busybox do tee e do sed e executei a variante inferior e funcionou. Mas, por algum motivo, durante a inicialização, a variante inferior resulta em um arquivo de log vazio.
O que poderia dar errado? Parece que tem algo a ver com o redirecionamento?
Resolveu. Acontece que eu precisava redefinir os descritores de arquivo stdout e stderr que eu usei antes de chamar switch_root
no stage-1-init.sh.
Tags tee sed busybox ash init-script