- [kopano](src/kopano/entry.d/10-kopano-common) Allow module based parameter names.

- [docker](src/docker/bin/docker-config.sh) Add provision to set up crontab using envvars.
master
mlan 2020-12-18 11:04:09 +01:00
parent 8e9a9bcf67
commit 4ccda2a36c
8 changed files with 87 additions and 32 deletions

View File

@ -1,10 +1,12 @@
# 1.2.5
- [docker](Dockerfile) Install [kopano archiver](https://documentation.kopano.io/kopano_archiver_manual/) in target `core`.
- [docker](Dockerfile) Install the [kopano archiver](https://documentation.kopano.io/kopano_archiver_manual/) in target `core`.
- [docker](Dockerfile) Install the smime webapp plugin providing [S/MIME](https://kopano.com/blog/s-mime-plugin-description/).
- [docker](Dockerfile) Install the mdm webapp plugin providing [Mobile Device Management](https://documentation.kopano.io/webapp_mdm_manual/).
- [demo](demo) Add [S/MIME](https://kopano.com/blog/s-mime-plugin-description/) cert generation.
- [kopano](src/kopano/entry.d/10-kopano-common) Fix bug in `kopano_apply_envvars_php()`.
- [kopano](src/kopano/entry.d/10-kopano-common) Allow module based parameter names.
- [docker](src/docker/bin/docker-config.sh) Add provision to set up crontab using envvars.
# 1.2.4

View File

@ -13,6 +13,8 @@ ENV DEBIAN_FRONTEND=noninteractive \
DOCKER_BIN_DIR=/usr/local/bin \
DOCKER_ENTRY_DIR=/etc/docker/entry.d \
DOCKER_EXIT_DIR=/etc/docker/exit.d \
DOCKER_CRONTAB_FILE=/etc/kopano/docker-crontab \
DOCKER_CRONTAB_DIR=/etc/cron.d \
DOCKER_CONF_DIR1=/etc/kopano \
DOCKER_CONF_DIR2=/usr/share/z-push \
DOCKER_APPL_LIB=/var/lib/kopano \
@ -31,6 +33,7 @@ ENV DEBIAN_FRONTEND=noninteractive \
COPY src/*/bin $DOCKER_BIN_DIR/
COPY src/*/entry.d $DOCKER_ENTRY_DIR/
COPY src/*/exit.d $DOCKER_EXIT_DIR/
COPY src/*/config $DOCKER_CONF_DIR1/
#
# Install helpers. Set bash as default shell. Setup syslogs service.
@ -46,7 +49,12 @@ RUN apt-get update && apt-get install --yes --no-install-recommends \
gnupg \
jq \
inotify-tools \
&& docker-service.sh "syslogd -nO- -l$SYSLOG_LEVEL $SYSLOG_OPTIONS"
cron \
&& ln -s $DOCKER_CRONTAB_FILE $DOCKER_CRONTAB_DIR \
&& docker-service.sh \
"syslogd -nO- -l$SYSLOG_LEVEL $SYSLOG_OPTIONS" \
"cron -f"
# "cron -f -L 4"

View File

@ -1,5 +1,16 @@
# Road map
## Overlapping parameters
`MYSQL_HOST=db`
`SERVER_MYSQL_HOST=db-srv`
`ARCHIVER_MYSQL_HOST=db-arc`
## Cron
`CRONTAB_ENTRY1=0 1 * * * root kopano-archiver -A`
`CRONTAB_ENTRY2=0 3 * * 0 root kopano-archiver -C`
## kDAV
Consider integrating support for kDAV which provides CalDAV and CardDAV.
@ -16,20 +27,3 @@ Consider to also consolidating it under /srv to simplify making it persistent?
## webapp-passwd
Integrate [webapp-passwd](https://github.com/silentsakky/zarafa-webapp-passwd)?
## Improve Health Check?
Verify the user anonymously.
```bash
ldapsearch -h dockerhost -xLLL -b dc=example,dc=com '(kopanoAccount=1)'
```
Check if kopano can get the user from LDAP
```bash
kopano-admin -l
```
check that apache and mysql is running
```bash
apache2ctl status
mysqlcheck -A
```

View File

@ -55,6 +55,9 @@ $(addsuffix -top,$(srv_list)):
$(addsuffix -logs,$(srv_list)):
docker-compose logs $(patsubst %-logs,%,$@)
$(addsuffix -pull,$(srv_list)):
docker-compose pull $(patsubst %-pull,%,$@)
$(addsuffix -sh,$(srv_list)):
docker-compose exec $(patsubst %-sh,%,$@) sh -c 'exec $$(getent passwd root | sed "s/.*://g")'

View File

@ -11,6 +11,8 @@ HOSTNAME=${HOSTNAME-$(hostname)}
DOMAIN=${HOSTNAME#*.}
TLS_KEYBITS=${TLS_KEYBITS-2048}
TLS_CERTDAYS=${TLS_CERTDAYS-30}
DOCKER_CRONTAB_FILE=${DOCKER_CRONTAB_FILE-/etc/crontab}
DOCKER_CRONTAB_ENV=${DOCKER_CRONTAB_ENV-CRONTAB_ENTRY}
#
# general file manipulation commands, used both during build and run time
@ -232,6 +234,18 @@ dc_prune_pidfiles() {
done
}
#
# Setup crontab entries
#
dc_crontab_entries() {
local entries="$(eval echo \${!$DOCKER_CRONTAB_ENV*})"
for entry in $entries; do
[ -z "${changed+x}" ] && local changed= && sed -i '/^#$/q' $DOCKER_CRONTAB_FILE
echo "${!entry}" >> $DOCKER_CRONTAB_FILE
dc_log 5 "Added entry ${!entry} in $DOCKER_CRONTAB_FILE"
done
}
#
# TLS/SSL Certificates [openssl]
#

View File

@ -0,0 +1,7 @@
# /etc/cron.d/docker-crontab: crontab entries for docker
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# During initialization CRONTAB_ENTRY envvars will overwrite everything after
# the first line with a single #. Don't change the next line.
#

View File

@ -0,0 +1,15 @@
#!/bin/sh
#
# 50-docker-crontab-entry
#
# Functions defined in:
# docker-config.sh
#
#
#
# Add crontab entries if the config is unlocked.
#
if dc_is_unlocked; then
dc_crontab_entries
fi

View File

@ -18,6 +18,7 @@ DOCKER_MAN5_DIR=${DOCKER_MAN5_DIR-/usr/share/man/man5/}
DOCKER_APPL_SSL_CERT=${DOCKER_APPL_SSL_CERT-$DOCKER_APPL_SSL_DIR/cert.pem}
DOCKER_APPL_SSL_KEY=${DOCKER_APPL_SSL_KEY-$DOCKER_APPL_SSL_DIR/priv_key.pem}
DOCKER_LDAP_PMAP_FILE=${DOCKER_LDAP_PMAP_FILE-/usr/share/kopano/ldap.propmap.cfg}
DOCKER_LDAP_SERVICES=${DOCKER_LDAP_SERVICES-archiver dagent gateway ical ldap search server spamd spooler}
sqlstate_cfg_file=$DOCKER_CONF_DIR2/backend/sqlstatemachine/config.php
zpush_cfg_file=$DOCKER_CONF_DIR2/config.php
webapp_cfg_file=$DOCKER_CONF_DIR1/webapp/config.php
@ -32,7 +33,7 @@ webapp_smime_cfg_file=$DOCKER_CONF_DIR1/webapp/config-smime.php
# With kopano-webapp and z-push use installed config file to find valid keys.
#
kopano_apply_envvars_core() {
for service in dagent gateway ical ldap search server spamd spooler; do
for service in $DOCKER_LDAP_SERVICES; do
kopano_apply_envvars_cfg $service
done
}
@ -48,16 +49,20 @@ kopano_apply_envvars_zpush() {
kopano_apply_envvars_php $zpush_cfg_file
}
#
# kopano_apply_envvars_cfg <service>
#
kopano_apply_envvars_cfg() {
local cfg_file=$(kopano_gen_filename_cfg $1)
local man_file=$(kopano_gen_filename_man $1)
local service=$1
local cfg_file=$(kopano_gen_filename_cfg $service)
local man_file=$(kopano_gen_filename_man $service)
if [ -f $man_file ]; then
local env_vars="$(kopano_get_envvars_man $man_file)"
if [ -e $cfg_file ]; then
mv -f $cfg_file $cfg_file.bak
fi
for env_var in $env_vars; do
kopano_set_envvars_cfg $cfg_file $env_var
kopano_set_envvars_cfg $service $env_var
done
else
dc_log 4 "Could not find $man_file"
@ -70,25 +75,31 @@ kopano_apply_envvars_php() {
local env_vars="$(kopano_get_envvars_php $cfg_file)"
for env_var in $env_vars; do
if [ -n "${!env_var}" ]; then
[ -z "${changed+x}" ] && cp -f $cfg_file $cfg_file.bak
[ -z "${changed+x}" ] && local changed= && cp -f $cfg_file $cfg_file.bak
dc_log 5 "Setting ${env_var} = ${!env_var} in $cfg_file"
sed -ri "s/(\s*define[('\"]+${env_var}['\",]+).+/\1 ${!env_var});/Ig" $cfg_file
local changed
fi
done
fi
}
#
# kopano_set_envvars_cfg </path/file.cfg> <envvar name> [explicit parameter name]
# kopano_set_envvars_cfg <service> <envvar name> [explicit parameter name]
#
kopano_set_envvars_cfg() {
local cfg_file=$1
local service=$1
local cfg_file=$(kopano_gen_filename_cfg $service)
local env_var=$2
local uniq_var=${service^^}_${env_var}
local cfg_par="${3-$env_var =}"
if [ -n "${!env_var+x}" ]; then
dc_log 5 "Setting ${cfg_par,,} ${!env_var} in $cfg_file"
echo ${cfg_par,,} ${!env_var} >> $cfg_file
if [ -n "${!uniq_var+x}" ]; then
local env_val="${!uniq_var}"
elif [ -n "${!env_var+x}" ]; then
local env_val="${!env_var}"
fi
if [ -n "${env_val+x}" ]; then
dc_log 5 "Setting ${cfg_par,,} ${env_val} in $cfg_file"
echo ${cfg_par,,} ${env_val} >> $cfg_file
fi
}
@ -135,7 +146,8 @@ kopano_generate_tls_cert() {
# LDAP directives
#
kopano_apply_envvar_propmap() {
local cfg_file=$(kopano_gen_filename_cfg ldap)
local service=ldap
local cfg_file=$(kopano_gen_filename_cfg $service)
local env_var=LDAP_PROPMAP
if [ -n "${!env_var+x}" ]; then
if [ -z "${!env_var}" ]; then
@ -144,6 +156,6 @@ kopano_apply_envvar_propmap() {
dc_log 5 "No ${!env_var} so copying $DOCKER_LDAP_PMAP_FILE there."
cp -f $DOCKER_LDAP_PMAP_FILE ${!env_var}
fi
kopano_set_envvars_cfg $cfg_file $env_var '!propmap'
kopano_set_envvars_cfg $service $env_var '!propmap'
fi
}