build-docker.sh does not assume PWD=<repo root> (#302)
* bash variables in build-docker.sh are wrapped by curly brackets * Ensure presence of config file while running build-docker.sh * Do not assume that build-docker.sh is run from the repository root directory * Mount config file in predictable location in docker container
This commit is contained in:
		
							parent
							
								
									57ef9b88e3
								
							
						
					
					
						commit
						ae4ec6445e
					
				|  | @ -1,36 +1,44 @@ | |||
| #!/bin/bash -e | ||||
| #!/bin/bash -eu | ||||
| DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | ||||
| 
 | ||||
| BUILD_OPTS="$*" | ||||
| 
 | ||||
| DOCKER="docker" | ||||
| set +e | ||||
| if ! $DOCKER ps >/dev/null 2>&1; then | ||||
| 
 | ||||
| if ! ${DOCKER} ps >/dev/null 2>&1; then | ||||
| 	DOCKER="sudo docker" | ||||
| fi | ||||
| if ! $DOCKER ps >/dev/null; then | ||||
| if ! ${DOCKER} ps >/dev/null; then | ||||
| 	echo "error connecting to docker:" | ||||
| 	$DOCKER ps | ||||
| 	${DOCKER} ps | ||||
| 	exit 1 | ||||
| fi | ||||
| set -e | ||||
| 
 | ||||
| if [ -f config ]; then | ||||
| 	# shellcheck disable=SC1091 | ||||
| 	source config | ||||
| CONFIG_FILE="" | ||||
| if [ -f "${DIR}/config" ]; then | ||||
| 	CONFIG_FILE="${DIR}/config" | ||||
| fi | ||||
| 
 | ||||
| while getopts "c:" flag | ||||
| do | ||||
| 	case "$flag" in | ||||
| 	case "${flag}" in | ||||
| 		c) | ||||
| 			# shellcheck disable=SC1090 | ||||
| 			source "$OPTARG" | ||||
| 			CONFIG_FILE="${OPTARG}" | ||||
| 			;; | ||||
| 		*) | ||||
| 			;; | ||||
| 	esac | ||||
| done | ||||
| 
 | ||||
| # Ensure that the confguration file is present | ||||
| if test -z "${CONFIG_FILE}"; then | ||||
| 	echo "Configuration file need to be present in '${DIR}/config' or path passed as parameter" | ||||
| 	exit 1 | ||||
| else | ||||
| 	# shellcheck disable=SC1090 | ||||
| 	source "${CONFIG_FILE}" | ||||
| fi | ||||
| 
 | ||||
| CONTAINER_NAME=${CONTAINER_NAME:-pigen_work} | ||||
| CONTINUE=${CONTINUE:-0} | ||||
| PRESERVE_CONTAINER=${PRESERVE_CONTAINER:-0} | ||||
|  | @ -41,23 +49,27 @@ if [ -z "${IMG_NAME}" ]; then | |||
| exit 1 | ||||
| fi | ||||
| 
 | ||||
| CONTAINER_EXISTS=$($DOCKER ps -a --filter name="$CONTAINER_NAME" -q) | ||||
| CONTAINER_RUNNING=$($DOCKER ps --filter name="$CONTAINER_NAME" -q) | ||||
| if [ "$CONTAINER_RUNNING" != "" ]; then | ||||
| 	echo "The build is already running in container $CONTAINER_NAME. Aborting." | ||||
| CONTAINER_EXISTS=$(${DOCKER} ps -a --filter name="${CONTAINER_NAME}" -q) | ||||
| CONTAINER_RUNNING=$(${DOCKER} ps --filter name="${CONTAINER_NAME}" -q) | ||||
| if [ "${CONTAINER_RUNNING}" != "" ]; then | ||||
| 	echo "The build is already running in container ${CONTAINER_NAME}. Aborting." | ||||
| 	exit 1 | ||||
| fi | ||||
| if [ "$CONTAINER_EXISTS" != "" ] && [ "$CONTINUE" != "1" ]; then | ||||
| 	echo "Container $CONTAINER_NAME already exists and you did not specify CONTINUE=1. Aborting." | ||||
| if [ "${CONTAINER_EXISTS}" != "" ] && [ "${CONTINUE}" != "1" ]; then | ||||
| 	echo "Container ${CONTAINER_NAME} already exists and you did not specify CONTINUE=1. Aborting." | ||||
| 	echo "You can delete the existing container like this:" | ||||
| 	echo "  $DOCKER rm -v $CONTAINER_NAME" | ||||
| 	echo "  ${DOCKER} rm -v ${CONTAINER_NAME}" | ||||
| 	exit 1 | ||||
| fi | ||||
| 
 | ||||
