1
0
mirror of https://github.com/zokradonh/kopano-docker synced 2025-06-07 07:56:12 +00:00

implement new env variable to disable all automatic actions (#434)

* implement new env variable to disable all automatic actions

fixes https://github.com/zokradonh/kopano-docker/issues/360

* wrap the remaining services in checks if autoconfigure/disable_checks is used
* move definition of AUTOCONFIGURE variable into base image
* add logic to kapps and kdav container
* add autoconfigure to konnect container
* update build stage to latest golang
* add autoconfig to remaining images
* delete obsolete apache config in z-push folder
* when specifying config paths use KOPANO_CONFIG_PATH
* also use env variable in helper scripts
* add message about removal of kopano-cli
This commit is contained in:
Felix Bartels 2020-08-28 09:48:32 +02:00 committed by GitHub
parent 3d7ff97aab
commit d514ef44cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 617 additions and 566 deletions

View File

@ -11,6 +11,7 @@ ARG KOPANO_UID=999
ARG KOPANO_GID=999 ARG KOPANO_GID=999
ENV \ ENV \
AUTOCONFIGURE=true \
BASE_VERSION=2.2.0 \ BASE_VERSION=2.2.0 \
DEBIAN_FRONTEND=noninteractive \ DEBIAN_FRONTEND=noninteractive \
DEBUG="" DEBUG=""

View File

@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
/usr/sbin/kopano-autorespond -C /tmp/kopano/autorespond.cfg "$@" /usr/sbin/kopano-autorespond -C "$KOPANO_CONFIG_PATH/autorespond.cfg" "$@"

View File

@ -1,3 +1,8 @@
#!/bin/bash #!/bin/bash
/usr/sbin/kopano-cli --config /tmp/kopano/admin.cfg "$@" if [ ! -f /usr/sbin/kopano-cli ]; then
echo "kopano-cli has been removed from Kopano Groupware Core 10 and upwards. Please use kopano-admin instead."
exit 1
fi
/usr/sbin/kopano-cli --config "$KOPANO_CONFIG_PATH/admin.cfg" "$@"

View File

@ -4,6 +4,7 @@ set -eu # unset variables are errors & non-zero return values exit the whole scr
[ "$DEBUG" ] && set -x [ "$DEBUG" ] && set -x
ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""} ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
AUTOCONFIGURE=${AUTOCONFIGURE:-true} # when set to false will disable all automatic configuration actions
KCCONF_SERVER_MYSQL_SOCKET=${KCCONF_SERVER_MYSQL_SOCKET:-""} KCCONF_SERVER_MYSQL_SOCKET=${KCCONF_SERVER_MYSQL_SOCKET:-""}
DISABLE_CHECKS=${DISABLE_CHECKS:-false} DISABLE_CHECKS=${DISABLE_CHECKS:-false}
DISABLE_CONFIG_CHANGES=${DISABLE_CONFIG_CHANGES:-false} DISABLE_CONFIG_CHANGES=${DISABLE_CONFIG_CHANGES:-false}
@ -16,20 +17,22 @@ KCCONF_SPOOLER_SERVER_SOCKET=${KCCONF_SPOOLER_SERVER_SOCKET:-"file:///var/run/ko
KOPANO_CON=${KOPANO_CON:-"file:///var/run/kopano/server.sock"} KOPANO_CON=${KOPANO_CON:-"file:///var/run/kopano/server.sock"}
KCCONF_SPOOLER_SMTP_SERVER=${KCCONF_SPOOLER_SMTP_SERVER:-mail} KCCONF_SPOOLER_SMTP_SERVER=${KCCONF_SPOOLER_SMTP_SERVER:-mail}
KCCONF_SPOOLER_SMTP_PORT=${KCCONF_SPOOLER_SMTP_PORT:-25} KCCONF_SPOOLER_SMTP_PORT=${KCCONF_SPOOLER_SMTP_PORT:-25}
KOPANO_CONFIG_PATH=${KOPANO_CONFIG_PATH:-/tmp/kopano}
# copy configuration files to /tmp/kopano to prevent modification of mounted config files if [ "${AUTOCONFIGURE}" == true ]; then
mkdir -p /tmp/kopano # copy configuration files to /tmp/kopano (default value of $KOPANO_CONFIG_PATH) to prevent modification of mounted config files
cp /etc/kopano/*.cfg /tmp/kopano mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano
if [ ! -e /kopano/"$SERVICE_TO_START".py ]; then if [ ! -e /kopano/"$SERVICE_TO_START".py ]; then
echo "Invalid service specified: $SERVICE_TO_START" | ts echo "Invalid service specified: $SERVICE_TO_START" | ts
exit 1 exit 1
fi fi
# Hint: this is not compatible with a read-only container. # Hint: this is not compatible with a read-only container.
# The general recommendation is to already build a container that has all required packages installed. # The general recommendation is to already build a container that has all required packages installed.
ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"') ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"')
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do
# shellcheck disable=SC2016 disable=SC2086 # shellcheck disable=SC2016 disable=SC2086
@ -39,23 +42,24 @@ if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
echo "INFO: $installpkg is already installed" echo "INFO: $installpkg is already installed"
fi fi
done done
else else
echo "Notice: Container is run read-only, skipping package installation." echo "Notice: Container is run read-only, skipping package installation."
echo "If you want to have additional packages installed in the container either:" echo "If you want to have additional packages installed in the container either:"
echo "- build your own image with the packages already included" echo "- build your own image with the packages already included"
echo "- switch the container to 'read_only: false'" echo "- switch the container to 'read_only: false'"
fi fi
mkdir -p /tmp/"$SERVICE_TO_START" /var/run/kopano mkdir -p /tmp/"$SERVICE_TO_START" /var/run/kopano
# TODO is this still required now that we won't modify configuration mounted to /etc/kopano? # TODO is this still required now that we won't modify configuration mounted to /etc/kopano?
if [ "${DISABLE_CONFIG_CHANGES}" == false ]; then if [ "${DISABLE_CONFIG_CHANGES}" == false ]; then
echo "Configure core service '$SERVICE_TO_START'" | ts echo "Configure core service '$SERVICE_TO_START'" | ts
/kopano/"$SERVICE_TO_START".py /kopano/"$SERVICE_TO_START".py
fi fi
# ensure removed pid-file on unclean shutdowns and mounted volumes # ensure removed pid-file on unclean shutdowns and mounted volumes
rm -f /var/run/kopano/"$SERVICE_TO_START".pid rm -f /var/run/kopano/"$SERVICE_TO_START".pid
fi
coreversion=$(dpkg-query --showformat='${Version}' --show kopano-server) coreversion=$(dpkg-query --showformat='${Version}' --show kopano-server)
echo "Using Kopano Groupware Core: $coreversion" echo "Using Kopano Groupware Core: $coreversion"
@ -67,7 +71,7 @@ if [ $# -gt 0 ]; then
fi fi
# services need to be aware of the machine-id # services need to be aware of the machine-id
if [[ "$DISABLE_CHECKS" == false ]]; then if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id
@ -119,6 +123,7 @@ fi
# start regular service # start regular service
case "$SERVICE_TO_START" in case "$SERVICE_TO_START" in
server) server)
if [ "${AUTOCONFIGURE}" == true ]; then
echo "Set ownership" | ts echo "Set ownership" | ts
mkdir -p /kopano/data/attachments mkdir -p /kopano/data/attachments
chown kopano:kopano /kopano/data/ /kopano/data/attachments chown kopano:kopano /kopano/data/ /kopano/data/attachments
@ -139,37 +144,45 @@ server)
fi fi
# pre populate database # pre populate database
if dpkg --compare-versions "$coreversion" "gt" "8.7.84"; then if dpkg --compare-versions "$coreversion" "gt" "8.7.84"; then
kopano-dbadm -c /tmp/kopano/server.cfg populate kopano-dbadm -c "$KOPANO_CONFIG_PATH/server.cfg" populate
fi
fi fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -F exec "$EXE" -F
;; ;;
dagent) dagent)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -l exec "$EXE" -l
;; ;;
gateway) gateway)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -F exec "$EXE" -F
;; ;;
ical) ical)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -F exec "$EXE" -F
;; ;;
grapi) grapi)
if [ "${AUTOCONFIGURE}" == true ]; then
LC_CTYPE=en_US.UTF-8 LC_CTYPE=en_US.UTF-8
export socket_path=/var/run/kopano/grapi export socket_path=/var/run/kopano/grapi
export pid_file="$socket_path/grapi.pid" export pid_file="$socket_path/grapi.pid"
@ -188,9 +201,10 @@ grapi)
fi fi
;; ;;
esac esac
sed s/\ *=\ */=/g /tmp/kopano/grapi.cfg > /tmp/grapi-env sed s/\ *=\ */=/g "$KOPANO_CONFIG_PATH/grapi.cfg" > /tmp/grapi-env
# shellcheck disable=SC2046 # shellcheck disable=SC2046
export $(grep -v '^#' /tmp/grapi-env | xargs -d '\n') export $(grep -v '^#' /tmp/grapi-env | xargs -d '\n')
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
# the backend option is only available in more recent versions of grapi # the backend option is only available in more recent versions of grapi
@ -203,6 +217,7 @@ grapi)
fi fi
;; ;;
kapi) kapi)
if [ "${AUTOCONFIGURE}" == true ]; then
mkdir -p /kopano/data/kapi-kvs mkdir -p /kopano/data/kapi-kvs
if [ "$KCCONF_KAPID_INSECURE" = "yes" ]; then if [ "$KCCONF_KAPID_INSECURE" = "yes" ]; then
dockerize \ dockerize \
@ -214,54 +229,63 @@ kapi)
-wait "$KCCONF_KAPID_OIDC_ISSUER_IDENTIFIER"/.well-known/openid-configuration \ -wait "$KCCONF_KAPID_OIDC_ISSUER_IDENTIFIER"/.well-known/openid-configuration \
-timeout 360s -timeout 360s
fi fi
kapiversion=$(dpkg-query --showformat='${Version}' --show kopano-kapid)
echo "Using Kopano Kapi: $kapiversion"
LC_CTYPE=en_US.UTF-8 LC_CTYPE=en_US.UTF-8
sed s/\ *=\ */=/g /tmp/kopano/kapid.cfg > /tmp/kapid-env sed s/\ *=\ */=/g "$KOPANO_CONFIG_PATH/kapid.cfg" > /tmp/kapid-env
# shellcheck disable=SC2046 # shellcheck disable=SC2046
export $(grep -v '^#' /tmp/kapid-env | xargs -d '\n') export $(grep -v '^#' /tmp/kapid-env | xargs -d '\n')
"$EXE" setup "$EXE" setup
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
kapiversion=$(dpkg-query --showformat='${Version}' --show kopano-kapid)
echo "Using Kopano Kapi: $kapiversion"
exec "$EXE" serve --log-timestamp=false exec "$EXE" serve --log-timestamp=false
;; ;;
monitor) monitor)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -F exec "$EXE" -F
;; ;;
search) search)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
# give kopano-server a moment to settler before starting search # give kopano-server a moment to settler before starting search
sleep 5 sleep 5
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
# with commit 702bb3fccb3 search does not need -F any longer # with commit 702bb3fccb3 search does not need -F any longer
searchversion=$(dpkg-query --showformat='${Version}' --show kopano-search) searchversion=$(dpkg-query --showformat='${Version}' --show kopano-search)
if dpkg --compare-versions "$searchversion" "gt" "8.7.82.165"; then if dpkg --compare-versions "$searchversion" "gt" "8.7.82.165"; then
exec "$EXE" --config /tmp/kopano/search.cfg exec "$EXE" --config "$KOPANO_CONFIG_PATH/search.cfg"
else else
exec /usr/bin/python3 "$EXE" --config /tmp/kopano/search.cfg -F exec /usr/bin/python3 "$EXE" --config "$KOPANO_CONFIG_PATH/search.cfg" -F
fi fi
;; ;;
spamd) spamd)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-timeout 360s -timeout 360s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" --config /tmp/kopano/spamd.cfg -F exec "$EXE" --config "$KOPANO_CONFIG_PATH/spamd.cfg" -F
;; ;;
spooler) spooler)
if [ "${AUTOCONFIGURE}" == true ] && [ "$DISABLE_CHECKS" == false ]; then
dockerize \ dockerize \
-wait "$KOPANO_CON" \ -wait "$KOPANO_CON" \
-wait tcp://"$KCCONF_SPOOLER_SMTP_SERVER":"$KCCONF_SPOOLER_SMTP_PORT" \ -wait tcp://"$KCCONF_SPOOLER_SMTP_SERVER":"$KCCONF_SPOOLER_SMTP_PORT" \
-timeout 1080s -timeout 1080s
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"
exec "$EXE" -F exec "$EXE" -F

