From f13d2d2329d7b08a388ca5368e2a9305936b51d3 Mon Sep 17 00:00:00 2001 From: mlan Date: Tue, 17 Nov 2020 21:58:33 +0100 Subject: [PATCH] - [kopano](src/kopano) Now, use man pages and sample config files to find valid keys to match envvar. --- CHANGELOG.md | 4 ++ Dockerfile | 2 - ROADMAP.md | 8 --- demo/docker-compose.yml | 1 + src/kopano/entry.d/10-kopano-common | 101 ++++++++++++---------------- src/kopano/entry.d/50-kopano-config | 5 +- test/Makefile | 5 +- 7 files changed, 54 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70ee254..bb5451f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.2.4 + +- [kopano](src/kopano) Now, use man pages and sample config files to find valid keys to match envvar. + # 1.2.3 - [kopano](src/kopano) Adding support for secure IMAPS, POP3S and ICALS. diff --git a/Dockerfile b/Dockerfile index 4f3484d..9091509 100644 --- a/Dockerfile +++ b/Dockerfile @@ -88,7 +88,6 @@ ENV DEBIAN_FRONTEND=noninteractive \ DOCKER_BIN_DIR=/usr/local/bin \ LMTP_LISTEN=*:2003 \ SA_GROUP=kopano \ - LOG_METHOD=syslog \ DOCKER_BUILD_DEB_DIR=/tmp/deb \ DOCKER_BUILD_PASSES=1 # @@ -173,7 +172,6 @@ RUN apt-get install --yes --no-install-recommends apache2 libapache2-mod-php \ && . docker-common.sh \ && . docker-config.sh \ && dc_replace /etc/kopano/webapp/config.php 'define("SECURE_COOKIES", true);' 'define("SECURE_COOKIES", false);' \ -# && dc_fixmissing /etc/php/7.?/apache2/conf.d/kopano.ini /etc/php/7.?/mods-available/kopano.ini /etc/php5/conf.d/kopano.ini \ && dc_replace /etc/apache2/sites-available/kopano-webapp.conf 'Alias /webapp /usr/share/kopano-webapp' '\\nDocumentRoot /usr/share/kopano-webapp' \ && echo '' >> /etc/apache2/sites-available/kopano-webapp.conf \ && dc_modify /etc/apache2/apache2.conf '^ErrorLog' syslog:user \ diff --git a/ROADMAP.md b/ROADMAP.md index 6367b00..ece6369 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,14 +4,6 @@ Consider integrating support for kDAV which provides CalDAV and CardDAV. -## Common configurations - -The following directives exist: - -```sh -!include common.cfg -``` - ## Revisit Persistent Data Consider consolidating directories which are candidates for persistence under `/srv`. diff --git a/demo/docker-compose.yml b/demo/docker-compose.yml index c4a7294..0e7d2cd 100644 --- a/demo/docker-compose.yml +++ b/demo/docker-compose.yml @@ -36,6 +36,7 @@ services: - ICALS_LISTEN=*:8443 # enable TLS - DISABLED_FEATURES=${DISABLED_FEATURES-} # also enable IMAP and POP3 - SYSLOG_LEVEL=${SYSLOG_LEVEL-3} + - LOG_LEVEL=${LOG_LEVEL-3} volumes: - app-conf:/etc/kopano - app-atch:/var/lib/kopano/attachments diff --git a/src/kopano/entry.d/10-kopano-common b/src/kopano/entry.d/10-kopano-common index 570dbff..9288c3b 100755 --- a/src/kopano/entry.d/10-kopano-common +++ b/src/kopano/entry.d/10-kopano-common @@ -14,62 +14,60 @@ # DOCKER_CONF_DIR1=${DOCKER_CONF_DIR1-/etc/kopano} DOCKER_CONF_DIR2=${DOCKER_CONF_DIR2-/usr/share/z-push} +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} -dagent_cfg_file=$DOCKER_CONF_DIR1/dagent.cfg -gateway_cfg_file=$DOCKER_CONF_DIR1/gateway.cfg -ical_cfg_file=$DOCKER_CONF_DIR1/ical.cfg -ldap_cfg_file=$DOCKER_CONF_DIR1/ldap.cfg -search_cfg_file=$DOCKER_CONF_DIR1/search.cfg -server_cfg_file=$DOCKER_CONF_DIR1/server.cfg -spamd_cfg_file=$DOCKER_CONF_DIR1/spamd.cfg -spooler_cfg_file=$DOCKER_CONF_DIR1/spooler.cfg - 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 # -# Define environment variables +# Apply environment variables to configuration files. +# Uuse all valid keys (variables) for a service to see if there is a envvar with +# identical name, if so apply its value to the config file. +# With kopano-core use man page files to lookup valid keys. +# With kopano-webapp and z-push use installed config file to find valid keys. # -ssl_env_vars="SSL_CERTIFICATE_FILE SSL_CIPHERS SSL_CURVES SSL_PREFER_SERVER_CIPHERS SSL_PRIVATE_KEY_FILE SSL_VERIFY_CLIENT SSL_VERIFY_FILE SSL_VERIFY_PATH TLS_MIN_PROTO" -dagent_env_vars="LMTP_LISTEN SPAM_HEADER_NAME SPAM_HEADER_VALUE LOG_LEVEL" -gateway_env_vars="BYPASS_AUTH DISABLE_PLAINTEXT_AUTH HTML_SAFETY_FILTER IMAP_CAPABILITY_IDLE IMAP_EXPUNGE_ON_DELETE IMAP_IGNORE_COMMAND_IDLE IMAP_LISTEN IMAP_MAX_FAIL_COMMANDS IMAP_MAX_MESSAGESIZE IMAP_ONLY_MAILFOLDERS IMAP_PUBLIC_FOLDERS IMAPS_LISTEN POP3_LISTEN POP3S_LISTEN DISABLE_PLAINTEXT_AUTH LOG_LEVEL" -ical_env_vars="ICAL_LISTEN ICALS_LISTEN ENABLE_ICAL_GET LOG_LEVEL" -ldap_env_vars="LDAP_URI LDAP_STARTTLS LDAP_BIND_USER LDAP_BIND_PASSWD LDAP_SEARCH_BASE LDAP_USER_TYPE_ATTRIBUTE_VALUE LDAP_GROUP_TYPE_ATTRIBUTE_VALUE LDAP_USER_SEARCH_FILTER" -search_env_vars="INDEX_PROCESSES INDEX_DRAFTS INDEX_JUNK SUGGESTIONS INDEX_ATTACHMENTS INDEX_ATTACHMENT_MAX_SIZE LOG_LEVEL" -server_env_vars="MYSQL_HOST MYSQL_PORT MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD DISABLED_FEATURES USER_PLUGIN SEARCH_TIMEOUT LOG_LEVEL" -spamd_env_vars="SPAM_DIR SPAM_DB HEADER_TAG LEARN_HAM HAM_DIR SA_GROUP LOG_LEVEL LOG_METHOD" -spooler_env_vars="SMTP_SERVER SMTP_PORT LOG_LEVEL" - -sqlstate_env_vars="STATE_SQL_ENGINE STATE_SQL_SERVER STATE_SQL_PORT STATE_SQL_DATABASE STATE_SQL_USER STATE_SQL_PASSWORD STATE_SQL_OPTIONS" -zpush_env_vars="TIMEZONE USE_CUSTOM_REMOTE_IP_HEADER USE_FULLEMAIL_FOR_LOGIN STATE_MACHINE STATE_DIR LOGBACKEND LOGLEVEL LOGAUTHFAIL LOG_SYSLOG_PROGRAM LOG_SYSLOG_FACILITY SYNC_CONFLICT_DEFAULT PING_INTERVAL FILEAS_ORDER SYNC_MAX_ITEMS UNSET_UNDEFINED_PROPERTIES ALLOW_WEBSERVICE_USERS_ACCESS USE_PARTIAL_FOLDERSYNC" - -# -# Define helpers -# - -_kopano_apply_envvars_gen() { - # move existing cfg files - local cfg_file=$1 - shift - local env_vars=$@ - if [ -e $cfg_file ]; then - mv -f $cfg_file $cfg_file.orig - fi - for env_var in $env_vars; do - if [ -n "${!env_var+x}" ]; then - dc_log 5 "Setting ${env_var,,} = ${!env_var} in $cfg_file" - echo ${env_var,,} = ${!env_var} >> $cfg_file - fi +kopano_apply_envvars_core() { + for service in dagent gateway ical ldap search server spamd spooler; do + kopano_apply_envvars_cfg $service done } -_kopano_apply_phpenvvars_gen() { +kopano_apply_envvars_webapp() { + kopano_apply_envvars_php $webapp_cfg_file +} + +kopano_apply_envvars_zpush() { + kopano_apply_envvars_php $sqlstate_cfg_file + kopano_apply_envvars_php $zpush_cfg_file +} + +kopano_apply_envvars_cfg() { + local cfg_file=$DOCKER_CONF_DIR1/$1.cfg + local man_file=$DOCKER_MAN5_DIR/kopano-$1.cfg.5.gz + 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.orig + fi + for env_var in $env_vars; do + if [ -n "${!env_var+x}" ]; then + dc_log 5 "Setting ${env_var,,} = ${!env_var} in $cfg_file" + echo ${env_var,,} = ${!env_var} >> $cfg_file + fi + done + else + dc_log 4 "Could not find $man_file" + fi +} + +kopano_apply_envvars_php() { local cfg_file=$1 - shift - local env_vars=$@ if [ -e $cfg_file ]; then + local env_vars="$(kopano_get_envvars_php $cfg_file)" + cp -f $cfg_file $cfg_file.orig for env_var in $env_vars; do if [ -n "${!env_var}" ]; then dc_log 5 "Setting ${env_var} = ${!env_var} in $cfg_file" @@ -79,21 +77,8 @@ _kopano_apply_phpenvvars_gen() { fi } -kopano_apply_envvars() { - _kopano_apply_envvars_gen $dagent_cfg_file $dagent_env_vars - _kopano_apply_envvars_gen $gateway_cfg_file $gateway_env_vars $ssl_env_vars - _kopano_apply_envvars_gen $ical_cfg_file $ical_env_vars $ssl_env_vars - _kopano_apply_envvars_gen $ldap_cfg_file $ldap_env_vars - _kopano_apply_envvars_gen $search_cfg_file $search_env_vars - _kopano_apply_envvars_gen $server_cfg_file $server_env_vars - _kopano_apply_envvars_gen $spamd_cfg_file $spamd_env_vars - _kopano_apply_envvars_gen $spooler_cfg_file $spooler_env_vars -} - -kopano_apply_phpenvvars() { - _kopano_apply_phpenvvars_gen $sqlstate_cfg_file $sqlstate_env_vars - _kopano_apply_phpenvvars_gen $zpush_cfg_file $zpush_env_vars -} +kopano_get_envvars_man() { zcat $1 | sed -r "/^\.SS/!d;{s/^\.SS (.*)/\U\1/g;s/,//g}" | sort -u ;} +kopano_get_envvars_php() { sed -nr "/define\(/s/.*define\(['\"](.*)['\"], .*/\1/p" $1 | sort -u ;} # # Update SSL_CERTIFICATE_FILE and SSL_PRIVATE_KEY_FILE. diff --git a/src/kopano/entry.d/50-kopano-config b/src/kopano/entry.d/50-kopano-config index df4d7b3..9c69b7c 100755 --- a/src/kopano/entry.d/50-kopano-config +++ b/src/kopano/entry.d/50-kopano-config @@ -14,6 +14,7 @@ if dc_is_unlocked; then kopano_export_tls_cert kopano_generate_tls_cert kopano_export_tls_cert - kopano_apply_envvars - kopano_apply_phpenvvars + kopano_apply_envvars_core + kopano_apply_envvars_webapp + kopano_apply_envvars_zpush fi diff --git a/test/Makefile b/test/Makefile index b9cb1a5..904f7fb 100644 --- a/test/Makefile +++ b/test/Makefile @@ -65,6 +65,7 @@ APP_ENV ?= $(NET_ENV) $(SQL_ENV) \ -e POP3_LISTEN=*:110 \ -e ICAL_LISTEN=*:8080 \ -e DISABLED_FEATURES= \ +-e LOGLEVEL=LOGLEVEL_DEBUG \ -e SYSLOG_LEVEL=$(APP_SLOG) \ -e LOG_LEVEL=$(APP_ALOG) APPS_ENV ?= $(APP_ENV) \ @@ -130,12 +131,12 @@ test-up_0: test-up-net # run containers see if there are logs and stop. # # - docker run -d $(APP_ENV) $(APP_VOL) $(IMG_REPO):$(call _ver,$(IMG_VER),core) + docker run -d --name $(APP_NAME) $(IMG_REPO):$(call _ver,$(IMG_VER),core) sleep $(TST_W8L1) docker container logs $(APP_NAME) | grep 'docker-entrypoint.sh' docker rm -fv $(APP_NAME) sleep $(TST_W8S1) - docker run -d $(APP_ENV) $(APP_VOL) $(IMG_REPO):$(call _ver,$(IMG_VER),full) + docker run -d --name $(APP_NAME) $(IMG_REPO):$(call _ver,$(IMG_VER),full) sleep $(TST_W8L1) docker container logs $(APP_NAME) | grep 'docker-entrypoint.sh' docker rm -fv $(APP_NAME)