Support CentOS 7 packages SA-745
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild.sh
1 #!/bin/sh
2 usage()
3 {
4     cat <<EOF
5 Usage: id-pbuild.sh [OPTIONS]
6 Options:
7         [--debian=distros]
8         [--ubuntu=distros]
9         [--centos=distros]
10         [--upload]
11 EOF
12     exit $1
13 }
14 do_help=false
15 upload=false
16 while test $# -gt 0; do
17     case "$1" in
18         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
19         *) optarg= ;;
20     esac
21     case $1 in
22         --debian=*)
23             DEBIAN_DIST_A=$optarg
24             ;;
25         --ubuntu=*)
26             UBUNTU_DIST_A=$optarg
27             ;;
28         --centos=*)
29             CENTOS_DIST_A=$optarg
30             ;;
31         --upload)
32             upload=true
33             ;;
34         -*)
35             do_help=yes
36             ;;
37     esac
38     shift
39 done
40 if test "$do_help" = "yes"; then
41     usage 1 1>&2
42 fi
43
44 if test -f IDMETA;  then
45     . ./IDMETA
46 else
47     echo "IDMETA missing"
48     exit 1
49 fi
50 UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk}
51 UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub}
52
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 ID_DEB_BUILD=~/proj/git-tools/id-deb-build
59 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
60     debian=true
61     DNAME=`awk '/Source:/ {print $2}' debian/control`
62     if test "$NAME" -a "$NAME" != "$DNAME"; then
63         echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
64         exit 1
65     fi
66     PRODUCT=$DNAME
67 else
68     debian=false
69 fi
70 if test "$CENTOS_DIST"; then
71     centos=true
72     RNAME=`awk '/Name:/ {print $2}' *.spec`
73     if test "$NAME" -a "$NAME" != "$RNAME"; then
74         echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
75         exit 1
76     fi
77     PRODUCT=$RNAME
78     if test ! -d ~/rpmbuild; then
79         mkdir -p ~/pmbuild/BUILD
80         mkdir -p ~/rpmbuild/RPMS/noarch
81         mkdir -p ~/rpmbuild/RPMS/x86_64
82         mkdir -p ~/rpmbuild/SOURCES
83         mkdir -p ~/rpmbuild/SPECS
84         mkdir -p ~/rpmbuild/SRPMS
85     fi
86 else
87     centos=false
88 fi
89 TAR=${PRODUCT}-${VERSION}.tar.gz
90
91 if $upload; then
92     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
93     echo "Uploading to ${UPLOAD_URI}"
94     if $centos; then
95         pkg_names=`rpm -q --specfile ${PRODUCT}.spec --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n"`
96         for dist in ${CENTOS_DIST}; do
97             case $dist in
98                 centos5)
99                     ftpdir=centos/5.5
100                     r=id-epel-5-x86_64 ;;
101                 centos6)
102                     ftpdir=centos/6
103                     r=id-epel-6-x86_64 ;;
104                 centos7)
105                     ftpdir=centos/7
106                     r=id-epel-7-x86_64 ;;
107                 *)
108                     ftpdir=centos/$dist
109                     r=$dist ;;
110             esac
111             echo "$r"
112             for pkg in ${pkg_names}; do
113                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/SRPMS"
114                 if test -f ~/rpmbuild/SRPMS/${pkg}.src.rpm; then
115                     scp ~/rpmbuild/SRPMS/${pkg}.src.rpm ${UPLOAD_URI}/redhat/${ftpdir}/SRPMS
116                 fi
117                 for arch in x86_64 noarch; do
118                     if test -f ~/rpmbuild/$r/${pkg}.${arch}.rpm; then
119                         ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/RPMS/${arch}"
120                         scp ~/rpmbuild/$r/${pkg}.${arch}.rpm ${UPLOAD_URI}/redhat/${ftpdir}/RPMS/${arch}
121                     fi
122                 done
123             done
124         done
125         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >~/rpmbuild/yum-update.log 2>&1; then
126             echo "update-yum-archive.sh failed. Inspect ~/rpmbuild/yum-update.log"
127             exit 1
128         fi
129     fi
130
131     if $debian; then
132         cd deb-src
133         if test -n "${UBUNTU_DIST}"; then
134             for dist in ${UBUNTU_DIST}; do
135                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}"
136                 if ! scp ${dist}-*/* ${UPLOAD_URI}/ubuntu/${dist}; then
137                     echo "Upload failed for $dist"
138                     exit 1
139                 fi
140             done
141         fi
142         if test -n "${DEBIAN_DIST}"; then
143             for dist in ${DEBIAN_DIST}; do
144                 ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}"
145                 if ! scp ${dist}-*/* ${UPLOAD_URI}/debian/${dist}; then
146                     echo "Upload failed for $dist"
147                     exit 1
148                 fi
149             done
150         fi
151         if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
152             echo "update-archive.sh failed"
153             exit 1
154         fi
155     fi
156     echo "Upload successful - we hope"
157     exit 0
158 fi
159
160 if $centos; then
161     SPEC=${PRODUCT}.spec
162     cp ${TAR} ~/rpmbuild/SOURCES
163     cat ${SPEC}|sed "s/%define idmetaversion.*/%define idmetaversion ${VERSION}/" >~/rpmbuild/SPECS/${SPEC}
164     sudo lxc-attach -n mockbuild -- rpmbuild -bs ~/rpmbuild/SPECS/${SPEC}
165     for dist in ${CENTOS_DIST}; do
166         case $dist in
167             centos5)
168                 r=id-epel-5-x86_64 ;;
169             centos6)
170                 r=id-epel-6-x86_64 ;;
171             centos7)
172                 r=id-epel-7-x86_64 ;;
173             *)
174                 r=$dist ;;
175         esac
176         echo -n "$r"
177         mkdir -p ~/rpmbuild/$r
178         if sudo lxc-attach -n mockbuild -- mock -q --resultdir=~/rpmbuild/$r -r $r ~/rpmbuild/SRPMS/${PRODUCT}-${VERSION}*src.rpm; then
179             echo " done"
180         else
181             echo " failed. Inspect ~/rpmbuild/$r/build.log"
182             exit 1
183         fi
184     done
185 fi
186 if $debian; then
187     sudo rm -fr deb-src
188     MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
189     if test ! -x $MKDEBSRC; then
190         echo "$MKDEBSRC not found"
191         exit 1
192     fi
193     if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then
194         echo "id-mk-deb-changelog.sh failed"
195     fi
196     if ! ${MKDEBSRC}; then
197         echo "id-mk-deb-src.sh failed"
198     fi
199     cd deb-src
200     for f in *.dsc; do
201         if test -f "$f"; then
202             DSC=$f
203         fi
204     done
205     if test -z "$DSC"; then
206         echo "${DSC}does not exist"
207         exit 1
208     fi
209     if grep "Architecture: all" $DSC >/dev/null; then
210         USE_ARCHS=i386
211     else
212         USE_ARCHS="i386 amd64"
213     fi
214     for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
215         for arch in ${USE_ARCHS}; do
216             echo -n "dist=$dist arch=$arch"
217             rm -f ~/.pbuilderrc
218             echo "DIST=$dist" > ~/.pbuilderrc
219             echo "ARCH=$arch" >> ~/.pbuilderrc
220             cat ${ID_DEB_BUILD}/pbuilderrc >> ~/.pbuilderrc
221             echo -n " update"
222             if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then
223                 echo -n " create"
224                 if ! sudo lxc-attach -n pbuilder -- pbuilder --create >create-${dist}-${arch}.log 2>&1; then
225                     echo " failed. Inspect deb-src/create-${dist}-${arch}.log"
226                     exit 1
227                 fi
228                 echo -n " update"
229                 if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then
230                     echo " failed. Inspect deb-src/update-${dist}-${arch}.log"
231                     exit 1
232                 fi
233             fi
234             echo -n " build"
235             if sudo lxc-attach -n pbuilder -- pbuilder --build $DSC >build-${dist}-${arch}.log 2>&1; then
236                 echo " done"
237             else
238                 echo " failed. Inspect deb-src/build-${dist}-${arch}.log"
239                 exit 1
240             fi
241         done
242     done
243 fi
244
245 # Local Variables:
246 # mode:shell-script
247 # sh-indentation: 4
248 # sh-basic-offset: 4
249 # End:
250