Aqui está uma solução simples para o boot do Slackware 14.2 (inicialização BSD, não systemd) via PXE com o sistema de arquivos raiz servido somente leitura através do NFS.
Eu simplesmente modifiquei /etc/rc.d/rc.S
para copiar as pastas que precisam ser graváveis ( /etc
e /var
) em um sistema de arquivos tmpfs, monte sistemas de arquivos temporários sobre as pastas originais e mova as cópias para os sistemas de arquivos temporários:
# Copy /etc and /var as tmpfs prior to starting any processes.
echo "Creating volatile copies of /etc and /var in memory..."
mount -t tmpfs -o size=256m tmpfs /tmp
cp -a /etc /tmp/etc
mount -t tmpfs -o size=16m tmpfs /etc
mv /tmp/etc/* /etc/
rmdir /tmp/etc
cp -a /var /tmp/var
mount -t tmpfs -o size=16m tmpfs /var
mv /tmp/var/* /var/
rmdir /tmp/var
O acima foi inserido na parte superior de rc.S
, precedido apenas pela linha que define a variável PATH
. Isso é executado no início do init, antes de qualquer outra partição ser montada ou iniciar serviços.
Quaisquer alterações nessas cópias na memória são simplesmente descartadas na reinicialização.