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).