View File

@ -1,16 +1,19 @@
#!/bin/bash #!/bin/bash
ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""} ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
AUTOCONFIGURE=${AUTOCONFIGURE:-true} # when set to false will disable all automatic configuration actions
set -eu # unset variables are errors & non-zero return values exit the whole script set -eu # unset variables are errors & non-zero return values exit the whole script
[ "$DEBUG" ] && set -x [ "$DEBUG" ] && set -x
# copy configuration files to /tmp/kopano to prevent modification of mounted config files if [ "${AUTOCONFIGURE}" == true ]; then
mkdir -p /tmp/kopano # copy configuration files to /tmp/kopano to prevent modification of mounted config files
cp /etc/kopano/*.cfg /tmp/kopano mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano
echo "Applying cfg changes from env" echo "Applying cfg changes from env"
/usr/bin/python3 /kopano/cfg-from-env.py /usr/bin/python3 /kopano/cfg-from-env.py
fi
meetversion=$(dpkg-query --showformat='${Version}' --show kopano-calendar-webapp) meetversion=$(dpkg-query --showformat='${Version}' --show kopano-calendar-webapp)
echo "Using Kopano Calendar: $meetversion" echo "Using Kopano Calendar: $meetversion"
@ -21,11 +24,12 @@ if [ $# -gt 0 ]; then
exit exit
fi fi
cp /usr/share/doc/kopano-calendar-webapp/config.json.in /tmp/calendar.json if [ "${AUTOCONFIGURE}" == true ]; then
CONFIG_JSON="/tmp/calendar.json" cp /usr/share/doc/kopano-calendar-webapp/config.json.in /tmp/calendar.json
# TODO move into extra file to make it easier to reuse CONFIG_JSON="/tmp/calendar.json"
echo "Updating $CONFIG_JSON" # TODO move into extra file to make it easier to reuse
for setting in $(compgen -A variable KCCONF_CALENDAR); do echo "Updating $CONFIG_JSON"
for setting in $(compgen -A variable KCCONF_CALENDAR); do
setting2=${setting#KCCONF_CALENDAR_} setting2=${setting#KCCONF_CALENDAR_}
# dots in setting2 need to be escaped to not be handled as separate entities in the json file # dots in setting2 need to be escaped to not be handled as separate entities in the json file
case ${!setting} in case ${!setting} in
@ -36,42 +40,43 @@ for setting in $(compgen -A variable KCCONF_CALENDAR); do
jq ".\"${setting2//_/\".\"}\" = \"${!setting}\"" $CONFIG_JSON | sponge $CONFIG_JSON jq ".\"${setting2//_/\".\"}\" = \"${!setting}\"" $CONFIG_JSON | sponge $CONFIG_JSON
;; ;;
esac esac
done done
# Populate app grid # Populate app grid
# TODO move into extra file to make it easier to reuse # TODO move into extra file to make it easier to reuse
# Note: if all of below variables are set to "no" kpop will fall back to its default behaviour and show all known apps. # Note: if all of below variables are set to "no" kpop will fall back to its default behaviour and show all known apps.
# enable Kopano Konnect in the app grid # enable Kopano Konnect in the app grid
if [ "${GRID_KONNECT:-yes}" = "yes" ]; then if [ "${GRID_KONNECT:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-konnect"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-konnect"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano Meet in the app grid # enable Kopano Meet in the app grid
if [ "${GRID_MEET:-yes}" = "yes" ]; then if [ "${GRID_MEET:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-meet"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-meet"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano WebApp in the app grid # enable Kopano WebApp in the app grid
if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano WebApp in the app grid # enable Kopano WebApp in the app grid
if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env
# always disable tls # always disable tls
export tls=no export tls=no
# shellcheck disable=SC2046 # shellcheck disable=SC2046
export $(grep -v '^#' /tmp/kweb-env | xargs -d '\n') export $(grep -v '^#' /tmp/kweb-env | xargs -d '\n')
# services need to be aware of the machine-id # services need to be aware of the machine-id
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"

View File

@ -1,17 +1,20 @@
#!/bin/bash #!/bin/bash
ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
AUTOCONFIGURE=${AUTOCONFIGURE:-true} # when set to false will disable all automatic configuration actions
# define default value for serverhostname and serverport if not passed into container # define default value for serverhostname and serverport if not passed into container
KCCONF_SERVERHOSTNAME=${KCCONF_SERVERHOSTNAME:-127.0.0.1} KCCONF_SERVERHOSTNAME=${KCCONF_SERVERHOSTNAME:-127.0.0.1}
KCCONF_SERVERPORT=${KCCONF_SERVERPORT:-236} KCCONF_SERVERPORT=${KCCONF_SERVERPORT:-236}
ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
set -eu # unset variables are errors & non-zero return values exit the whole script set -eu # unset variables are errors & non-zero return values exit the whole script
[ "$DEBUG" ] && set -x [ "$DEBUG" ] && set -x
# Hint: this is not compatible with a read-only container. if [ "${AUTOCONFIGURE}" == true ]; then
# The general recommendation is to already build a container that has all required packages installed. # Hint: this is not compatible with a read-only container.
ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"') # The general recommendation is to already build a container that has all required packages installed.
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"')
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do
# shellcheck disable=SC2016 disable=SC2086 # shellcheck disable=SC2016 disable=SC2086
@ -19,39 +22,40 @@ if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
apt --assume-yes --no-upgrade install "$installpkg" apt --assume-yes --no-upgrade install "$installpkg"
fi fi
done done
else else
echo "Notice: Container is run read-only, skipping package installation." echo "Notice: Container is run read-only, skipping package installation."
echo "If you want to have additional packages installed in the container either:" echo "If you want to have additional packages installed in the container either:"
echo "- build your own image with the packages already included" echo "- build your own image with the packages already included"
echo "- switch the container to 'read_only: false'" echo "- switch the container to 'read_only: false'"
fi fi
echo "Ensure directories" echo "Ensure directories"
mkdir -p /run/sessions mkdir -p /run/sessions
CONFIG_PHP=/tmp/config.php CONFIG_PHP=/tmp/config.php
# copy latest config template. This should be the mount point for preexisting config files. # copy latest config template. This should be the mount point for preexisting config files.
cp /usr/share/kdav/config.php.dist $CONFIG_PHP cp /usr/share/kdav/config.php.dist $CONFIG_PHP
if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then
echo "kDAV is using the default: connection" echo "kDAV is using the default: connection"
else else
echo "kDAV is using an ip connection" echo "kDAV is using an ip connection"
sed -e "s#define([\"']MAPI_SERVER[\"'],\s*[\"']default:[\"'])#define('MAPI_SERVER', 'https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano')#" \ sed -e "s#define([\"']MAPI_SERVER[\"'],\s*[\"']default:[\"'])#define('MAPI_SERVER', 'https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano')#" \
-i $CONFIG_PHP -i $CONFIG_PHP
fi
# change root uri to /kdav
sed -e "s#define('DAV_ROOT_URI', '/');#define('DAV_ROOT_URI', '/kdav/');#" -i $CONFIG_PHP
echo "Ensure config ownership"
chown -R www-data:www-data /run/sessions
# services need to be aware of the machine-id
#dockerize \
# -wait file:///etc/machine-id \
# -wait file:///var/lib/dbus/machine-id
fi fi
# change root uri to /kdav
sed -e "s#define('DAV_ROOT_URI', '/');#define('DAV_ROOT_URI', '/kdav/');#" -i $CONFIG_PHP
echo "Ensure config ownership"
chown -R www-data:www-data /run/sessions
# services need to be aware of the machine-id
#dockerize \
# -wait file:///etc/machine-id \
# -wait file:///var/lib/dbus/machine-id
touch /var/log/kdav/kdav.log touch /var/log/kdav/kdav.log
chown www-data:www-data /var/log/kdav/kdav.log chown www-data:www-data /var/log/kdav/kdav.log
tail --pid=$$ -F --lines=0 -q /var/log/kdav/kdav.log & tail --pid=$$ -F --lines=0 -q /var/log/kdav/kdav.log &

View File

@ -1,6 +1,6 @@
ARG CODE_VERSION=0.33.5 ARG CODE_VERSION=0.33.5
FROM golang:1.13.5-alpine3.10 as builder-sponge FROM golang:1.15-alpine3.12 as builder-sponge
RUN apk add --no-cache git RUN apk add --no-cache git
RUN go get -d -v github.com/go-moreutils/sponge RUN go get -d -v github.com/go-moreutils/sponge
@ -10,7 +10,9 @@ FROM kopano/konnectd:${CODE_VERSION}
ARG CODE_VERSION ARG CODE_VERSION
ENV CODE_VERSION="${CODE_VERSION}" \ ENV \
AUTOCONFIGURE=true \
CODE_VERSION="${CODE_VERSION}" \
DEBUG="" \ DEBUG="" \
FQDN=localhost \ FQDN=localhost \
KONNECT_BACKEND="kc" \ KONNECT_BACKEND="kc" \

View File

@ -11,17 +11,18 @@ if [ $# -gt 0 ]; then
exit exit
fi fi
signing_private_key=${signing_private_key:-"/etc/kopano/konnectd-signing-private-key.pem"} if [ "${AUTOCONFIGURE}" = true ]; then
validation_keys_path=${validation_keys_path:-"/etc/kopano/konnectkeys"} signing_private_key=${signing_private_key:-"/etc/kopano/konnectd-signing-private-key.pem"}
validation_keys_path=${validation_keys_path:-"/etc/kopano/konnectkeys"}
if ! true >> "$signing_private_key"; then if ! true >> "$signing_private_key"; then
# file can not be created in this container, wait for external creation # file can not be created in this container, wait for external creation
dockerize \ dockerize \
-wait file://"$signing_private_key" \ -wait file://"$signing_private_key" \
-timeout "$DOCKERIZE_TIMEOUT" -timeout "$DOCKERIZE_TIMEOUT"
fi fi
if [ -f "${signing_private_key}" ] && [ ! -s "${signing_private_key}" ]; then if [ -f "${signing_private_key}" ] && [ ! -s "${signing_private_key}" ]; then
mkdir -p "${validation_keys_path}" mkdir -p "${validation_keys_path}"
rnd=$(RANDFILE=/tmp/.rnd openssl rand -hex 2) rnd=$(RANDFILE=/tmp/.rnd openssl rand -hex 2)
key="${validation_keys_path}/konnect-$(date +%Y%m%d)-${rnd}.pem" key="${validation_keys_path}/konnect-$(date +%Y%m%d)-${rnd}.pem"
@ -31,24 +32,24 @@ if [ -f "${signing_private_key}" ] && [ ! -s "${signing_private_key}" ]; then
rm "$signing_private_key" rm "$signing_private_key"
ln -sn "${key}" "${signing_private_key}" ln -sn "${key}" "${signing_private_key}"
fi fi
fi fi
encryption_secret_key=${encryption_secret_key:-"/etc/kopano/konnectd-encryption-secret.key"} encryption_secret_key=${encryption_secret_key:-"/etc/kopano/konnectd-encryption-secret.key"}
if ! true >> "$encryption_secret_key"; then if ! true >> "$encryption_secret_key"; then
# file can not be created in this container, wait for external creation # file can not be created in this container, wait for external creation
dockerize \ dockerize \
-wait file://"$encryption_secret_key" \ -wait file://"$encryption_secret_key" \
-timeout "$DOCKERIZE_TIMEOUT" -timeout "$DOCKERIZE_TIMEOUT"
fi fi
if [ -f "${encryption_secret_key}" ] && [ ! -s "${encryption_secret_key}" ]; then if [ -f "${encryption_secret_key}" ] && [ ! -s "${encryption_secret_key}" ]; then
>&2 echo "setup: creating new secret key at ${encryption_secret_key} ..." >&2 echo "setup: creating new secret key at ${encryption_secret_key} ..."
RANDFILE=/tmp/.rnd openssl rand -out "${encryption_secret_key}" 32 RANDFILE=/tmp/.rnd openssl rand -out "${encryption_secret_key}" 32
fi fi
CONFIG_JSON=/tmp/konnectd-identifier-registration.yaml CONFIG_JSON=/tmp/konnectd-identifier-registration.yaml
if [ "${allow_client_guests:-}" = "yes" ]; then if [ "${allow_client_guests:-}" = "yes" ]; then
# Create working copy by merging packaged example in /etc/kopano with passed registration conf # Create working copy by merging packaged example in /etc/kopano with passed registration conf
yq -y -s '.[0] + .[1]' /etc/kopano/konnectd-identifier-registration.yaml "${identifier_registration_conf:?}" | sponge "$CONFIG_JSON" yq -y -s '.[0] + .[1]' /etc/kopano/konnectd-identifier-registration.yaml "${identifier_registration_conf:?}" | sponge "$CONFIG_JSON"
@ -91,9 +92,9 @@ if [ "${allow_client_guests:-}" = "yes" ]; then
else else
echo "Entrypoint: Skipping guest mode configuration, as it is already configured." echo "Entrypoint: Skipping guest mode configuration, as it is already configured."
fi fi
fi fi
if [ "${external_oidc_provider:-}" = "yes" ]; then if [ "${external_oidc_provider:-}" = "yes" ]; then
# Create working copy by merging packaged example in /etc/kopano with passed registration conf # Create working copy by merging packaged example in /etc/kopano with passed registration conf
yq -y -s '.[0] + .[1]' /etc/kopano/konnectd-identifier-registration.yaml "${identifier_registration_conf:?}" | sponge "$CONFIG_JSON" yq -y -s '.[0] + .[1]' /etc/kopano/konnectd-identifier-registration.yaml "${identifier_registration_conf:?}" | sponge "$CONFIG_JSON"
@ -111,6 +112,7 @@ if [ "${external_oidc_provider:-}" = "yes" ]; then
echo "Error: The Issuer does not match the configured url" echo "Error: The Issuer does not match the configured url"
exit 1 exit 1
fi fi
fi
fi fi
# source additional configuration from Konnect cfg (potentially overwrites env vars) # source additional configuration from Konnect cfg (potentially overwrites env vars)

View File

@ -2,7 +2,9 @@ ARG CODE_VERSION=0.1.0
FROM kopano/kwmbridged:${CODE_VERSION} FROM kopano/kwmbridged:${CODE_VERSION}
ARG CODE_VERSION ARG CODE_VERSION
ENV CODE_VERSION="${CODE_VERSION}" ENV \
AUTOCONFIGURE=true \
CODE_VERSION="${CODE_VERSION}"
LABEL maintainer=az@zok.xyz \ LABEL maintainer=az@zok.xyz \
org.label-schema.name="Kopano Kwmbridge container" \ org.label-schema.name="Kopano Kwmbridge container" \

View File

@ -45,21 +45,23 @@ if [ "$INSECURE" = "yes" ]; then
set -- "$@" --insecure set -- "$@" --insecure
fi fi
if [ "$INSECURE" = "yes" ]; then if [ "${AUTOCONFIGURE}" = true ]; then
if [ "$INSECURE" = "yes" ]; then
dockerize \ dockerize \
-skip-tls-verify \ -skip-tls-verify \
-wait "$oidc_issuer_identifier"/.well-known/openid-configuration \ -wait "$oidc_issuer_identifier"/.well-known/openid-configuration \
-timeout 360s -timeout 360s
else else
dockerize \ dockerize \
-wait "$oidc_issuer_identifier"/.well-known/openid-configuration \ -wait "$oidc_issuer_identifier"/.well-known/openid-configuration \
-timeout 360s -timeout 360s
fi fi
# services need to be aware of the machine-id # services need to be aware of the machine-id
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id
fi
exec kwmbridged serve \ exec kwmbridged serve \
"$@" "$@"

View File

@ -2,7 +2,9 @@ ARG CODE_VERSION=1.2.0
FROM kopano/kwmserverd:${CODE_VERSION} FROM kopano/kwmserverd:${CODE_VERSION}
ARG CODE_VERSION ARG CODE_VERSION
ENV CODE_VERSION="${CODE_VERSION}" ENV \
AUTOCONFIGURE=true \
CODE_VERSION="${CODE_VERSION}"
LABEL maintainer=az@zok.xyz \ LABEL maintainer=az@zok.xyz \
org.label-schema.name="Kopano Kwmserver container" \ org.label-schema.name="Kopano Kwmserver container" \

View File

@ -68,21 +68,23 @@ if [ -n "${public_guest_access_regexp:-}" ]; then
set -- "$@" --public-guest-access-regexp="$public_guest_access_regexp" set -- "$@" --public-guest-access-regexp="$public_guest_access_regexp"
fi fi
if [ "$INSECURE" = "yes" ]; then if [ "${AUTOCONFIGURE}" = true ]; then
if [ "$INSECURE" = "yes" ]; then
dockerize \ dockerize \
-skip-tls-verify \ -skip-tls-verify \
-wait "$oidc_issuer_identifier"/.well-known/openid-configuration \ -wait "$oidc_issuer_identifier"/.well-known/openid-configuration \
-timeout 360s -timeout 360s
else else
dockerize \ dockerize \
-wait "$oidc_issuer_identifier"/.well-known/openid-configuration \ -wait "$oidc_issuer_identifier"/.well-known/openid-configuration \
-timeout 360s -timeout 360s
fi fi
# services need to be aware of the machine-id # services need to be aware of the machine-id
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id
fi
registration_conf=${registration_conf:-/etc/kopano/kwmserverd-registration.yaml} registration_conf=${registration_conf:-/etc/kopano/kwmserverd-registration.yaml}

View File

@ -5,12 +5,14 @@ ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""}
set -eu # unset variables are errors & non-zero return values exit the whole script set -eu # unset variables are errors & non-zero return values exit the whole script
[ "$DEBUG" ] && set -x [ "$DEBUG" ] && set -x
# copy configuration files to /tmp/kopano to prevent modification of mounted config files if [ "${AUTOCONFIGURE}" == true ]; then
mkdir -p /tmp/kopano # copy configuration files to /tmp/kopano to prevent modification of mounted config files
cp /etc/kopano/*.cfg /tmp/kopano mkdir -p /tmp/kopano
cp /etc/kopano/*.cfg /tmp/kopano
echo "Applying cfg changes from env" echo "Applying cfg changes from env"
/usr/bin/python3 /kopano/cfg-from-env.py /usr/bin/python3 /kopano/cfg-from-env.py
fi
meetversion=$(dpkg-query --showformat='${Version}' --show kopano-meet-webapp) meetversion=$(dpkg-query --showformat='${Version}' --show kopano-meet-webapp)
echo "Using Kopano Meet: $meetversion" echo "Using Kopano Meet: $meetversion"
@ -21,10 +23,11 @@ if [ $# -gt 0 ]; then
exit exit
fi fi
cp /usr/share/doc/kopano-meet-webapp/config.json.in /tmp/meet.json if [ "${AUTOCONFIGURE}" == true ]; then
CONFIG_JSON="/tmp/meet.json" cp /usr/share/doc/kopano-meet-webapp/config.json.in /tmp/meet.json
echo "Updating $CONFIG_JSON" CONFIG_JSON="/tmp/meet.json"
for setting in $(compgen -A variable KCCONF_MEET); do echo "Updating $CONFIG_JSON"
for setting in $(compgen -A variable KCCONF_MEET); do
setting2=${setting#KCCONF_MEET_} setting2=${setting#KCCONF_MEET_}
# dots in setting2 need to be escaped to not be handled as separate entities in the json file # dots in setting2 need to be escaped to not be handled as separate entities in the json file
case ${!setting} in case ${!setting} in
@ -35,40 +38,41 @@ for setting in $(compgen -A variable KCCONF_MEET); do
jq ".\"${setting2//_/\".\"}\" = \"${!setting}\"" $CONFIG_JSON | sponge $CONFIG_JSON jq ".\"${setting2//_/\".\"}\" = \"${!setting}\"" $CONFIG_JSON | sponge $CONFIG_JSON
;; ;;
esac esac
done done
# Populate app grid # Populate app grid
# Note: if below variables are set to "no" kpop will fall back to its default behaviour and show all known apps. # Note: if below variables are set to "no" kpop will fall back to its default behaviour and show all known apps.
# enable Kopano Konnect in the app grid # enable Kopano Konnect in the app grid
if [ "${GRID_KONNECT:-yes}" = "yes" ]; then if [ "${GRID_KONNECT:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-konnect"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-konnect"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano Meet in the app grid # enable Kopano Meet in the app grid
if [ "${GRID_MEET:-yes}" = "yes" ]; then if [ "${GRID_MEET:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-meet"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-meet"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano WebApp in the app grid # enable Kopano WebApp in the app grid
if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then if [ "${GRID_WEBAPP:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-webapp"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
# enable Kopano WebApp in the app grid # enable Kopano WebApp in the app grid
if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then if [ "${GRID_CALENDAR:-yes}" = "yes" ]; then
jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON jq '.apps.enabled += ["kopano-calendar"]' $CONFIG_JSON | sponge $CONFIG_JSON
fi fi
sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env sed s/\ *=\ */=/g /tmp/kopano/kwebd.cfg > /tmp/kweb-env
# always disable tls # always disable tls
export tls=no export tls=no
# shellcheck disable=SC2046 # shellcheck disable=SC2046
export $(grep -v '^#' /tmp/kweb-env | xargs -d '\n') export $(grep -v '^#' /tmp/kweb-env | xargs -d '\n')
# services need to be aware of the machine-id # services need to be aware of the machine-id
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id
fi
# cleaning up env variables # cleaning up env variables
unset "${!KCCONF_@}" unset "${!KCCONF_@}"

