mirror of
				https://github.com/zokradonh/kopano-docker
				synced 2025-10-31 10:27:14 +00:00 
			
		
		
		
	add linting for shell scripts and Dockerfiles
* add hadolint for dockerfile linting * add hadofile config * add checks for dockerfiles and shellcheck into makefile * shellcheck fixes * add workaround so that .env can be sourced again from version.sh * hadolint fixes * print progress of build/run.sh * fix check for jq in setup.sh relates to #41 and #26
This commit is contained in:
		
							parent
							
								
									f5a24f2150
								
							
						
					
					
						commit
						91ccf89765
					
				
							
								
								
									
										13
									
								
								.hadolint.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.hadolint.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | ignored: | ||||||
|  |   # disable following sourced files | ||||||
|  |   - SC1091 | ||||||
|  |   # disable check for versioned upstream image | ||||||
|  |   - DL3006 | ||||||
|  |   # disable don't use :latest | ||||||
|  |   - DL3007 | ||||||
|  |   # disable explicit version for apt install | ||||||
|  |   - DL3008 | ||||||
|  |   # disable explicit version for apk install | ||||||
|  |   - DL3018 | ||||||
|  | trustedRegistries: | ||||||
|  |   - docker.io | ||||||
							
								
								
									
										12
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								.travis.yml
									
									
									
									
									
								
							| @ -10,15 +10,17 @@ env: | |||||||
| services: | services: | ||||||
| - docker | - docker | ||||||
| before_install: | before_install: | ||||||
| - sudo curl -L https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/goss-linux-amd64 | - sudo curl -L https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/goss-linux-amd64 -o /usr/local/bin/goss | ||||||
|   -o /usr/local/bin/goss | - sudo curl -L https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/dgoss -o /usr/local/bin/dgoss | ||||||
| - sudo curl -L https://github.com/aelsabbahy/goss/releases/download/v$GOSS_VERSION/dgoss | - sudo curl -L https://github.com/hadolint/hadolint/releases/download/v1.16.0/hadolint-$(uname -s)-$(uname -m) -o /usr/local/bin/hadolint | ||||||
|   -o /usr/local/bin/dgoss |  | ||||||
| - sudo chmod +rx /usr/local/bin/goss | - sudo chmod +rx /usr/local/bin/goss | ||||||
| - sudo chmod +rx /usr/local/bin/dgoss | - sudo chmod +rx /usr/local/bin/dgoss | ||||||
|  | - sudo chmod +rx /usr/local/bin/hadolint | ||||||
| - sudo apt update && sudo apt install -y expect | - sudo apt update && sudo apt install -y expect | ||||||
| - "./test.exp" | - "./test.exp" | ||||||
| install: make build-all | install: | ||||||
|  |   - make check-scripts | ||||||
|  |   - make build-all | ||||||
| deploy: | deploy: | ||||||
| - provider: script | - provider: script | ||||||
|   script: make publish |   script: make publish | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
								
							| @ -197,6 +197,14 @@ publish-webapp: build-webapp tag-webapp | |||||||
| publish-zpush: build-zpush tag-zpush | publish-zpush: build-zpush tag-zpush | ||||||
| 	component=zpush make publish-container | 	component=zpush make publish-container | ||||||
| 
 | 
 | ||||||
|  | check-scripts: | ||||||
|  | 	grep -rIl '^#![[:blank:]]*/bin/\(bash\|sh\|zsh\)' \
 | ||||||
|  | 	--exclude-dir=.git --exclude=*.sw? \
 | ||||||
|  | 	| xargs shellcheck | ||||||
|  | 	# List files which name starts with 'Dockerfile' | ||||||
|  | 	# eg. Dockerfile, Dockerfile.build, etc. | ||||||
|  | 	git ls-files --exclude='Dockerfile*' --ignored | xargs --max-lines=1 hadolint | ||||||
|  | 
 | ||||||
| test: | test: | ||||||
| 	docker-compose -f $(COMPOSE_FILE) down -v || true | 	docker-compose -f $(COMPOSE_FILE) down -v || true | ||||||
| 	make build-all | 	make build-all | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ ARG DEBIAN_FRONTEND=noninteractive | |||||||
| 
 | 
 | ||||||
| # install basics | # install basics | ||||||
| # TODO require python3 or python3-minimal? | # TODO require python3 or python3-minimal? | ||||||
|  | # hadolint ignore=DL3005 | ||||||
| RUN apt-get update && \ | RUN apt-get update && \ | ||||||
|     apt-get upgrade -y && \ |     apt-get upgrade -y && \ | ||||||
|     apt-get install --no-install-recommends -y \ |     apt-get install --no-install-recommends -y \ | ||||||
| @ -31,6 +32,7 @@ RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \ | |||||||
|     dpkg-reconfigure --frontend=noninteractive locales && \ |     dpkg-reconfigure --frontend=noninteractive locales && \ | ||||||
|     update-locale LANG=en_US.UTF-8 |     update-locale LANG=en_US.UTF-8 | ||||||
| 
 | 
 | ||||||
|  | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | ||||||
| ENV DOCKERIZE_VERSION v0.6.1 | ENV DOCKERIZE_VERSION v0.6.1 | ||||||
| RUN curl -L https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz | tar xzvf - -C /usr/local/bin | RUN curl -L https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz | tar xzvf - -C /usr/local/bin | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| FROM docker:18.09.1 | FROM docker:18.09.1 | ||||||
| ENV COMPOSE_VERSION "1.23.2" | ENV COMPOSE_VERSION "1.23.2" | ||||||
| RUN apk add bash curl expect make nano jq py-pip | RUN apk add --no-cache bash curl expect make nano jq py-pip | ||||||
| RUN pip install --no-cache-dir docker-compose==${COMPOSE_VERSION} | RUN pip install --no-cache-dir docker-compose==${COMPOSE_VERSION} | ||||||
| WORKDIR /kopano-docker | WORKDIR /kopano-docker | ||||||
| CMD ["bash"] | CMD ["bash"] | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								build/run.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								build/run.sh
									
									
									
									
									
								
							| @ -3,11 +3,13 @@ if [ ! "$(id -u)" -eq 0 ]; then | |||||||
