Make image with build tools
[git-tools-moved-to-github.git] / id-deb-build / docker-build.sh
1 #!/bin/sh
2 usage()
3 {
4     cat <<EOF
5 Usage: docker-build.sh [OPTIONS]
6 Options:
7         [--debian=distros]
8         [--ubuntu=distros]
9         [--verbose]
10         [--upload]
11 EOF
12     exit $1
13 }
14 D0=`dirname $0`
15 ID_DEB_BUILD=`cd $D0; pwd`
16
17 UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk}
18 UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub}
19 upload=false
20 while test $# -gt 0; do
21     case "$1" in
22         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
23         *) optarg= ;;
24     esac
25     case $1 in
26         --debian=*)
27             DEBIAN_DIST_A=$optarg
28             ;;
29         --ubuntu=*)
30             UBUNTU_DIST_A=$optarg
31             ;;
32         --centos=*)
33             CENTOS_DIST_A=$optarg
34             ;;
35         --upload)
36             upload=true
37             ;;
38         --verbose)
39             set -x
40             ;;
41         -*)
42             do_help=yes
43             ;;
44     esac
45     shift
46 done
47 if test -f IDMETA;  then
48     . ./IDMETA
49 else
50     echo "IDMETA missing"
51     exit 1
52 fi
53 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
54     DEBIAN_DIST=$DEBIAN_DIST_A
55     UBUNTU_DIST=$UBUNTU_DIST_A
56     CENTOS_DIST=$CENTOS_DIST_A
57 fi
58
59 if test "$CENTOS_DIST"; then
60     RNAME=`awk '/Name:/ {print $2}' *.spec`
61     if test "$NAME" -a "$NAME" != "$RNAME"; then
62         echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
63         exit 1
64     fi
65     PRODUCT=$RNAME
66     centos=true
67 else
68     centos=false
69 fi
70
71 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
72     debian=true
73     DNAME=`awk '/Source:/ {print $2}' debian/control`
74     if test "$NAME" -a "$NAME" != "$DNAME"; then
75         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
76         exit 1
77     fi
78     PRODUCT=$DNAME
79 else
80     debian=false
81 fi
82
83 TAR=${PRODUCT}-${VERSION}.tar.gz
84 if test ! -f "$TAR"; then
85     echo "tar $TAR missing"
86     exit 1
87 fi
88
89 if $upload; then
90     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
91     echo "Uploading to ${UPLOAD_URI}"
92     if $centos; then
93         for dist in ${CENTOS_DIST}; do
94             case $dist in
95                 centos6)
96                     D=6;;
97                 centos7)
98                     D=7;;
99                 *)
100                     echo "$dist not supported"
101                     exit 1
102             esac
103             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$D/RPMS"
104             ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/centos/$D/SRPMS"
105             scp -r build/centos/$dist/rpmbuild/RPMS ${UPLOAD_URI}/redhat/centos/$D
106             scp -r build/centos/$dist/rpmbuild/SRPMS ${UPLOAD_URI}/redhat/centos/$D
107         done
108         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >yum-update.log 2>&1; then
109             echo "update-yum-archive.sh failed; inspect yum-update.log"
110             exit 1
111         fi
112     fi
113     if $debian; then
114         if test -n "${DEBIAN_DIST}"; then
115             for dist in ${DEBIAN_DIST}; do
116                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
117                 if ! scp build/debian/${dist}/* ${UPLOAD_URI}/debian/${dist}; then
118                     echo "Upload failed for $dist"
119                     exit 1
120                 fi
121             done
122         fi
123         if test -n "${UBUNTU_DIST}"; then
124             for dist in ${UBUNTU_DIST}; do
125                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
126                 if ! scp build/ubuntu/${dist}/* ${UPLOAD_URI}/ubuntu/${dist}; then
127                     echo "Upload failed for $dist"
128                     exit 1
129                 fi
130             done
131         fi
132         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
133             echo "update-archive.sh failed"
134             exit 1
135         fi
136     fi
137     echo "Upload successful - we hope"
138     exit 0
139 fi
140
141
142 if $centos; then
143     for dist in ${CENTOS_DIST}; do
144         test -d build/centos/$dist && sudo rm -fr build/centos/$dist
145         mkdir -p build/centos/$dist/rpmbuild
146         mkdir -p build/centos/$dist/rpmbuild/BUILD
147         mkdir -p build/centos/$dist/rpmbuild/BUILDROOT
148         mkdir -p build/centos/$dist/rpmbuild/RPMS/noarch
149         mkdir -p build/centos/$dist/rpmbuild/RPMS/x86_64
150         mkdir -p build/centos/$dist/rpmbuild/SOURCES
151         mkdir -p build/centos/$dist/rpmbuild/SPECS
152         mkdir -p build/centos/$dist/rpmbuild/SRPMS
153         cp ${TAR} build/centos/$dist/rpmbuild/SOURCES
154         SPEC=${PRODUCT}.spec
155         cp ${SPEC} build/centos/$dist/rpmbuild/SPECS
156         cp IDMETA build/centos/$dist/rpmbuild
157         cp ${ID_DEB_BUILD}/in-docker-rpm.sh build/centos/$dist
158     done
159
160 fi
161
162 if $debian; then
163     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
164     if test ! -x $MKDEBSRC; then
165         echo "$MKDEBSRC not found"
166         exit 1
167     fi
168     cp ${ID_DEB_BUILD}/in-docker.sh .
169     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
170         echo "id-mk-deb-changelog.sh failed"
171     fi
172     if ! ${MKDEBSRC}; then
173         echo "id-mk-deb-src.sh failed"
174     fi
175     cd deb-src
176     for f in *.dsc; do
177         if test -f "$f"; then
178             DSC=$f
179         fi
180     done
181     cd ..
182     if test -z "$DSC"; then
183         echo "${DSC} does not exist"
184         exit 1
185     fi
186
187     if test "${DEBIAN_DIST}"; then
188         for dist in ${DEBIAN_DIST}; do
189             test -f build/debian/$dist && sudo rm -fr build/debian/$dist
190             mkdir -p build/debian
191             cp -a deb-src build/debian/$dist
192             cp ${ID_DEB_BUILD}/in-docker.sh build/debian/$dist
193         done
194     fi
195     if test "${UBUNTU_DIST}"; then
196         for dist in ${UBUNTU_DIST}; do
197             sudo rm -fr build/ubuntu/$dist
198             mkdir -p build/ubuntu
199             cp -a deb-src build/ubuntu/$dist
200             cp ${ID_DEB_BUILD}/in-docker.sh build/ubuntu/$dist
201         done
202     fi
203 fi
204
205 if test "${CENTOS_DIST}"; then
206     for dist in ${CENTOS_DIST}; do
207         case $dist in
208             centos6)
209                 D=6;;
210             centos7)
211                 D=7;;
212             *)
213                 echo "$dist not supported"
214                 exit 1
215         esac
216         cd build/centos/$dist
217
218         echo "FROM centos:$D" >Dockerfile
219         echo "RUN yum install -y wget yum-utils rpm-build gcc gcc-c++ make" >>Dockerfile
220         echo "RUN rpm --import http://ftp.indexdata.com/pub/yum/centos/$D/RPM-GPG-KEY-indexdata" >>Dockerfile
221         echo "RUN wget http://ftp.indexdata.com/pub/yum/centos/$D/indexdata.repo -P /etc/yum.repos.d/" >>Dockerfile
222         echo 'ENTRYPOINT ["/bin/sh", "-c"]' >>Dockerfile
223         docker build -t indexdata-build-centos-$D .
224         echo -n "$dist "
225         docker run --rm  -v "$PWD:/build" -w /build/rpmbuild indexdata-build-centos-$D ../in-docker-rpm.sh >log 2>&1
226         if test $? -eq 0; then
227                 echo Done
228         else
229                 echo "Fail. Inspect build/centos/$dist/log"
230         fi
231         cd ../../..
232     done
233 fi
234 if test "${DEBIAN_DIST}"; then
235     for dist in ${DEBIAN_DIST}; do
236         cd build/debian/$dist
237         echo "FROM debian:$dist" >Dockerfile
238         echo 'RUN apt-get update && apt-get -q install -y wget devscripts equivs' >>Dockerfile
239         echo 'RUN wget -q -O - http://ftp.indexdata.dk/debian/indexdata.asc|apt-key add -' >>Dockerfile
240         echo "RUN echo \"deb http://ftp.indexdata.dk/debian $dist main\" >/etc/apt/sources.list.d/indexdata.list" >>Dockerfile
241         docker build -t indexdata-build-debian-$dist .
242         echo -n "Debian $dist "
243         docker run --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION indexdata-build-debian-$dist ../in-docker.sh >log 2>&1
244         if test $? -eq 0; then
245                 echo Done
246         else
247                 echo "Fail. Inspect build/debian/$dist/log"
248         fi
249         cd ../../..
250     done
251 fi
252 if test "${UBUNTU_DIST}"; then
253     for dist in ${UBUNTU_DIST}; do
254         cd build/ubuntu/$dist
255         echo "FROM ubuntu:$dist" >Dockerfile
256         echo 'RUN apt-get update && apt-get -q install -y wget devscripts equivs' >>Dockerfile
257         echo 'RUN wget -q -O - http://ftp.indexdata.dk/debian/indexdata.asc|apt-key add -' >>Dockerfile
258         echo "RUN echo \"deb http://ftp.indexdata.dk/ubuntu $dist main\" >/etc/apt/sources.list.d/indexdata.list" >>Dockerfile
259         docker build -t indexdata-build-ubuntu-$dist .
260         echo -n "Ubuntu $dist "
261         docker run --rm  -v "$PWD:/build" -w /build/$PRODUCT-$VERSION indexdata-build-ubuntu-$dist ../in-docker.sh >log 2>&1
262         if test $? -eq 0; then
263                 echo Done
264         else
265                 echo "Fail. Inspect build/ubuntu/$dist/log"
266         fi
267         cd ../../..
268     done
269 fi
270
271 # Local Variables:
272 # mode:shell-script
273 # sh-indentation: 4
274 # sh-basic-offset: 4
275 # End:
276