Hey everybody,I scripted shutdown stage 3 and 4 based on s6-linux-init-shutdownd and it works quite well,
even though being VERY rough around the edges currently:(Linux-powertool is a minimal program that just makes the syscall to halt, poweroff or reboot)
| #!/bin/execlineb -P
|
| multisubstitute {
| importas -SD /etc/s6-rc G6CONFIGDIR
| importas -SD /run G6LIVEDIR
| }
|
| fdmove -c 2 1
| redirfd -w 1 /dev/console
| redirfd -r 0 /dev/null
|
| tryexec { ./stage3b }
|
| foreground { rm -f fifo }
| foreground { mkfifo -m 0700 fifo }
| foreground { fdmove 1 3 echo "" }
| redirfd -r 0 fifo
| withstdinas -E DIRECTIVE
|
| if { eltest \\\\${DIRECTIVE} =~ ^-[hpr]$ }
|
| foreground { s6-rc -l ${G6LIVEDIR}/s6-rc -v2 -bDa -t 10000 change }
| foreground {
| pipeline { ls -1 ${G6LIVEDIR}/service/ }
| pipeline { sed /g6-shutdown/d }
| forstdin -pE SERVICE
| mv -f ${G6LIVEDIR}/service/${SERVICE}
${G6LIVEDIR}/service/.${SERVICE}
| }
| foreground { s6-svscanctl -h ${G6LIVEDIR}/service }
|
| foreground {
| redirfd -w 1 stage3b
| echo "#!/bin/execlineb
| tryexec { ./stage4 }
| foreground { mv stage4p stage4 }
| foreground { kill -SIGCONT -- -1 }
| foreground { sleep 1 }
| foreground { echo sending all processes the KILL signal... }
| foreground { kill -SIGKILL -- -1 }"
| }
| foreground { chmod o+x stage3b }
|
| foreground {
| redirfd -w 1 stage4p
| echo "#!/bin/execlineb
| foreground { mount -o remount,ro / }
| foreground { umount -a }
| linux-powertool ${DIRECTIVE}"
| }
| foreground { chmod o+x stage4p }
|
| foreground { echo "sending all processes the TERM signal..." }
| foreground { kill -SIGTERM -- -1 }
Now I was wondering why you, Laurent recommend against using the finish
script of s6-svscan
for the shutdown procedure (here:
https://skarnet.org/software/s6/s6-svscan-1.html#stage3).
Using that would make good portion of my implementation more elegant and simple, especially all the dance around creating scripts to be ran by "tryexec" after being restarted upon being signaled to stop...
I figured that other people might also have some interest in this, so I am posting the question here. Regards, Paul
OpenPGP_0x71C7C85A2EA30F62.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature
