mirror of
				https://github.com/zokradonh/kopano-docker
				synced 2025-10-31 02:17:47 +00:00 
			
		
		
		
	smaller improvements to setup.sh (#153)
* replace bash function to list docker tags with https://github.com/genuinetools/reg/ * this depends on new release in https://github.com/genuinetools/reg/issues/186 to fully function * update docker version * fix version.sh to also show versions from repos defined in .env * add script to list available tags and update values in .env * define default values for all version vars * add previously missing containers * use command instead of hash in update env script * use a custom select function instead shell builtin (since it does not handle default values) * add setup-update-tag in test.exp
This commit is contained in:
		
							parent
							
								
									f19cf274f7
								
							
						
					
					
						commit
						3a0ad6d4af
					
				
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,3 +1,5 @@ | ||||
| SHELL := /bin/bash # Use bash syntax | ||||
| 
 | ||||
| # if not run in travis, get docker_login and _pwd from file
 | ||||
| ifndef TRAVIS | ||||
| 	docker_repo := zokradonh | ||||
| @ -174,6 +176,7 @@ tag-all: build-all ## Helper target to create tags for all images. | ||||
| 
 | ||||
| tag-container: component ?= base | ||||
| tag-container: ## Helper target to tag a given image. Defaults to the base image.
 | ||||
| 	# TODO how to tag additional releases. e.g. also tag 8.7.80.1035 as 8.7.80? | ||||
| 	@echo 'create tag $($(component)_version)' | ||||
| 	docker tag $(docker_repo)/kopano_$(component) $(docker_repo)/kopano_$(component):${$(component)_version} | ||||
| 	@echo $(docker_repo)/kopano_$(component):${$(component)_version} >> $(TAG_FILE) | ||||
|  | ||||
| @ -1,6 +1,12 @@ | ||||
| FROM docker:18.09.1 | ||||
| FROM docker:18.09.6 | ||||
| ENV COMPOSE_VERSION "1.23.2" | ||||
| ENV REG_VERSION "0.16.0" | ||||
| RUN apk add --no-cache bash curl expect make nano jq py-pip | ||||
| RUN pip install --no-cache-dir docker-compose==${COMPOSE_VERSION} | ||||
| # the 0.16.0 release of reg has a bug that breaks loading tags from the docker hub. | ||||
| # issue is fixed in master, but not in a release. | ||||
| # rel https://github.com/genuinetools/reg/issues/186 | ||||
| RUN curl -fSL "https://github.com/genuinetools/reg/releases/download/v$REG_VERSION/reg-linux-amd64" -o "/usr/local/bin/reg" \ | ||||
|     && chmod a+x "/usr/local/bin/reg" | ||||
| WORKDIR /kopano-docker | ||||
| CMD ["bash"] | ||||
|  | ||||
							
								
								
									
										118
									
								
								setup-update-tag.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								setup-update-tag.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,118 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| set -euo pipefail | ||||
| IFS=$'\n\t' | ||||
| 
 | ||||
| if ! command -v reg > /dev/null; then | ||||
| 	echo "Please install reg in order to run this script." | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ ! -e ./.env ]; then | ||||
| 	echo "please run setup.sh first" | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 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 quoted values | ||||
| tmpfile=$(mktemp /tmp/kopano-docker-env.XXXXXX) | ||||
| cp ./.env "$tmpfile" | ||||
| sed -i '/LDAP_QUERY_FILTER/s/^/#/g' "$tmpfile" | ||||
| sed -i '/SASLAUTHD_LDAP_FILTER/s/^/#/g' "$tmpfile" | ||||
| # shellcheck disable=SC1090 | ||||
| source "$tmpfile" | ||||
| 
 | ||||
| # define a default docker_repo in case its not in .env | ||||
| docker_repo=${docker_repo:-zokradonh} | ||||
| 
 | ||||
| docker_tag_search () { | ||||
| 	image="$1" | ||||
| 	results=$(reg tags "$image" 2> /dev/null) | ||||
| 	echo "$results" | xargs -n1 | sort -ru | ||||
| } | ||||
| 
 | ||||
