|
@@ -9,6 +9,11 @@ trap : INT # guard against ^C as much as possible
|
|
|
prog=/run/s6/basedir/scripts/rc.init
|
|
|
top="$1" ; shift
|
|
|
|
|
|
+haltwith () {
|
|
|
+ echo "$1" > /run/s6-linux-init-container-results/exitcode
|
|
|
+ exec /run/s6/basedir/bin/halt
|
|
|
+}
|
|
|
+
|
|
|
if test -d /run/s6/container_environment ; then
|
|
|
s6-chmod 0755 /run/s6/container_environment
|
|
|
fi
|
|
@@ -21,13 +26,26 @@ if test "$cv" -lt 0 ; then
|
|
|
cv=0
|
|
|
fi
|
|
|
|
|
|
+if b=`printcontenv S6_BEHAVIOUR_IF_STAGE2_FAILS` && eltest "$b" =~ '^[[:digit:]]+$' ; then : ; else
|
|
|
+ b=0
|
|
|
+fi
|
|
|
+
|
|
|
if hook=`printcontenv S6_STAGE2_HOOK` && test -n "$hook" ; then
|
|
|
set +e
|
|
|
$hook
|
|
|
r=$?
|
|
|
set -e
|
|
|
- if eltest "$r" -gt 0 -a "$v" -gt 0 ; then
|
|
|
- echo "$prog: warning: hook $hook exited $r" 1>&2
|
|
|
+ if test "$r" -gt 0 ; then
|
|
|
+ if test "$b" -ge 2 ; then
|
|
|
+ echo "$prog: fatal: hook $hook exited $r" 1>&2
|
|
|
+ elif test "$v" -ge 1 ; then
|
|
|
+ echo "$prog: warning: hook $hook exited $r" 1>&2
|
|
|
+ fi
|
|
|
+ if test "$b" -ge 2 ; then
|
|
|
+ haltwith "$r"
|
|
|
+ fi
|
|
|
+ elif test "$v" -ge 2 ; then
|
|
|
+ echo "$prog: info: hook $hook exited $r" 1>&2
|
|
|
fi
|
|
|
fi
|
|
|
|
|
@@ -49,12 +67,11 @@ s6-rc -v$v -u -t "$timeout" -- change "$top"
|
|
|
r=$?
|
|
|
set -e
|
|
|
|
|
|
-if b=`printcontenv S6_BEHAVIOUR_IF_STAGE2_FAILS` && eltest "$r" -gt 0 -a "$b" =~ '^[[:digit:]]+$' -a "$b" -gt 0 ; then
|
|
|
+if test "$r" -gt 0 && test "$b" -gt 0 ; then
|
|
|
echo "$prog: warning: s6-rc failed to properly bring all the services up! Check your logs (in /run/uncaught-logs/current if you have in-container logging) for more information." 1>&2
|
|
|
if test "$b" -ge 2 ; then
|
|
|
echo "$prog: fatal: stopping the container." 1>&2
|
|
|
- echo "$r" > /run/s6-linux-init-container-results/exitcode
|
|
|
- exec /run/s6/basedir/bin/halt
|
|
|
+ haltwith "$r"
|
|
|
fi
|
|
|
fi
|
|
|
|
|
@@ -62,10 +79,10 @@ if test "$#" -gt 0 ; then
|
|
|
cd `s6-cat < /run/s6/workdir`
|
|
|
set +e
|
|
|
arg0=`printcontenv S6_CMD_ARG0`
|
|
|
- if b=`printcontenv S6_CMD_USE_TERMINAL` && eltest "$b" =~ '^[[:digit:]]+$' -a "$b" -gt 0 && b=`tty` ; then
|
|
|
- arg0="redirfd -w 1 $b fdmove -c 2 1 $arg0"
|
|
|
+ if t=`printcontenv S6_CMD_USE_TERMINAL` && eltest "$t" =~ '^[[:digit:]]+$' -a "$t" -gt 0 && t=`tty` ; then
|
|
|
+ arg0="redirfd -w 1 $t fdmove -c 2 1 $arg0"
|
|
|
fi
|
|
|
- if b=`printcontenv S6_CMD_RECEIVE_SIGNALS` && eltest "$b" =~ '^[[:digit:]]+$' -a "$b" -gt 0 ; then
|
|
|
+ if s=`printcontenv S6_CMD_RECEIVE_SIGNALS` && eltest "$s" =~ '^[[:digit:]]+$' -a "$s" -gt 0 ; then
|
|
|
$arg0 "$@" &
|
|
|
cmdpid="$!"
|
|
|
echo "$cmdpid" > /run/s6/cmdpid
|
|
@@ -77,6 +94,5 @@ if test "$#" -gt 0 ; then
|
|
|
r="$?"
|
|
|
fi
|
|
|
set -e
|
|
|
- echo "$r" > /run/s6-linux-init-container-results/exitcode
|
|
|
- exec /run/s6/basedir/bin/halt
|
|
|
+ haltwith "$r"
|
|
|
fi
|