View File

@ -12,7 +12,7 @@ LABEL maintainer=az@zok.xyz \
org.label-schema.schema-version="1.0" org.label-schema.schema-version="1.0"
ENV \ ENV \
AUTOCONFIG=yes \ AUTOCONFIGURE=true \
CODE_VERSION="${CODE_VERSION}" \ CODE_VERSION="${CODE_VERSION}" \
DEFAULTREDIRECT="/webapp" \ DEFAULTREDIRECT="/webapp" \
KONNECTPATH=kopanoid \ KONNECTPATH=kopanoid \

View File

@ -11,7 +11,7 @@ fi
export CADDYPATH="$KOPANO_KWEB_ASSETS_PATH" export CADDYPATH="$KOPANO_KWEB_ASSETS_PATH"
# services need to be aware of the machine-id # services need to be aware of the machine-id
if [ "$AUTOCONFIG" = "yes" ]; then if [ "$AUTOCONFIGURE" = true ]; then
dockerize \ dockerize \
-wait file:///etc/machine-id \ -wait file:///etc/machine-id \
-wait file:///var/lib/dbus/machine-id -wait file:///var/lib/dbus/machine-id

View File

@ -9,14 +9,15 @@ ADDITIONAL_KOPANO_WEBAPP_PLUGINS=${ADDITIONAL_KOPANO_WEBAPP_PLUGINS:-""}
set -eu # unset variables are errors & non-zero return values exit the whole script set -eu # unset variables are errors & non-zero return values exit the whole script
[ "$DEBUG" ] && set -x [ "$DEBUG" ] && set -x
# shellcheck source=php/start-helper.sh if [ "${AUTOCONFIGURE}" == true ]; then
source /kopano/start-helper.sh # shellcheck source=php/start-helper.sh
source /kopano/start-helper.sh
# Hint: this is not compatible with a read-only container. # Hint: this is not compatible with a read-only container.
# The general recommendation is to already build a container that has all required packages installed. # The general recommendation is to already build a container that has all required packages installed.
ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAPP_PLUGINS" ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAPP_PLUGINS"
ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"') ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"')
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do
# shellcheck disable=SC2016 disable=SC2086 # shellcheck disable=SC2016 disable=SC2086
@ -26,57 +27,58 @@ if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
echo "INFO: $installpkg is already installed" echo "INFO: $installpkg is already installed"
fi fi
done done
else else
echo "Notice: Container is run read-only, skipping package installation." echo "Notice: Container is run read-only, skipping package installation."
echo "If you want to have additional packages installed in the container either:" echo "If you want to have additional packages installed in the container either:"
echo "- build your own image with the packages already included" echo "- build your own image with the packages already included"
echo "- switch the container to 'read_only: false'" echo "- switch the container to 'read_only: false'"
fi fi
# copy latest config template # copy latest config template
mkdir -p /tmp/webapp/ mkdir -p /tmp/webapp/
for i in /etc/kopano/webapp/*.dist /etc/kopano/webapp/.[^.]*.dist; do for i in /etc/kopano/webapp/*.dist /etc/kopano/webapp/.[^.]*.dist; do
filename=$(basename -- "$i") filename=$(basename -- "$i")
cp "$i" "/tmp/webapp/${filename%.*}" cp "$i" "/tmp/webapp/${filename%.*}"
done done
# Ensure directories exist # Ensure directories exist
mkdir -p /run/sessions /tmp/webapp /var/lib/kopano-webapp/tmp mkdir -p /run/sessions /tmp/webapp /var/lib/kopano-webapp/tmp
phpversion=$(dpkg-query --showformat='${Version}' --show php7-mapi) phpversion=$(dpkg-query --showformat='${Version}' --show php7-mapi)
echo "Using PHP-Mapi: $phpversion" echo "Using PHP-Mapi: $phpversion"
webappversion=$(dpkg-query --showformat='${Version}' --show kopano-webapp) webappversion=$(dpkg-query --showformat='${Version}' --show kopano-webapp)
echo "Using Kopano WebApp: $webappversion" echo "Using Kopano WebApp: $webappversion"
if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then
echo "Kopano WebApp is using the default: connection" echo "Kopano WebApp is using the default: connection"
else else
echo "Kopano WebApp is using an ip connection" echo "Kopano WebApp is using an ip connection"
php_cfg_gen /tmp/webapp/config.php DEFAULT_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano" php_cfg_gen /tmp/webapp/config.php DEFAULT_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano"
fi fi
# configuring webapp from env # configuring webapp from env
for setting in $(compgen -A variable KCCONF_WEBAPP_); do for setting in $(compgen -A variable KCCONF_WEBAPP_); do
setting2=${setting#KCCONF_WEBAPP_} setting2=${setting#KCCONF_WEBAPP_}
php_cfg_gen /tmp/webapp/config.php "${setting2}" "${!setting}" php_cfg_gen /tmp/webapp/config.php "${setting2}" "${!setting}"
done done
# configuring webapp plugins from env # configuring webapp plugins from env
for setting in $(compgen -A variable KCCONF_WEBAPPPLUGIN_); do for setting in $(compgen -A variable KCCONF_WEBAPPPLUGIN_); do
setting2=${setting#KCCONF_WEBAPPPLUGIN_} setting2=${setting#KCCONF_WEBAPPPLUGIN_}
filename="${setting2%%_*}" filename="${setting2%%_*}"
setting3=${setting#KCCONF_WEBAPPPLUGIN_${filename}_} setting3=${setting#KCCONF_WEBAPPPLUGIN_${filename}_}
identifier="${filename,,}" identifier="${filename,,}"
php_cfg_gen /tmp/webapp/config-"$identifier".php "${setting3}" "${!setting}" php_cfg_gen /tmp/webapp/config-"$identifier".php "${setting3}" "${!setting}"
done done
echo "Ensure config ownership" echo "Ensure config ownership"
chown -R www-data:www-data /run/sessions /tmp/webapp /var/lib/kopano-webapp/tmp chown -R www-data:www-data /run/sessions /tmp/webapp /var/lib/kopano-webapp/tmp
# services need to be aware of the machine-id # services need to be aware of the machine-id
#dockerize \ #dockerize \
# -wait file:///etc/machine-id \ # -wait file:///etc/machine-id \
# -wait file:///var/lib/dbus/machine-id # -wait file:///var/lib/dbus/machine-id
fi
set +u set +u
# cleaning up env variables # cleaning up env variables

View File

@ -1,8 +0,0 @@
<VirtualHost *:80>
DocumentRoot /var/www/
LogFormat "%{X-Forwarded-For}i %{%a %b %d %T %Y}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
ErrorLog "|/bin/cat"
CustomLog "|/bin/cat" proxy
</VirtualHost>

View File

@ -39,10 +39,11 @@ php_cfg_gen() {
fi fi
} }
# Hint: this is not compatible with a read-only container. if [ "${AUTOCONFIGURE}" == true ]; then
# The general recommendation is to already build a container that has all required packages installed. # Hint: this is not compatible with a read-only container.
ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"') # The general recommendation is to already build a container that has all required packages installed.
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then ADDITIONAL_KOPANO_PACKAGES=$(echo "$ADDITIONAL_KOPANO_PACKAGES" | tr -d '"')
if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update
[ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do
# shellcheck disable=SC2016 disable=SC2086 # shellcheck disable=SC2016 disable=SC2086
@ -52,92 +53,93 @@ if [ -n "$(mkdir -p "/var/lib/apt/lists/" 2&> /dev/null)" ]; then
echo "INFO: $installpkg is already installed" echo "INFO: $installpkg is already installed"
fi fi
done done
else else
echo "Notice: Container is run read-only, skipping package installation." echo "Notice: Container is run read-only, skipping package installation."
echo "If you want to have additional packages installed in the container either:" echo "If you want to have additional packages installed in the container either:"
echo "- build your own image with the packages already included" echo "- build your own image with the packages already included"
echo "- switch the container to 'read_only: false'" echo "- switch the container to 'read_only: false'"
fi fi
# copy latest config template # copy latest config template
mkdir -p /tmp/z-push/ mkdir -p /tmp/z-push/
for i in /etc/z-push/*.dist; do for i in /etc/z-push/*.dist; do
filename=$(basename -- "$i") filename=$(basename -- "$i")
cp "$i" "/tmp/z-push/${filename%.*}" cp "$i" "/tmp/z-push/${filename%.*}"
done done
# Ensure directories # Ensure directories
mkdir -p /run/sessions mkdir -p /run/sessions
phpversion=$(dpkg-query --showformat='${Version}' --show php7-mapi) phpversion=$(dpkg-query --showformat='${Version}' --show php7-mapi)
echo "Using PHP-Mapi: $phpversion" echo "Using PHP-Mapi: $phpversion"
zpushversion=$(dpkg-query --showformat='${Version}' --show z-push-kopano) zpushversion=$(dpkg-query --showformat='${Version}' --show z-push-kopano)
echo "Using Z-Push: $zpushversion" echo "Using Z-Push: $zpushversion"
if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then
echo "Z-Push is using the default: connection" echo "Z-Push is using the default: connection"
else else
echo "Z-Push is using an ip connection" echo "Z-Push is using an ip connection"
php_cfg_gen /tmp/z-push/kopano.conf.php MAPI_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano" php_cfg_gen /tmp/z-push/kopano.conf.php MAPI_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano"
fi fi
echo "Configuring Z-Push for use behind a reverse proxy" echo "Configuring Z-Push for use behind a reverse proxy"
php_cfg_gen /tmp/z-push/z-push.conf.php USE_CUSTOM_REMOTE_IP_HEADER HTTP_X_FORWARDED_FOR php_cfg_gen /tmp/z-push/z-push.conf.php USE_CUSTOM_REMOTE_IP_HEADER HTTP_X_FORWARDED_FOR
# configuring z-push from env # configuring z-push from env
for setting in $(compgen -A variable KCCONF_ZPUSH_); do for setting in $(compgen -A variable KCCONF_ZPUSH_); do
setting2=${setting#KCCONF_ZPUSH_} setting2=${setting#KCCONF_ZPUSH_}
php_cfg_gen /tmp/z-push/z-push.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/z-push.conf.php "${setting2}" "${!setting}"
done done
# configuring autodiscover # configuring autodiscover
for setting in $(compgen -A variable KCCONF_ZPUSHAUTODISCOVER_); do for setting in $(compgen -A variable KCCONF_ZPUSHAUTODISCOVER_); do
setting2=${setting#KCCONF_ZPUSHAUTODISCOVER_} setting2=${setting#KCCONF_ZPUSHAUTODISCOVER_}
php_cfg_gen /tmp/z-push/autodiscover.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/autodiscover.conf.php "${setting2}" "${!setting}"
done done
# configuring z-push gabsync # configuring z-push gabsync
php_cfg_gen /tmp/z-push/gabsync.conf.php USERNAME SYSTEM php_cfg_gen /tmp/z-push/gabsync.conf.php USERNAME SYSTEM
for setting in $(compgen -A variable KCCONF_ZPUSHGABSYNC_); do for setting in $(compgen -A variable KCCONF_ZPUSHGABSYNC_); do
setting2=${setting#KCCONF_ZPUSHGAVSYNC_} setting2=${setting#KCCONF_ZPUSHGAVSYNC_}
php_cfg_gen /tmp/z-push/z-push.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/z-push.conf.php "${setting2}" "${!setting}"
done done
# configuring z-push sql state engine # configuring z-push sql state engine
for setting in $(compgen -A variable KCCONF_ZPUSHSQL_); do for setting in $(compgen -A variable KCCONF_ZPUSHSQL_); do
setting2=${setting#KCCONF_ZPUSHSQL_} setting2=${setting#KCCONF_ZPUSHSQL_}
php_cfg_gen /tmp/z-push/state-sql.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/state-sql.conf.php "${setting2}" "${!setting}"
done done
# configuring z-push memcached # configuring z-push memcached
for setting in $(compgen -A variable KCCONF_ZPUSHMEMCACHED_); do for setting in $(compgen -A variable KCCONF_ZPUSHMEMCACHED_); do
setting2=${setting#KCCONF_ZPUSHMEMCACHED_} setting2=${setting#KCCONF_ZPUSHMEMCACHED_}
php_cfg_gen /tmp/z-push/memcached.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/memcached.conf.php "${setting2}" "${!setting}"
done done
# configuring z-push gab2contacts # configuring z-push gab2contacts
for setting in $(compgen -A variable KCCONF_ZPUSHGA2CONTACTS_); do for setting in $(compgen -A variable KCCONF_ZPUSHGA2CONTACTS_); do
setting2=${setting#KCCONF_ZPUSHSQL_} setting2=${setting#KCCONF_ZPUSHSQL_}
php_cfg_gen /tmp/z-push/gab2contacts.conf.php "${setting2}" "${!setting}" php_cfg_gen /tmp/z-push/gab2contacts.conf.php "${setting2}" "${!setting}"
done done
# configuring z-push shared folders # configuring z-push shared folders
perl -i -0pe 's/\$additionalFolders.*\);//s' /tmp/z-push/z-push.conf.php perl -i -0pe 's/\$additionalFolders.*\);//s' /tmp/z-push/z-push.conf.php
echo -e " \$additionalFolders = array(" >> /tmp/z-push/z-push.conf.php echo -e " \$additionalFolders = array(" >> /tmp/z-push/z-push.conf.php
echo "$ZPUSH_ADDITIONAL_FOLDERS" | jq -c '.[]' | while read -r folder; do echo "$ZPUSH_ADDITIONAL_FOLDERS" | jq -c '.[]' | while read -r folder; do
eval "$(echo "$folder" | jq -r '@sh "NAME=\(.name) ID=\(.id) TYPE=\(.type) FLAGS=\(.flags)"')" eval "$(echo "$folder" | jq -r '@sh "NAME=\(.name) ID=\(.id) TYPE=\(.type) FLAGS=\(.flags)"')"
echo -e " array('store' => \"SYSTEM\", 'folderid' => \"$ID\", 'name' => \"$NAME\", 'type' => $TYPE, 'flags' => $FLAGS)," >> /etc/z-push/z-push.conf.php echo -e " array('store' => \"SYSTEM\", 'folderid' => \"$ID\", 'name' => \"$NAME\", 'type' => $TYPE, 'flags' => $FLAGS)," >> /etc/z-push/z-push.conf.php
done done
echo -e ' );' >> /tmp/z-push/z-push.conf.php echo -e ' );' >> /tmp/z-push/z-push.conf.php
echo "Ensure config ownership" echo "Ensure config ownership"
chown -R www-data:www-data /run/sessions chown -R www-data:www-data /run/sessions
# services need to be aware of the machine-id # services need to be aware of the machine-id
#dockerize \ #dockerize \
# -wait file:///etc/machine-id \ # -wait file:///etc/machine-id \
# -wait file:///var/lib/dbus/machine-id # -wait file:///var/lib/dbus/machine-id
fi
echo "Activate z-push log rerouting" echo "Activate z-push log rerouting"
mkdir -p /var/log/z-push/ mkdir -p /var/log/z-push/