7 : ${TOP_DIR:="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." && pwd )"}
9 source ${TOP_DIR}/docker/builder-include
11 : ${DOCKER_FILE:="${TOP_DIR}/docker/Dockerfile.builder"}
12 : ${DOCKER_FROM:="$(docker_from)"}
15 echo "${name} - Builds a docker image that contains tools for building petitboot." >&2
16 echo "Usage: ${name} [flags]" >&2
17 echo "Option flags:" >&2
18 echo " -d --dry-run - Do not run build commands." >&2
19 echo " -h --help - Show this help and exit." >&2
20 echo " -p --purge - Remove existing docker image and rebuild." >&2
21 echo " -r --rebuild - Rebuild existing docker image." >&2
22 echo " -t --tag - Print Docker tag to stdout and exit." >&2
23 echo " -v --verbose - Verbose execution." >&2
24 echo "Environment:" >&2
25 echo " DOCKER_FILE - Default: '${DOCKER_FILE}'" >&2
26 echo " DOCKER_FROM - Default: '${DOCKER_FROM}'" >&2
27 echo " DOCKER_TAG - Default: '${DOCKER_TAG}'" >&2
33 long_opts="dry-run,help,purge,rebuild,tag,verbose"
35 opts=$(getopt --options ${short_opts} --long ${long_opts} -n "${name}" -- "$@")
38 echo "${name}: ERROR: Internal getopt" >&2
76 echo "${name}: ERROR: Internal opts" >&2
82 if [[ -n "${usage}" ]]; then
87 if [[ -n "${tag}" ]]; then
93 echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'
96 # Support for docker versions older than 17.05.
97 # See https://github.com/moby/moby/issues/32457
98 if [[ $(version "$(docker version --format '{{.Server.Version}}')") < $(version "17.05") ]]; then
99 tmp_file="${DOCKER_FILE}.tmp"
100 trap "rm -f ${tmp_file}" EXIT
102 cp -f ${DOCKER_FILE} ${tmp_file}
103 DOCKER_FILE=${tmp_file}
104 sed --in-place "s|ARG DOCKER_FROM||" ${tmp_file}
105 sed --in-place "s|\${DOCKER_FROM}|${DOCKER_FROM}|" ${tmp_file}
108 if [[ -n "${purge}" ]] && docker inspect --type image ${DOCKER_TAG} >/dev/null 2>/dev/null; then
109 echo "Removing docker image: ${DOCKER_TAG}" >&2
110 run_cmd "docker rmi --force ${DOCKER_TAG}"
111 elif [[ -z "${rebuild}" ]] && docker inspect --type image ${DOCKER_TAG} >/dev/null 2>/dev/null; then
112 echo "Docker image exists: ${DOCKER_TAG}" >&2
117 echo "Building docker image: ${DOCKER_TAG}" >&2
120 run_cmd "docker build \
121 --file "${DOCKER_FILE}" \
122 --build-arg DOCKER_FROM=${DOCKER_FROM} \
123 --tag ${DOCKER_TAG} \