| # function from https://stackoverflow.com/a/42790579/4754613 | ||||
| selectWithDefault() { | ||||
| 
 | ||||
| 	local item i=0 numItems=$# | ||||
| 
 | ||||
| 	# Print numbered menu items, based on the arguments passed. | ||||
| 	for item; do         # Short for: for item in "$@"; do | ||||
| 		printf '%s\n' "$((++i))) $item" | ||||
| 	done >&2 # Print to stderr, as `select` does. | ||||
| 
 | ||||
| 	# Prompt the user for the index of the desired item. | ||||
| 	while :; do | ||||
| 		printf %s "${PS3-#? }" >&2 # Print the prompt string to stderr, as `select` does. | ||||
| 		read -r index | ||||
| 		# Make sure that the input is either empty or that a valid index was entered. | ||||
| 		[[ -z $index ]] && break  # empty input | ||||
| 		(( index >= 1 && index <= numItems )) 2>/dev/null || { echo "Invalid selection. Please try again." >&2; continue; } | ||||
| 		break | ||||
| 	done | ||||
| 
 | ||||
| 	# Output the selected item, if any. | ||||
| 	[[ -n $index ]] && printf %s "${@: index:1}" | ||||
| } | ||||
| 
 | ||||
| update_env_file () { | ||||
| 	varname="$1" | ||||
| 	varvalue="$2" | ||||
| 	if ! grep -q "$varname" ./.env; then | ||||
| 		echo "$varname=$varvalue" >> ./.env | ||||
| 	else | ||||
| 		sed -i "/$varname/c $varname=$varvalue" ./.env | ||||
| 	fi | ||||
| } | ||||
| 
 | ||||
| tag_question () { | ||||
| 	containername="$1" | ||||
| 	value_default="$2" | ||||
| 	description="$3" | ||||
| 	echo "Which tag do you want to use for $description? [$value_default]" | ||||
| 	echo "Available tags in $docker_repo/$containername/: " | ||||
| 	set +e # do not exit when new_value is empty | ||||
| 	# shellcheck disable=SC2046 | ||||
| 	new_value=$(selectWithDefault $(docker_tag_search "$docker_repo/$containername")) | ||||
| 	set -e | ||||
| 	return_value=${new_value:-$value_default} | ||||
| } | ||||
| 
 | ||||
| echo "Please be aware that downgrading to an older version could result in failure to start!" | ||||
| 
 | ||||
| tag_question kopano_core "${CORE_VERSION:-latest}" "Kopano Core components" | ||||
| update_env_file CORE_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_webapp "${WEBAPP_VERSION:-latest}" "Kopano WebApp" | ||||
| update_env_file WEBAPP_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_web "${KWEB_VERSION:-latest}" "reverse proxy" | ||||
| update_env_file KWEB_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_zpush "${ZPUSH_VERSION:-latest}" "Z-Push" | ||||
| update_env_file ZPUSH_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_kdav "${KDAV_VERSION:-latest}" "kDAV" | ||||
| update_env_file KDAV_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_konnect "${KONNECT_VERSION:-latest}" "Kopano Konnect" | ||||
| update_env_file KONNECT_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_kwmserver "${KWM_VERSION:-latest}" "Kopano Kwmserver" | ||||
| update_env_file KWM_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_meet "${MEET_VERSION:-latest}" "Kopano Meet" | ||||
| update_env_file MEET_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_scheduler "${SCHEDULER_VERSION:-latest}" "Scheduler" | ||||
| update_env_file SCHEDULER_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_ssl "${SSL_VERSION:-latest}" "SSL helper container" | ||||
| update_env_file SSL_VERSION "$return_value" | ||||
| 
 | ||||
| tag_question kopano_ldap "${LDAP_VERSION:-latest}" "LDAP container" | ||||
| update_env_file LDAP_VERSION "$return_value" | ||||
| 
 | ||||
| if [ -e "$tmpfile" ]; then | ||||
| 	rm "$tmpfile" | ||||
| fi | ||||
							
								
								
									
										45
									
								
								setup.sh
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								setup.sh
									
									
									
									
									
								
							| @ -30,37 +30,8 @@ plugin_menu() { | ||||
| } | ||||
| 
 | ||||
