docker-kopano/assets/setup-runit.sh

99 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
# use /etc/service if $docker_build_runit_root not already defined
docker_build_runit_root=${docker_build_runit_root-/etc/service}
#docker_build_svlog_root=${docker_build_svlog_root-/var/log/sv}
#
# Define helpers
#
define_formats() {
name=$(basename $0)
f_norm="\e[0m"
f_bold="\e[1m"
f_red="\e[91m"
f_green="\e[92m"
f_yellow="\e[93m"
}
inform() {
echo "$f_bold${f_green}INFO ($name)${f_norm} $@"
}
#
# initialize runit services
#
init_service() {
# create runit 'run' script for service
# if service is part of kopano suite alos make the 'run' script
# delete lingering pid files, which appears to happen to kopano-search
local cmd="$1"
shift
local runit_dir=$docker_build_runit_root/${cmd##*/}
local svlog_dir=$docker_build_svlog_root/${cmd##*/}
local clear_pids_str=
if echo $cmd | grep kopano - >/dev/null; then
clear_pids_str="rm -f /var/run/kopano/${cmd#*kopano-}.pid*"
fi
cmd=$(which $cmd)
if [ ! -z "$cmd" ]; then
mkdir -p $runit_dir
cat <<-!cat > $runit_dir/run
#!/bin/sh -e
#exec 2>&1
$(echo $clear_pids_str)
exec $cmd $@
!cat
chmod +x $runit_dir/run
inform "runit configured to run: $cmd $@"
if [ -n "$docker_build_svlog_root" ]; then
mkdir -p $runit_dir/log $svlog_dir
cat <<-!cat > $runit_dir/log/run
#!/bin/sh
exec svlogd -tt $svlog_dir
!cat
chmod +x $runit_dir/log/run
fi
fi
}
init_services() {
for cmd in "$@" ; do
init_service $cmd
done
}
down_service() {
local cmd="$1"
touch $docker_build_runit_root/$cmd/down
inform "runit configured to down: $cmd"
}
down_services() {
for cmd in "$@" ; do
down_service $cmd
done
}
setup_services() {
case "$1" in
-d|--down)
shift
init_services "$@"
down_services "$@"
;;
*)
init_services "$@"
;;
esac
}
#
# run
#
define_formats
setup_services "$@"