| $DOCKER build -t pi-gen . | ||||
| if [ "$CONTAINER_EXISTS" != "" ]; then | ||||
| 	trap 'echo "got CTRL+C... please wait 5s"; $DOCKER stop -t 5 ${CONTAINER_NAME}_cont' SIGINT SIGTERM | ||||
| 	time $DOCKER run --rm --privileged \ | ||||
| # Modify original build-options to allow config file to be mounted in the docker container | ||||
| BUILD_OPTS="$(echo ${BUILD_OPTS:-} | sed -r 's@\-c\s?([^ ]+)@-c /config@')" | ||||
| 
 | ||||
| ${DOCKER} build -t pi-gen "${DIR}" | ||||
| if [ "${CONTAINER_EXISTS}" != "" ]; then | ||||
| 	trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${CONTAINER_NAME}_cont' SIGINT SIGTERM | ||||
| 	time ${DOCKER} run --rm --privileged \ | ||||
| 		--volume "${CONFIG_FILE}":/config:ro \ | ||||
| 		--volumes-from="${CONTAINER_NAME}" --name "${CONTAINER_NAME}_cont" \ | ||||
| 		pi-gen \ | ||||
| 		bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && | ||||
|  | @ -65,8 +77,9 @@ if [ "$CONTAINER_EXISTS" != "" ]; then | |||
| 	rsync -av work/*/build.log deploy/" & | ||||
| 	wait "$!" | ||||
| else | ||||
| 	trap 'echo "got CTRL+C... please wait 5s"; $DOCKER stop -t 5 ${CONTAINER_NAME}' SIGINT SIGTERM | ||||
| 	time $DOCKER run --name "${CONTAINER_NAME}" --privileged \ | ||||
| 	trap 'echo "got CTRL+C... please wait 5s" && ${DOCKER} stop -t 5 ${CONTAINER_NAME}' SIGINT SIGTERM | ||||
| 	time ${DOCKER} run --name "${CONTAINER_NAME}" --privileged \ | ||||
| 		--volume "${CONFIG_FILE}":/config:ro \ | ||||
| 		pi-gen \ | ||||
| 		bash -e -o pipefail -c "dpkg-reconfigure qemu-user-static && | ||||
| 	cd /pi-gen; ./build.sh ${BUILD_OPTS} && | ||||
|  | @ -74,12 +87,12 @@ else | |||
| 	wait "$!" | ||||
| fi | ||||
| echo "copying results from deploy/" | ||||
| $DOCKER cp "${CONTAINER_NAME}":/pi-gen/deploy . | ||||
| ${DOCKER} cp "${CONTAINER_NAME}":/pi-gen/deploy . | ||||
| ls -lah deploy | ||||
| 
 | ||||
| # cleanup | ||||
| if [ "$PRESERVE_CONTAINER" != "1" ]; then | ||||
| 	$DOCKER rm -v "$CONTAINER_NAME" | ||||
| if [ "${PRESERVE_CONTAINER}" != "1" ]; then | ||||
| 	${DOCKER} rm -v "${CONTAINER_NAME}" | ||||
| fi | ||||
| 
 | ||||
| echo "Done! Your image(s) should be in deploy/" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user