Se houver uma linha em /etc/inittab como:
::restart:/tmp/updater_stage2
Então, se você enviar SIGQUIT para init , ele será substituído por / tmp / updater_stage2. Para recarregar /etc/inittab depois de ter alterado, envie SIGHUP. Você pode substituir /etc/inittab por uma montagem de ligação:
mount --bind /tmp/inittab /etc/inittab
kill -HUP 1
sleep 1
kill -QUIT 1
Se não houver /etc/inittab ou suporte para inittab em não compilado em init será executado init , então você terá que substituir /sbin/init como:
mkdir /tmp/old_sbin
mount --bind /sbin /tmp/old_sbin
cp -as /tmp/old_sbin /tmp/new_sbin
ln -sf /tmp/updater_stage2 /tmp/new_sbin/init
mount --bind /tmp/new_sbin /sbin
kill -QUIT 1
Você pode usar pivot_root e chroot para substituir o sistema de arquivos raiz, o qual poderá desmontar (depois de mover /tmp , /proc etc).