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