You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.8 KiB
109 lines
2.8 KiB
#!@l_prefix@/bin/bash |
|
## |
|
## openpkg-docker.sh -- OpenPKG Docker shell |
|
## |
|
|
|
# OpenPKG instance configuration |
|
prefix="@l_prefix@" |
|
|
|
# allow images to hook command into this entrypoint shell |
|
if [ -f "$prefix/etc/openpkg-docker/local.sh" ]; then |
|
source "$prefix/etc/openpkg-docker/local.sh" |
|
fi |
|
|
|
# the default commands |
|
cmd_start () { |
|
echo "++ starting OpenPKG service(s)" |
|
$prefix/bin/openpkg rc all start |
|
} |
|
cmd_stop () { |
|
echo "++ stopping OpenPKG service(s)" |
|
$prefix/bin/openpkg rc all stop |
|
} |
|
cmd_shell () { |
|
echo "++ entering GNU Bash shell" |
|
$prefix/bin/bash "$@" |
|
echo "++ leaving GNU Bash shell" |
|
} |
|
cmd_help () { |
|
echo "++ available OpenPKG Docker shell commands:" |
|
echo "-- help ............ display this help message" |
|
echo "-- quit ............ quit from this shell" |
|
echo "-- start ........... start all OpenPKG services" |
|
echo "-- stop ............ stop all OpenPKG services" |
|
echo "-- shell ........... enter GNU Bash shell" |
|
} |
|
cmd_quit () { |
|
echo "** leaving OpenPKG Docker shell" |
|
exit 0 |
|
} |
|
|
|
# dispatch a particular command (with optional arguments) |
|
dispatch () { |
|
name="$1" |
|
shift |
|
if [ ".$(type -t cmd_${name})" = .function ]; then |
|
if [ ".$(type -t cmd_${name}_before)" = .function ]; then |
|
eval "cmd_${name}_before" "$@" |
|
fi |
|
eval "cmd_${name}" "$@" |
|
if [ $? -eq 0 ]; then |
|
if [ ".$(type -t cmd_${name}_after)" = .function ]; then |
|
eval "cmd_${name}_after" "$@" |
|
fi |
|
fi |
|
else |
|
echo "** ERROR: invalid command \"$name\"" |
|
fi |
|
} |
|
|
|
# gracefully shutdown on catched signals |
|
trap 'if [ $auto = yes ]; then dispatch "stop"; fi; dispatch "quit"' HUP INT QUIT TERM |
|
|
|
# support suppression of automatic start/stop commands |
|
auto=yes |
|
if [ ".$1" = ".--no-auto" ]; then |
|
shift |
|
auto=no |
|
fi |
|
|
|
# dispatch processing according to usage pattern |
|
if [ $# -ge 1 ]; then |
|
# one-time command |
|
cmd="$1" |
|
shift |
|
dispatch "$cmd" "$@" |
|
elif tty -s; then |
|
# interative session |
|
echo "** entering OpenPKG Docker shell (interactive session, pid: $BASHPID)" |
|
if [ $auto = yes ]; then |
|
dispatch "start" |
|
fi |
|
dispatch "help" |
|
while true; do |
|
read -e -p ">> " -a cmd |
|
if [ $? -ne 0 ]; then |
|
echo "quit" |
|
if [ $auto = yes ]; then |
|
dispatch "stop" |
|
fi |
|
cmd=("quit") |
|
elif [ ".${cmd[*]}" = .quit ]; then |
|
if [ $auto = yes ]; then |
|
dispatch "stop" |
|
fi |
|
elif [ ".${cmd[*]}" = . ]; then |
|
continue |
|
fi |
|
dispatch "${cmd[@]}" |
|
done |
|
else |
|
# non-interactive service loop |
|
if [ $auto = yes ]; then |
|
dispatch "start" |
|
fi |
|
while true; do |
|
sleep 600 |
|
done |
|
fi |
|
|
|
|