gentoo-layman: Add a layman container for easy overlay Dockerfiles
[dockerfile.git] / build.sh
index ecb77b613c0d34466eaa6942c9f3ffdcbf6ce133..df185eee863533577a3542e4ebfcb3186f631d94 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -26,9 +26,9 @@
 
 AUTHOR="${AUTHOR:-W. Trevor King <wking@tremily.us>}"
 NAMESPACE="${NAMESPACE:-wking}"
-DATE="${DATE:-20131226}"
+DATE="${DATE:-20140206}"
 MIRROR="${MIRROR:-http://distfiles.gentoo.org/}"
-ARCH_URL="${ARCH_URL:-${MIRROR}releases/amd64/current-stage3/}"
+ARCH_URL="${ARCH_URL:-${MIRROR}releases/amd64/autobuilds/${DATE}/}"
 STAGE3="${STAGE3:-stage3-amd64-${DATE}.tar.bz2}"
 STAGE3_CONTENTS="${STAGE3_CONTENTS:-${STAGE3}.CONTENTS}"
 STAGE3_DIGESTS="${STAGE3_DIGESTS:-${STAGE3}.DIGESTS.asc}"
@@ -38,6 +38,7 @@ PORTAGE_SIG="${PORTAGE_SIG:-${PORTAGE}.gpgsig}"
 
 DOCKER_IO=$(command -v docker.io)
 DOCKER="${DOCKER:-${DOCKER_IO:-docker}}"
+BUILD_OPTS="${BUILD_OPTS:-}"
 
 REPOS="${REPOS:-
        portage
@@ -45,12 +46,15 @@ REPOS="${REPOS:-
        gentoo-en-us
        gentoo-syslog
        gentoo-java
+       gentoo-layman
        buildbot
+       docker-registry
        elasticsearch
        memcached
        nginx
        nginx-proxy
        kibana
+       kibana-azure
        postgresql
        redis
        stunnel
@@ -108,7 +112,8 @@ import_stage3()
 
                for FILE in "${STAGE3}" "${STAGE3_CONTENTS}" "${STAGE3_DIGESTS}"; do
                        if [ ! -f "downloads/${FILE}" ]; then
-                               wget -O "downloads/${FILE}" "${ARCH_URL}${FILE}"
+                               wget -O "downloads/${FILE}" "${ARCH_URL}${FILE}" ||
+                                       die "failed to download ${ARCH_URL}${FILE}"
                        fi
                done
 
@@ -142,7 +147,8 @@ import_portage()
 
                for FILE in "${PORTAGE}" "${PORTAGE_SIG}"; do
                        if [ ! -f "downloads/${FILE}" ]; then
-                               wget -O "downloads/${FILE}" "${PORTAGE_URL}${FILE}"
+                               wget -O "downloads/${FILE}" "${PORTAGE_URL}${FILE}" ||
+                                       die "failed to download ${PORTAGE_URL}${FILE}"
                        fi
                done
 
@@ -157,12 +163,17 @@ import_portage()
 }
 
 # extract Busybox for the portage image
+#
+# Arguments:
+#
+# 1: SUBDIR target subdirectory for the busybox binary
 extract_busybox()
 {
-       msg "extract Busybox for the portage image"
+       SUBDIR="${1}"
+       msg "extract Busybox binary to ${SUBDIR}"
        THIS_DIR=$(dirname $($REALPATH $0))
        CONTAINER="${NAMESPACE}-gentoo-${DATE}-extract-busybox"
-       "${DOCKER}" run -name "${CONTAINER}" -v "${THIS_DIR}/portage/":/tmp "${NAMESPACE}/gentoo:${DATE}" cp /bin/busybox /tmp/
+       "${DOCKER}" run --name "${CONTAINER}" -v "${THIS_DIR}/${SUBDIR}/":/tmp "${NAMESPACE}/gentoo:${DATE}" cp /bin/busybox /tmp/
        "${DOCKER}" rm "${CONTAINER}"
 }
 
@@ -181,6 +192,10 @@ build_repo()
        REPO="${1}"
        msg "build repo ${REPO}"
        if ! repo_exists "${REPO}"; then
+               if [ "${REPO}" = portage ]; then
+                       extract_busybox "${REPO}"
+               fi
+
                env -i \
                        NAMESPACE="${NAMESPACE}" \
                        TAG="${DATE}" \
@@ -193,16 +208,36 @@ build_repo()
                                < "${REPO}/Dockerfile.template" > "${REPO}/Dockerfile"
 
                msg "build ${NAMESPACE}/${REPO}:${DATE}"
-               "${DOCKER}" build -t "${NAMESPACE}/${REPO}:${DATE}" "${REPO}" || die "failed to build"
+               "${DOCKER}" build ${BUILD_OPTS} -t "${NAMESPACE}/${REPO}:${DATE}" "${REPO}" || die "failed to build"
        fi
        msg "tag ${NAMESPACE}/${REPO}:latest"
        "${DOCKER}" tag -f "${NAMESPACE}/${REPO}:${DATE}" "${NAMESPACE}/${REPO}:latest" || die "failed to tag"
 }
 
-import_stage3
-import_portage
-extract_busybox
+build()
+{
+       import_stage3
+       import_portage
+
+       for REPO in ${REPOS}; do
+               build_repo "${REPO}"
+       done
+}
+
+missing()
+{
+       for REPO in gentoo portage-import ${REPOS}; do
+               if ! repo_exists "${REPO}"; then
+                       msg "${REPO}"
+               fi
+       done
+}
+
+ACTION="${1:-build}"
 
-for REPO in ${REPOS}; do
-       build_repo "${REPO}"
-done
+case "${ACTION}" in
+build) build ;;
+missing) missing ;;
+--help) msg "usage: ${0} [--help] {build|missing}" ;;
+*) die "invalid action '${ACTION}'" ;;
+esac