| 	echo "This script may need to be run as root to be able to use docker/docker-compose through it." | 	echo "This script may need to be run as root to be able to use docker/docker-compose through it." | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| cd "$(dirname "$0")" | cd "$(dirname "$0")" || exit | ||||||
|  | 
 | ||||||
|  | docker build . | ||||||
| 
 | 
 | ||||||
| docker run \ | docker run \ | ||||||
| 	--rm -it \ | 	--rm -it \ | ||||||
| 	-u $(id -u ${USER}):$(id -g ${USER}) \ | 	-u "$(id -u)":"$(id -g)" \ | ||||||
| 	-v /var/run/docker.sock:/var/run/docker.sock \ | 	-v /var/run/docker.sock:/var/run/docker.sock \ | ||||||
| 	-v ${PWD}/..:/kopano-docker/ \ | 	-v "$(pwd)"/..:/kopano-docker/ \ | ||||||
| 	$(docker build -q .) $@ | 	"$(docker build -q .)" "$@" | ||||||
|  | |||||||
| @ -16,6 +16,8 @@ ENV KOPANO_REPOSITORY_FLAGS=$KOPANO_REPOSITORY_FLAGS | |||||||
| ARG RELEASE_KEY_DOWNLOAD=0 | ARG RELEASE_KEY_DOWNLOAD=0 | ||||||
| ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ||||||
| 
 | 
 | ||||||
|  | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | ||||||
|  | 
 | ||||||
| # install Kopano Core and refresh ca-certificates | # install Kopano Core and refresh ca-certificates | ||||||
| RUN \ | RUN \ | ||||||
|     # community download and package as apt source repository |     # community download and package as apt source repository | ||||||
|  | |||||||
| @ -9,10 +9,11 @@ if [ ! -e /kopano/"$SERVICE_TO_START".py ]; then | |||||||
| 	exit 1 | 	exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && apt update | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | ||||||
| 	if [ $(dpkg-query -W -f='${Status}' "$installpkg" 2>/dev/null | grep -c "ok installed") -eq 0 ]; then | 	# shellcheck disable=SC2016 disable=SC2086 | ||||||
| 		apt --assume-yes install "$installpkg"; | 	if [ "$(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c 'ok installed')" -eq 0 ]; then | ||||||
|  | 		apt --assume-yes install "$installpkg" | ||||||
| 	fi | 	fi | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
| @ -88,6 +89,7 @@ kapid) | |||||||
| 		-timeout 360s | 		-timeout 360s | ||||||
| 	LC_CTYPE=en_US.UTF-8 | 	LC_CTYPE=en_US.UTF-8 | ||||||
| 	sed -i s/\ *=\ */=/g /etc/kopano/kapid.cfg | 	sed -i s/\ *=\ */=/g /etc/kopano/kapid.cfg | ||||||
|  | 	# shellcheck disable=SC2046 | ||||||
| 	export $(grep -v '^#' /etc/kopano/kapid.cfg | xargs -d '\n') | 	export $(grep -v '^#' /etc/kopano/kapid.cfg | xargs -d '\n') | ||||||
| 	kopano-kapid setup | 	kopano-kapid setup | ||||||
| 	# cleaning up env variables | 	# cleaning up env variables | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| ARG docker_repo=zokradonh | ARG docker_repo=zokradonh | ||||||
| FROM composer:1.8.4 as composer | FROM composer:1.8.4 as composer | ||||||
| 
 | 
 | ||||||
| RUN git clone --depth 1 https://stash.kopano.io/scm/kc/kdav.git /usr/share/kdav && \ | RUN git clone --depth 1 https://stash.kopano.io/scm/kc/kdav.git /usr/share/kdav | ||||||
|     cd /usr/share/kdav && \ | WORKDIR /usr/share/kdav | ||||||
|     composer install | RUN composer install | ||||||
| 
 | 
 | ||||||
| FROM ${docker_repo}/kopano_base | FROM ${docker_repo}/kopano_base | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -7,10 +7,11 @@ 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 | ||||||
| 
 | 
 | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && apt update | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && for installpkg in "$ADDITIONAL_KOPANO_PACKAGES"; do | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | ||||||
| 	if [ $(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c "ok installed") -eq 0 ]; then | 	# shellcheck disable=SC2016 disable=SC2086 | ||||||
| 		apt --assume-yes install $installpkg; | 	if [ "$(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c 'ok installed')" -eq 0 ]; then | ||||||
|  | 		apt --assume-yes install "$installpkg" | ||||||
| 	fi | 	fi | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
| @ -40,6 +41,7 @@ tail --pid=$$ -F --lines=0 -q /var/log/kdav/kdav-error.log & | |||||||
| echo "Starting Apache" | echo "Starting Apache" | ||||||
| rm -f /run/apache2/apache2.pid | rm -f /run/apache2/apache2.pid | ||||||
| set +u | set +u | ||||||
|  | # shellcheck disable=SC1091 | ||||||
| source /etc/apache2/envvars | source /etc/apache2/envvars | ||||||
| # cleaning up env variables | # cleaning up env variables | ||||||
| unset "${!KCCONF_@}" | unset "${!KCCONF_@}" | ||||||
|  | |||||||
| @ -3,9 +3,8 @@ FROM kopano/konnectd:${CODE_VERSION} | |||||||
| ARG CODE_VERSION | ARG CODE_VERSION | ||||||
| ENV CODE_VERSION="${CODE_VERSION}" | ENV CODE_VERSION="${CODE_VERSION}" | ||||||
| 
 | 
 | ||||||
