stunnel: Add a stunnel-wrapper image
[dockerfile.git] / build.sh
1 #!/bin/sh
2 #
3 # Copyright (C) 2013 W. Trevor King <wking@tremily.us>
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are met:
7 #
8 # * Redistributions of source code must retain the above copyright notice, this
9 # list of conditions and the following disclaimer.
10 #
11 # * Redistributions in binary form must reproduce the above copyright notice,
12 # this list of conditions and the following disclaimer in the documentation
13 # and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26
27 AUTHOR="${AUTHOR:-W. Trevor King <wking@tremily.us>}"
28 NAMESPACE="${NAMESPACE:-wking}"
29 DATE="${DATE:-20131212}"
30 MIRROR="${MIRROR:-http://mirror.mcs.anl.gov/pub/gentoo/}"
31 ARCH_URL="${ARCH_URL:-${MIRROR}releases/amd64/current-stage3/}"
32 STAGE3="${STAGE3:-stage3-amd64-${DATE}.tar.bz2}"
33 STAGE3_CONTENTS="${STAGE3_CONTENTS:-${STAGE3}.CONTENTS}"
34 STAGE3_DIGESTS="${STAGE3_DIGESTS:-${STAGE3}.DIGESTS.asc}"
35 PORTAGE_URL="${PORTAGE_URL:-${MIRROR}snapshots/}"
36 PORTAGE="${PORTAGE:-portage-${DATE}.tar.xz}"
37 PORTAGE_SIG="${PORTAGE_SIG:-${PORTAGE}.gpgsig}"
38
39 REPOS="${REPOS:-
40         portage
41         gentoo-portage
42         gentoo-en-us
43         gentoo-syslog
44         gentoo-java
45         buildbot
46         elasticsearch
47         postgresql
48         redis
49         stunnel
50         }"
51
52 die()
53 {
54         echo "$1"
55         exit 1
56 }
57
58 REALPATH="${REALPATH:-$(command -v realpath)}"
59 if [ -z "${REALPATH}" ]; then
60         READLINK="${READLINK:-$(command -v readlink)}"
61         if [ -n "${READLINK}" ]; then
62                 REALPATH="${READLINK} -f"
63         else
64                 die "need realpath or readlink to canonicalize paths"
65         fi
66 fi
67
68 STAGE3_IMAGES=$(docker images "${NAMESPACE}/gentoo")
69 STAGE3_MATCHES=$(echo "${STAGE3_IMAGES}" | grep "${DATE}")
70 if [ -z "${STAGE3_MATCHES}" ]; then
71         # import stage3 image from Gentoo mirrors
72
73         for FILE in "${STAGE3}" "${STAGE3_CONTENTS}" "${STAGE3_DIGESTS}"; do
74                 if [ ! -f "downloads/${FILE}" ]; then
75                         wget -O "downloads/${FILE}" "${ARCH_URL}${FILE}"
76                 fi
77         done
78
79         gpg --verify "downloads/${STAGE3_DIGESTS}" || die "insecure digests"
80         SHA512_HASHES=$(grep -A1 SHA512 "downloads/${STAGE3_DIGESTS}" | grep -v '^--')
81         SHA512_CHECK=$(cd downloads/ && (echo "${SHA512_HASHES}" | sha512sum -c))
82         SHA512_FAILED=$(echo "${SHA512_CHECK}" | grep FAILED)
83         if [ -n "${SHA512_FAILED}" ]; then
84                 die "${SHA512_FAILED}"
85         fi
86
87         docker import - "${NAMESPACE}/gentoo:${DATE}" < "downloads/${STAGE3}" || die "failed to import"
88 fi
89
90 docker tag -f "${NAMESPACE}/gentoo:${DATE}" "${NAMESPACE}/gentoo:latest" || die "failed to tag"
91
92 PORTAGE_IMAGES=$(docker images "${NAMESPACE}/portage-import")
93 PORTAGE_MATCHES=$(echo "${PORTAGE_IMAGES}" | grep "${DATE}")
94 if [ -z "${PORTAGE_MATCHES}" ]; then
95         # import portage image from Gentoo mirrors
96
97         for FILE in "${PORTAGE}" "${PORTAGE_SIG}"; do
98                 if [ ! -f "downloads/${FILE}" ]; then
99                         wget -O "downloads/${FILE}" "${PORTAGE_URL}${FILE}"
100                 fi
101         done
102
103         gpg --verify "downloads/${PORTAGE_SIG}" "downloads/${PORTAGE}" || die "insecure digests"
104
105         docker import - "${NAMESPACE}/portage-import:${DATE}" < "downloads/${PORTAGE}" || die "failed to import"
106 fi
107
108 docker tag -f "${NAMESPACE}/portage-import:${DATE}" "${NAMESPACE}/portage-import:latest" || die "failed to tag"
109
110 # extract Busybox for the portage image
111 THIS_DIR=$(dirname $($REALPATH $0))
112 CONTAINER="${NAMESPACE}-gentoo-${DATE}-extract-busybox"
113 docker run -name "${CONTAINER}" -v "${THIS_DIR}/portage/":/tmp "${NAMESPACE}/gentoo:${DATE}" cp /bin/busybox /tmp/
114 docker rm "${CONTAINER}"
115
116 for REPO in ${REPOS}; do
117         REPO_IMAGES=$(docker images "${NAMESPACE}/${REPO}")
118         REPO_MATCHES=$(echo "${REPO_IMAGES}" | grep "${DATE}")
119         if [ -z "${REPO_MATCHES}" ]; then
120                 cp "${REPO}/Dockerfile.template" "${REPO}/Dockerfile"
121                 sed -i "s|TAG|${DATE}|g" "${REPO}/Dockerfile"
122                 sed -i "s|NAMESPACE|${NAMESPACE}|g" "${REPO}/Dockerfile"
123                 sed -i "s|MAINTAINER.*|MAINTAINER ${AUTHOR}|g" "${REPO}/Dockerfile"
124                 docker build -t "${NAMESPACE}/${REPO}:${DATE}" "${REPO}" || die "failed to build"
125         fi
126         docker tag -f "${NAMESPACE}/${REPO}:${DATE}" "${NAMESPACE}/${REPO}:latest" || die "failed to tag"
127 done