| docker_tag_search () { | ||||
| 	set +e | ||||
| 	# Display help | ||||
| 	if [[ "${1}" == "" ]]; then | ||||
| 		echo "Usage: docker tags repo/image" | ||||
| 		echo "       docker tags image" | ||||
| 		return | ||||
| 	fi | ||||
| 
 | ||||
| 	# Full repo/image was supplied | ||||
| 	if [[ $1 == *"/"* ]]; then | ||||
| 		name=$1 | ||||
| 
 | ||||
| 	# Only image was supplied, default to library/image | ||||
| 	else | ||||
| 		name=library/${1} | ||||
| 	fi | ||||
| 	#printf "Searching tags for ${name}" | ||||
| 
 | ||||
| 	# Fetch all pages, because the only endpoint supporting pagination params | ||||
| 	# appears to be tags/lists, but that needs authorization | ||||
| 	results="" | ||||
| 	i=0 | ||||
| 	has_more=0 | ||||
| 	while [ $has_more -eq 0 ]; do | ||||
| 		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) | ||||
| 		has_more=$? | ||||
| 		if [[ -n "${result// }" ]]; then results="${results} ${result}"; fi | ||||
| 			#printf "." | ||||
| 	done | ||||
| 
 | ||||
| 	image="$1" | ||||
| 	results=$(reg tags "$image" 2> /dev/null) | ||||
| 	echo "$results" | xargs -n1 | sort -ru | xargs | ||||
| } | ||||
| 
 | ||||
| @ -73,28 +44,30 @@ if [ ! -e ./.env ]; then | ||||
| 	PRINT_SETUP_SUCCESS="" | ||||
| 
 | ||||
| 	echo "Creating an .env file for you" | ||||
| 	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)" | ||||
| 
 | ||||
| 	# if the optional https://github.com/genuinetools/reg is installed this will list available tags | ||||
| 	if command -v reg > /dev/null; then | ||||
| 		echo "Available tags in zokradonh/kopano_core/: $(docker_tag_search zokradonh/kopano_core)" | ||||
| 	fi | ||||
| 	value_default=latest | ||||
| 	read -r -p "Which tag do you want to use for Kopano Core components? [$value_default]: " new_value | ||||
| 	CORE_VERSION=${new_value:-$value_default} | ||||
| 
 | ||||
| 	if command -v jq > /dev/null; then | ||||
| 	if command -v reg > /dev/null; then | ||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_webapp/: $(docker_tag_search zokradonh/kopano_webapp)" | ||||
| 	fi | ||||
| 	value_default=latest | ||||
| 	read -r -p "Which tag do you want to use for Kopano WebApp? [$value_default]: " new_value | ||||
| 	WEBAPP_VERSION=${new_value:-$value_default} | ||||
| 
 | ||||
| 	if command -v jq > /dev/null; then | ||||
| 	if command -v reg > /dev/null; then | ||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_zpush/: $(docker_tag_search zokradonh/kopano_zpush)" | ||||
| 	fi | ||||
| 	value_default=latest | ||||
| 	read -r -p "Which tag do you want to use for Z-Push? [$value_default]: " new_value | ||||
| 	ZPUSH_VERSION=${new_value:-$value_default} | ||||
| 
 | ||||
| 	if command -v jq > /dev/null; then | ||||
| 	if command -v reg > /dev/null; then | ||||
| 		echo "Available tags in https://hub.docker.com/r/zokradonh/kopano_konnect/: $(docker_tag_search zokradonh/kopano_konnect)" | ||||
| 	fi | ||||
| 	value_default=latest | ||||
|  | ||||
							
								
								
									
										10
									
								
								test.exp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								test.exp
									
									
									
									
									
								
							| @ -16,3 +16,13 @@ expect { | ||||
| 	} | ||||
| 	eof | ||||
| } | ||||
| 
 | ||||
| spawn "./setup-update-tag.sh" | ||||
| 
 | ||||
| expect { | ||||
| 	"#?" { | ||||
| 		send "\r" | ||||
| 		exp_continue | ||||
| 	} | ||||
| 	eof | ||||
| } | ||||
|  | ||||
| @ -11,8 +11,9 @@ distribution=${2:-Debian_9.0} | ||||
| 
 | ||||
| if [ -e ./.env ]; then | ||||
| 	# 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 | ||||
| 	# this is sadly needed since postfix in https://github.com/tomav/docker-mailserver/ cannot deal with quoted values | ||||
| 	tmpfile=$(mktemp /tmp/kopano-docker-env.XXXXXX) | ||||
| 	cp ./.env "$tmpfile" | ||||
| 	sed -i '/LDAP_QUERY_FILTER/s/^/#/g' "$tmpfile" | ||||
| 	sed -i '/SASLAUTHD_LDAP_FILTER/s/^/#/g' "$tmpfile" | ||||
| 	# shellcheck disable=SC1090 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user