| RUN apk add --update \ | RUN apk add --no-cache \ | ||||||
| 	openssl \ | 	openssl | ||||||
| 	&& rm -rf /var/cache/apk/* |  | ||||||
| 
 | 
 | ||||||
| ENV DOCKERIZE_VERSION v0.6.1 | ENV DOCKERIZE_VERSION v0.6.1 | ||||||
| RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ | RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| set -e | set -e | ||||||
| 
 | 
 | ||||||
|  | # shellcheck disable=SC2154 | ||||||
| if [ -n "$oidc_issuer_identifier" ]; then | if [ -n "$oidc_issuer_identifier" ]; then | ||||||
| 	set -- "$@" --iss="$oidc_issuer_identifier" | 	set -- "$@" --iss="$oidc_issuer_identifier" | ||||||
| fi | fi | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| FROM osixia/openldap:1.2.3 | FROM osixia/openldap:1.2.3 | ||||||
| 
 | 
 | ||||||
| ADD bootstrap /container/service/slapd/assets/config/bootstrap | COPY bootstrap /container/service/slapd/assets/config/bootstrap | ||||||
| RUN rm /container/service/slapd/assets/config/bootstrap/schema/mmc/mail.schema | RUN rm /container/service/slapd/assets/config/bootstrap/schema/mmc/mail.schema | ||||||
| RUN touch /etc/ldap/slapd.conf | RUN touch /etc/ldap/slapd.conf | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| ARG docker_repo=zokradonh | ARG docker_repo=zokradonh | ||||||
| FROM ${docker_repo}/kopano_base | FROM ${docker_repo}/kopano_base:latest | ||||||
| 
 | 
 | ||||||
| ARG DEBIAN_FRONTEND=noninteractive | ARG DEBIAN_FRONTEND=noninteractive | ||||||
| 
 | 
 | ||||||
| @ -10,6 +10,8 @@ ARG KOPANO_MEET_VERSION=newest | |||||||
| ARG KOPANO_REPOSITORY_FLAGS="trusted=yes" | ARG KOPANO_REPOSITORY_FLAGS="trusted=yes" | ||||||
| ARG RELEASE_KEY_DOWNLOAD=0 | ARG RELEASE_KEY_DOWNLOAD=0 | ||||||
| 
 | 
 | ||||||
|  | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | ||||||
|  | 
 | ||||||
| # install Kopano Core and refresh ca-certificates | # install Kopano Core and refresh ca-certificates | ||||||
| RUN \ | RUN \ | ||||||
|     # community download and package as apt source repository |     # community download and package as apt source repository | ||||||
|  | |||||||
| @ -21,6 +21,7 @@ fi | |||||||
| # TODO use jq to modify /usr/share/kopano-kweb/www/config/kopano/meet.json | # TODO use jq to modify /usr/share/kopano-kweb/www/config/kopano/meet.json | ||||||
| 
 | 
 | ||||||
| sed -i s/\ *=\ */=/g /etc/kopano/kwebd.cfg | sed -i s/\ *=\ */=/g /etc/kopano/kwebd.cfg | ||||||
|  | # shellcheck disable=SC2046 | ||||||
| export $(grep -v '^#' /etc/kopano/kwebd.cfg | xargs -d '\n') | export $(grep -v '^#' /etc/kopano/kwebd.cfg | xargs -d '\n') | ||||||
| # cleaning up env variables | # cleaning up env variables | ||||||
| unset "${!KCCONF_@}" | unset "${!KCCONF_@}" | ||||||
|  | |||||||
| @ -1,13 +1,13 @@ | |||||||
| from alpine:3.8 as builder | from alpine:3.8 as builder | ||||||
| RUN apk add --update \ | RUN apk add --no-cache \ | ||||||
|         git make \ |         git make | ||||||
|         && rm -rf /var/cache/apk/* |  | ||||||
| RUN mkdir -p /web/oidc-playground /web/kapi-playground | RUN mkdir -p /web/oidc-playground /web/kapi-playground | ||||||
| RUN git clone https://stash.kopano.io/scm/~seisenmann/oidc-playground.git | RUN git clone https://stash.kopano.io/scm/~seisenmann/oidc-playground.git | ||||||
| RUN mv oidc-playground/www/* /web/oidc-playground | RUN mv oidc-playground/www/* /web/oidc-playground | ||||||
| RUN git clone https://stash.kopano.io/scm/kc/kapi.git | RUN git clone https://stash.kopano.io/scm/kc/kapi.git | ||||||
| RUN mv kapi/examples/* /web/kapi-playground | RUN mv kapi/examples/* /web/kapi-playground | ||||||
| RUN cd /web/kapi-playground && rm Makefile && ln -s oidc-client-example.html index.html | WORKDIR /web/kapi-playground | ||||||
|  | RUN rm Makefile && ln -s oidc-client-example.html index.html | ||||||
| 
 | 
 | ||||||
| from halverneus/static-file-server:v1.5.2 | from halverneus/static-file-server:v1.5.2 | ||||||
| env PORT 8888 | env PORT 8888 | ||||||
|  | |||||||
							
								
								
									
										66
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								setup.sh
									
									
									
									
									
								
							| @ -57,7 +57,7 @@ docker_tag_search () { | |||||||
| 		i=$((i+1)) | 		i=$((i+1)) | ||||||
| 		result=$(curl "https://registry.hub.docker.com/v2/repositories/${name}/tags/?page=${i}" 2>/dev/null | jq -r '."results"[]["name"]' 2>/dev/null) | 		result=$(curl "https://registry.hub.docker.com/v2/repositories/${name}/tags/?page=${i}" 2>/dev/null | jq -r '."results"[]["name"]' 2>/dev/null) | ||||||
| 		has_more=$? | 		has_more=$? | ||||||
| 		if [[ ! -z "${result// }" ]]; then results="${results} ${result}"; fi | 		if [[ -n "${result// }" ]]; then results="${results} ${result}"; fi | ||||||
| 			#printf "." | 			#printf "." | ||||||
| 	done | 	done | ||||||
| 
 | 
 | ||||||
| @ -73,58 +73,58 @@ if [ ! -e ./.env ]; then | |||||||
| 	PRINT_SETUP_SUCCESS="" | 	PRINT_SETUP_SUCCESS="" | ||||||
| 
 | 
 | ||||||
| 	echo "Creating an .env file for you" | 	echo "Creating an .env file for you" | ||||||
| 	if type jq 2&> /dev/null; then | 	if command -v jq > /dev/null; then | ||||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_core/: $(docker_tag_search zokradonh/kopano_core)" | 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_core/: $(docker_tag_search zokradonh/kopano_core)" | ||||||
| 	fi | 	fi | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano Core components? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano Core components? [$value_default]: " new_value | ||||||
| 	CORE_VERSION=${new_value:-$value_default} | 	CORE_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if type jq 2&> /dev/null; then | 	if command -v jq > /dev/null; then | ||||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_webapp/: $(docker_tag_search zokradonh/kopano_webapp)" | 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_webapp/: $(docker_tag_search zokradonh/kopano_webapp)" | ||||||
| 	fi | 	fi | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano WebApp? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano WebApp? [$value_default]: " new_value | ||||||
| 	WEBAPP_VERSION=${new_value:-$value_default} | 	WEBAPP_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if type jq 2&> /dev/null; then | 	if command -v jq > /dev/null; then | ||||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_zpush/: $(docker_tag_search zokradonh/kopano_zpush)" | 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_zpush/: $(docker_tag_search zokradonh/kopano_zpush)" | ||||||
| 	fi | 	fi | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Z-Push? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Z-Push? [$value_default]: " new_value | ||||||
| 	ZPUSH_VERSION=${new_value:-$value_default} | 	ZPUSH_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if type jq 2&> /dev/null; then | 	if command -v jq > /dev/null; then | ||||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_konnect/: $(docker_tag_search zokradonh/kopano_konnect)" | 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_konnect/: $(docker_tag_search zokradonh/kopano_konnect)" | ||||||
| 	fi | 	fi | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano Konnect? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano Konnect? [$value_default]: " new_value | ||||||
| 	KONNECT_VERSION=${new_value:-$value_default} | 	KONNECT_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano Kwmserver? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano Kwmserver? [$value_default]: " new_value | ||||||
| 	KWM_VERSION=${new_value:-$value_default} | 	KWM_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano Meet? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano Meet? [$value_default]: " new_value | ||||||
| 	MEET_VERSION=${new_value:-$value_default} | 	MEET_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default=latest | 	value_default=latest | ||||||
| 	read -p "Which tag do you want to use for Kopano kDAV? [$value_default]: " new_value | 	read -r -p "Which tag do you want to use for Kopano kDAV? [$value_default]: " new_value | ||||||
| 	KDAV_VERSION=${new_value:-$value_default} | 	KDAV_VERSION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="Kopano Demo" | 	value_default="Kopano Demo" | ||||||
| 	read -p "Name of the Organisation for LDAP [$value_default]: " new_value | 	read -r -p "Name of the Organisation for LDAP [$value_default]: " new_value | ||||||
| 	LDAP_ORGANISATION=${new_value:-$value_default} | 	LDAP_ORGANISATION=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="kopano.demo" | 	value_default="kopano.demo" | ||||||
| 	read -p "FQDN to be used (for reverse proxy). | 	read -r -p "FQDN to be used (for reverse proxy). | ||||||
| 	Tipp: use port 2015 in case port 443 is already in use on the system. | 	Tipp: use port 2015 in case port 443 is already in use on the system. | ||||||
| 	[$value_default]: " new_value | 	[$value_default]: " new_value | ||||||
| 	FQDN=${new_value:-$value_default} | 	FQDN=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="self_signed" | 	value_default="self_signed" | ||||||
| 	read -p "Email address to use for Lets Encrypt. | 	read -r -p "Email address to use for Lets Encrypt. | ||||||
| 	Use 'self_signed' as your email to create self signed certificates. | 	Use 'self_signed' as your email to create self signed certificates. | ||||||
| 	Use 'off' if you want to run the service without tls encryption. Make sure to use an ssl-terminating reverse proxy in front in this case. | 	Use 'off' if you want to run the service without tls encryption. Make sure to use an ssl-terminating reverse proxy in front in this case. | ||||||
| 	[$value_default]: " new_value | 	[$value_default]: " new_value | ||||||
| @ -139,11 +139,11 @@ if [ ! -e ./.env ]; then | |||||||
| 
 | 
 | ||||||
| 	LDAP_BASE_DN=$(fqdn_to_dn "$FQDN") | 	LDAP_BASE_DN=$(fqdn_to_dn "$FQDN") | ||||||
| 	value_default="$LDAP_BASE_DN" | 	value_default="$LDAP_BASE_DN" | ||||||
| 	read -p "Name of the BASE DN for LDAP [$value_default]: " new_value | 	read -r -p "Name of the BASE DN for LDAP [$value_default]: " new_value | ||||||
| 	LDAP_BASE_DN=${new_value:-$value_default} | 	LDAP_BASE_DN=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="ldap://ldap:389" | 	value_default="ldap://ldap:389" | ||||||
| 	read -p "LDAP server to be used (defaults to the bundled OpenLDAP) [$value_default]: " new_value | 	read -r -p "LDAP server to be used (defaults to the bundled OpenLDAP) [$value_default]: " new_value | ||||||
| 	LDAP_SERVER=${new_value:-$value_default} | 	LDAP_SERVER=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if [ "$LDAP_SERVER" != "$value_default" ]; then | 	if [ "$LDAP_SERVER" != "$value_default" ]; then | ||||||
| @ -151,15 +151,15 @@ if [ ! -e ./.env ]; then | |||||||
| 		LDAP_ADMIN_PASSWORD="" | 		LDAP_ADMIN_PASSWORD="" | ||||||
| 
 | 
 | ||||||
| 		value_default="$LDAP_BASE_DN" | 		value_default="$LDAP_BASE_DN" | ||||||
| 		read -p "LDAP search base [$value_default]: " new_value | 		read -r -p "LDAP search base [$value_default]: " new_value | ||||||
| 		LDAP_SEARCH_BASE=${new_value:-$value_default} | 		LDAP_SEARCH_BASE=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		value_default="cn=readonly,$LDAP_BASE_DN" | 		value_default="cn=readonly,$LDAP_BASE_DN" | ||||||
| 		read -p "LDAP bind user (needs read permissions) [$value_default]: " new_value | 		read -r -p "LDAP bind user (needs read permissions) [$value_default]: " new_value | ||||||
| 		LDAP_BIND_DN=${new_value:-$value_default} | 		LDAP_BIND_DN=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		value_default="kopano123" | 		value_default="kopano123" | ||||||
| 		read -p "LDAP bind password to be used [$value_default]: " new_value | 		read -r -p "LDAP bind password to be used [$value_default]: " new_value | ||||||
| 		LDAP_BIND_PW=${new_value:-$value_default} | 		LDAP_BIND_PW=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		PRINT_SETUP_SUCCESS="$PRINT_SETUP_SUCCESS \n!! You have specified the LDAP server '${LDAP_SERVER}', don't forget to remove the bundled ldap and ldap-admin services in docker-compose.yml\n" | 		PRINT_SETUP_SUCCESS="$PRINT_SETUP_SUCCESS \n!! You have specified the LDAP server '${LDAP_SERVER}', don't forget to remove the bundled ldap and ldap-admin services in docker-compose.yml\n" | ||||||
| @ -180,15 +180,15 @@ if [ ! -e ./.env ]; then | |||||||
| 		value_default="Europe/Berlin". | 		value_default="Europe/Berlin". | ||||||
| 	fi | 	fi | ||||||
| 
 | 
 | ||||||
| 	read -p "Timezone to be used [$value_default]: " new_value | 	read -r -p "Timezone to be used [$value_default]: " new_value | ||||||
| 	TZ=${new_value:-$value_default} | 	TZ=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="postmaster@$FQDN" | 	value_default="postmaster@$FQDN" | ||||||
| 	read -p "E-Mail Address displayed for the 'postmaster' [$value_default]: " new_value | 	read -r -p "E-Mail Address displayed for the 'postmaster' [$value_default]: " new_value | ||||||
| 	POSTMASTER_ADDRESS=${new_value:-$value_default} | 	POSTMASTER_ADDRESS=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	value_default="db" | 	value_default="db" | ||||||
| 	read -p "Name/Address of Database server (defaults to the bundled one) [$value_default]: " new_value | 	read -r -p "Name/Address of Database server (defaults to the bundled one) [$value_default]: " new_value | ||||||
| 	MYSQL_HOST=${new_value:-$value_default} | 	MYSQL_HOST=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if [ "$MYSQL_HOST" != "$value_default" ]; then | 	if [ "$MYSQL_HOST" != "$value_default" ]; then | ||||||
| @ -196,15 +196,15 @@ if [ ! -e ./.env ]; then | |||||||
| 		MYSQL_ROOT_PASSWORD="" | 		MYSQL_ROOT_PASSWORD="" | ||||||
| 
 | 
 | ||||||
| 		value_default="kopanoDbUser" | 		value_default="kopanoDbUser" | ||||||
| 		read -p "Username to connect to the database [$value_default]: " new_value | 		read -r -p "Username to connect to the database [$value_default]: " new_value | ||||||
| 		MYSQL_USER=${new_value:-$value_default} | 		MYSQL_USER=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		value_default="kopanoDbPw" | 		value_default="kopanoDbPw" | ||||||
| 		read -p "Password to connect to the database [$value_default]: " new_value | 		read -r -p "Password to connect to the database [$value_default]: " new_value | ||||||
| 		MYSQL_PASSWORD=${new_value:-$value_default} | 		MYSQL_PASSWORD=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		value_default="kopano" | 		value_default="kopano" | ||||||
| 		read -p "Database to use for Kopano [$value_default]: " new_value | 		read -r -p "Database to use for Kopano [$value_default]: " new_value | ||||||
| 		MYSQL_DATABASE=${new_value:-$value_default} | 		MYSQL_DATABASE=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 		PRINT_SETUP_SUCCESS="$PRINT_SETUP_SUCCESS \n!! You have specified the DB server '${MYSQL_HOST}', don't forget to remove the bundled db service in docker-compose.yml\n" | 		PRINT_SETUP_SUCCESS="$PRINT_SETUP_SUCCESS \n!! You have specified the DB server '${MYSQL_HOST}', don't forget to remove the bundled db service in docker-compose.yml\n" | ||||||
| @ -219,11 +219,12 @@ if [ ! -e ./.env ]; then | |||||||
| 
 | 
 | ||||||
| 	prompt="Check language spell support (again to uncheck, ENTER when done): " | 	prompt="Check language spell support (again to uncheck, ENTER when done): " | ||||||
| 	while lang_menu && read -rp "$prompt" num && [[ "$num" ]]; do | 	while lang_menu && read -rp "$prompt" num && [[ "$num" ]]; do | ||||||
|  | 		# shellcheck disable=SC2015 | ||||||
| 		[[ "$num" != *[![:digit:]]* ]] && | 		[[ "$num" != *[![:digit:]]* ]] && | ||||||
| 		(( num > 0 && num <= ${#LANG_OPTIONS[@]} )) || | 		(( num > 0 && num <= ${#LANG_OPTIONS[@]} )) || | ||||||
| 		{ msg="Invalid option: $num"; continue; } | 		{ msg="Invalid option: $num"; continue; } | ||||||
| 		((num--)); msg="${LANG_OPTIONS[num]} was ${choices[num]:+un}checked" | 		((num--)); msg="${LANG_OPTIONS[num]} was ${lang_choices[num]:+un}checked" | ||||||
| 		[[ "${choices[num]}" ]] && lang_choices[num]="" || lang_choices[num]="+" | 		[[ "${lang_choices[num]}" ]] && lang_choices[num]="" || lang_choices[num]="+" | ||||||
| 	done | 	done | ||||||
| 
 | 
 | ||||||
| 	KOPANO_SPELL_PLUGIN="" | 	KOPANO_SPELL_PLUGIN="" | ||||||
| @ -236,6 +237,7 @@ if [ ! -e ./.env ]; then | |||||||
| 
 | 
 | ||||||
| 	prompt="Check for additional plugins (again to uncheck, ENTER when done): " | 	prompt="Check for additional plugins (again to uncheck, ENTER when done): " | ||||||
| 	while plugin_menu && read -rp "$prompt" num && [[ "$num" ]]; do | 	while plugin_menu && read -rp "$prompt" num && [[ "$num" ]]; do | ||||||
|  | 		# shellcheck disable=SC2015 | ||||||
| 		[[ "$num" != *[![:digit:]]* ]] && | 		[[ "$num" != *[![:digit:]]* ]] && | ||||||
| 		(( num > 0 && num <= ${#PLUGIN_OPTIONS[@]} )) || | 		(( num > 0 && num <= ${#PLUGIN_OPTIONS[@]} )) || | ||||||
| 		{ msg="Invalid option: $num"; continue; } | 		{ msg="Invalid option: $num"; continue; } | ||||||
| @ -251,7 +253,7 @@ if [ ! -e ./.env ]; then | |||||||
| 	ADDITIONAL_KOPANO_WEBAPP_PLUGINS="${ADDITIONAL_KOPANO_WEBAPP_PLUGINS}${KOPANO_WEBAPP_PLUGIN}" | 	ADDITIONAL_KOPANO_WEBAPP_PLUGINS="${ADDITIONAL_KOPANO_WEBAPP_PLUGINS}${KOPANO_WEBAPP_PLUGIN}" | ||||||
| 
 | 
 | ||||||
| 	value_default="no" | 	value_default="no" | ||||||
| 	read -p "Integrate WhatsApp into DeskApp yes/no [$value_default]: " new_value | 	read -r -p "Integrate WhatsApp into DeskApp yes/no [$value_default]: " new_value | ||||||
| 	WHATSAPPDESKAPP_BOOLEAN=${new_value:-$value_default} | 	WHATSAPPDESKAPP_BOOLEAN=${new_value:-$value_default} | ||||||
| 
 | 
 | ||||||
| 	if [ "${WHATSAPPDESKAPP_BOOLEAN}" == "yes" ]; then | 	if [ "${WHATSAPPDESKAPP_BOOLEAN}" == "yes" ]; then | ||||||
| @ -260,7 +262,7 @@ if [ ! -e ./.env ]; then | |||||||
| 
 | 
 | ||||||
| 	echo "${PRINT_SETUP_SUCCESS}" | 	echo "${PRINT_SETUP_SUCCESS}" | ||||||
| 
 | 
 | ||||||
| 	cat <<-EOF >"./.env" | 	cat <<EOF > "./.env" | ||||||
| # please consult https://github.com/zokradonh/kopano-docker | # please consult https://github.com/zokradonh/kopano-docker | ||||||
| # for possible configuration values and their impact | # for possible configuration values and their impact | ||||||
| CORE_VERSION=$CORE_VERSION | CORE_VERSION=$CORE_VERSION | ||||||
| @ -298,8 +300,8 @@ SELF_SERVICE_PASSWORD_MIN_DIGIT=1 | |||||||
| SELF_SERVICE_PASSWORD_MIN_SPECIAL=1 | SELF_SERVICE_PASSWORD_MIN_SPECIAL=1 | ||||||
| 
 | 
 | ||||||
| # switch the value of these two variables to use the activedirectory configuration | # switch the value of these two variables to use the activedirectory configuration | ||||||
| KCUNCOMMENT_LDAP_1=!include /usr/share/kopano/ldap.openldap.cfg | KCUNCOMMENT_LDAP_1="!include /usr/share/kopano/ldap.openldap.cfg" | ||||||
| KCCOMMENT_LDAP_1=!include /usr/share/kopano/ldap.active-directory.cfg | KCCOMMENT_LDAP_1="!include /usr/share/kopano/ldap.active-directory.cfg" | ||||||
| 
 | 
 | ||||||
| MYSQL_HOST=$MYSQL_HOST | MYSQL_HOST=$MYSQL_HOST | ||||||
| MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD | MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD | ||||||
|  | |||||||
| @ -10,10 +10,9 @@ ENV PKI_ROOT /kopano/easypki | |||||||
| ENV PKI_ORGANIZATION Internal Kopano System | ENV PKI_ORGANIZATION Internal Kopano System | ||||||
| ENV PKI_COUNTRY DE | ENV PKI_COUNTRY DE | ||||||
| 
 | 
 | ||||||
| RUN apk add --update \ | RUN apk add --no-cache \ | ||||||
|     easypki \ |     easypki \ | ||||||
|     openssl \ |     openssl | ||||||
|     && rm -rf /var/cache/apk/* |  | ||||||
| 
 | 
 | ||||||
| COPY start.sh /start.sh | COPY start.sh /start.sh | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ | |||||||
| mkdir -p /kopano/ssl/clients/ | mkdir -p /kopano/ssl/clients/ | ||||||
| 
 | 
 | ||||||
| set -euo pipefail | set -euo pipefail | ||||||
| IFS=$'\n\t' |  | ||||||
| 
 | 
 | ||||||
| # clean out any potential port numbers | # clean out any potential port numbers | ||||||
| FQDN=${FQDN%:*} | FQDN=${FQDN%:*} | ||||||
| @ -19,7 +18,7 @@ if [ ! -f /kopano/ssl/ca.pem ]; then | |||||||
| 	for s in kopano_server kopano_dagent kopano_monitor kopano_search kopano_spooler kopano_webapp; do | 	for s in kopano_server kopano_dagent kopano_monitor kopano_search kopano_spooler kopano_webapp; do | ||||||
| 		if [ ! -f /kopano/ssl/$s.pem ]; then | 		if [ ! -f /kopano/ssl/$s.pem ]; then | ||||||
| 			echo "Creating $s certificate..." | 			echo "Creating $s certificate..." | ||||||
| 			easypki create --ca-name internalca --organizational-unit $s --expire 3650 --dns $s --dns $FQDN $s | 			easypki create --ca-name internalca --organizational-unit $s --expire 3650 --dns $s --dns "$FQDN" $s | ||||||
| 			cp /kopano/easypki/internalca/keys/$s.key /kopano/ssl/$s.pem.tmp | 			cp /kopano/easypki/internalca/keys/$s.key /kopano/ssl/$s.pem.tmp | ||||||
| 			cat /kopano/easypki/internalca/certs/$s.crt >> /kopano/ssl/$s.pem.tmp | 			cat /kopano/easypki/internalca/certs/$s.crt >> /kopano/ssl/$s.pem.tmp | ||||||
| 			openssl x509 -in /kopano/easypki/internalca/certs/$s.crt -pubkey -noout >  /kopano/ssl/clients/$s-public.pem.tmp | 			openssl x509 -in /kopano/easypki/internalca/certs/$s.crt -pubkey -noout >  /kopano/ssl/clients/$s-public.pem.tmp | ||||||
| @ -41,7 +40,7 @@ fi | |||||||
| signkey="/kopano/ssl/konnectd-tokens-signing-key.pem" | signkey="/kopano/ssl/konnectd-tokens-signing-key.pem" | ||||||
| if [ ! -f $signkey ]; then | if [ ! -f $signkey ]; then | ||||||
| 	echo "Creating Konnect token signing key..." | 	echo "Creating Konnect token signing key..." | ||||||
| 	openssl genpkey -algorithm RSA -out $signkey.tmp -pkeyopt rsa_keygen_bits:4096 2&> /dev/null | 	openssl genpkey -algorithm RSA -out $signkey.tmp -pkeyopt rsa_keygen_bits:4096 >/dev/null 2>&1 | ||||||
| 	chmod go+r $signkey.tmp | 	chmod go+r $signkey.tmp | ||||||
| 	mv $signkey.tmp $signkey | 	mv $signkey.tmp $signkey | ||||||
| fi | fi | ||||||
|  | |||||||
| @ -4,6 +4,8 @@ FROM ${docker_repo}/kopano_core | |||||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ | RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||||
|     kopano-backup \ |     kopano-backup \ | ||||||
|     kopano-migration-imap \ |     kopano-migration-imap \ | ||||||
|     kopano-migration-pst |     kopano-migration-pst \ | ||||||
|  |     && apt-get clean \ | ||||||
|  |     && rm -rf /var/lib/apt/lists/* | ||||||
| 
 | 
 | ||||||
| CMD [ "/bin/bash" ] | CMD [ "/bin/bash" ] | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								version.sh
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								version.sh
									
									
									
									
									
								
							| @ -7,10 +7,15 @@ fi | |||||||
| source base/create-kopano-repo.sh | source base/create-kopano-repo.sh | ||||||
| 
 | 
 | ||||||
| component=${1:-core} | component=${1:-core} | ||||||
| COMPONENT=$(echo "$component" | tr a-z A-Z) |  | ||||||
| 
 | 
 | ||||||
| if [ -e ./env ]; then | if [ -e ./.env ]; then | ||||||
| 	source ./env | 	# this is a kind of ugly hack to be able to source the env file | ||||||
|  | 	# this is sadly needed since postfix in https://github.com/tomav/docker-mailserver/ cannot deal with quotes values | ||||||
|  | 	tmpfile=$(mktemp /tmp/kopano-docker-env.XXXXXX) | ||||||
|  | 	sed -i '/LDAP_QUERY_FILTER/s/^/#/g' "$tmpfile" | ||||||
|  | 	sed -i '/SASLAUTHD_LDAP_FILTER/s/^/#/g' "$tmpfile" | ||||||
|  | 	# shellcheck disable=SC1090 | ||||||
|  | 	source "$tmpfile" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| case $component in | case $component in | ||||||
| @ -49,3 +54,4 @@ filename=$(h5ai_query "$component") | |||||||
| currentVersion=$(version_from_filename "$filename") | currentVersion=$(version_from_filename "$filename") | ||||||
| 
 | 
 | ||||||
| echo "$currentVersion" | echo "$currentVersion" | ||||||
|  | rm "$tmpfile" | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ ENV CODE_VERSION="${CODE_VERSION}" | |||||||
| 
 | 
 | ||||||
| ENV KWEBD_USER root | ENV KWEBD_USER root | ||||||
| ENV KWEBD_GROUP root | ENV KWEBD_GROUP root | ||||||
|  | # hadolint ignore=DL3002 | ||||||
| USER root | USER root | ||||||
| COPY wrapper.sh /usr/local/bin | COPY wrapper.sh /usr/local/bin | ||||||
| COPY kweb.cfg /etc/kweb.cfg | COPY kweb.cfg /etc/kweb.cfg | ||||||
|  | |||||||
| @ -34,7 +34,10 @@ ENV KOPANO_WEBAPP_SMIME_VERSION=$KOPANO_WEBAPP_SMIME_VERSION | |||||||
| ARG RELEASE_KEY_DOWNLOAD=0 | ARG RELEASE_KEY_DOWNLOAD=0 | ||||||
| ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ||||||
| 
 | 
 | ||||||
|  | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | ||||||
|  | 
 | ||||||
| # install Kopano WebApp and refresh ca-certificates | # install Kopano WebApp and refresh ca-certificates | ||||||
|  | # hadolint ignore=SC2129 | ||||||
| RUN \ | RUN \ | ||||||
|     # community download and package as apt source repository |     # community download and package as apt source repository | ||||||
|     . /kopano/helper/create-kopano-repo.sh && \ |     . /kopano/helper/create-kopano-repo.sh && \ | ||||||
|  | |||||||
| @ -10,9 +10,10 @@ set -eu # unset variables are errors & non-zero return values exit the whole scr | |||||||
| 
 | 
 | ||||||
| ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAPP_PLUGINS" | ADDITIONAL_KOPANO_PACKAGES="$ADDITIONAL_KOPANO_PACKAGES $ADDITIONAL_KOPANO_WEBAPP_PLUGINS" | ||||||
| 
 | 
 | ||||||
| [ ! -z "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update | ||||||
| [ ! -z "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | ||||||
| 	if [ $(dpkg-query -W -f='${Status}' "$installpkg" 2>/dev/null | grep -c "ok installed") -eq 0 ]; then | 	# shellcheck disable=SC2016 disable=SC2086 | ||||||
|  | 	if [ "$(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c 'ok installed')" -eq 0 ]; then | ||||||
| 		apt --assume-yes install "$installpkg" | 		apt --assume-yes install "$installpkg" | ||||||
| 	fi | 	fi | ||||||
| done | done | ||||||
| @ -40,6 +41,7 @@ chown -R www-data:www-data /run/sessions /tmp/webapp | |||||||
| echo "Starting Apache" | echo "Starting Apache" | ||||||
| rm -f /run/apache2/apache2.pid | rm -f /run/apache2/apache2.pid | ||||||
| set +u | set +u | ||||||
|  | # shellcheck disable=SC1091 | ||||||
| source /etc/apache2/envvars | source /etc/apache2/envvars | ||||||
| # cleaning up env variables | # cleaning up env variables | ||||||
| unset "${!KCCONF_@}" | unset "${!KCCONF_@}" | ||||||
|  | |||||||
| @ -20,6 +20,8 @@ ENV KOPANO_ZPUSH_VERSION=$KOPANO_ZPUSH_VERSION | |||||||
| ARG RELEASE_KEY_DOWNLOAD=0 | ARG RELEASE_KEY_DOWNLOAD=0 | ||||||
| ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ENV RELEASE_KEY_DOWNLOAD=$RELEASE_KEY_DOWNLOAD | ||||||
| 
 | 
 | ||||||
|  | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | ||||||
|  | 
 | ||||||
| # install Kopano WebApp and refresh ca-certificates | # install Kopano WebApp and refresh ca-certificates | ||||||
| RUN \ | RUN \ | ||||||
|     # community download and package as apt source repository |     # community download and package as apt source repository | ||||||
|  | |||||||
| @ -7,10 +7,11 @@ 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 | ||||||
| 
 | 
 | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && apt update | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update | ||||||
| [ ! -z "$ADDITIONAL_KOPANO_PACKAGES" ] && for installpkg in "$ADDITIONAL_KOPANO_PACKAGES"; do | [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do | ||||||
| 	if [ $(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c "ok installed") -eq 0 ]; then | 	# shellcheck disable=SC2016 disable=SC2086 | ||||||
| 		apt --assume-yes install $installpkg; | 	if [ "$(dpkg-query -W -f='${Status}' $installpkg 2>/dev/null | grep -c 'ok installed')" -eq 0 ]; then | ||||||
|  | 		apt --assume-yes install "$installpkg" | ||||||
| 	fi | 	fi | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
| @ -42,6 +43,7 @@ tail --pid=$$ -F --lines=0 -q /var/log/z-push/z-push-error.log & | |||||||
| echo "Starting Apache" | echo "Starting Apache" | ||||||
| rm -f /run/apache2/apache2.pid | rm -f /run/apache2/apache2.pid | ||||||
| set +u | set +u | ||||||
|  | # shellcheck disable=SC1091 | ||||||
| source /etc/apache2/envvars | source /etc/apache2/envvars | ||||||
| # cleaning up env variables | # cleaning up env variables | ||||||
| unset "${!KCCONF_@}" | unset "${!KCCONF_@}" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user