usage()
{
cat <<EOF
-Usage: id-pbuild-all.sh [OPTIONS]
+Usage: id-pbuild.sh [OPTIONS]
Options:
[--debian=distros]
[--ubuntu=distros]
+ [--centos=distros]
[--upload]
[--concurrency=N]
EOF
upload=false
do_help=false
concurrency=4
+ARCHS="i386 amd64"
if test -f IDMETA; then
. ./IDMETA
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
-
case $1 in
- --ubuntu=*)
- UBUNTU_DIST=$optarg
- ;;
--debian=*)
- DEBIAN_DIST=$optarg
+ DEBIAN_DIST_A=$optarg
;;
- --concurrency=*)
- concurrency=$optarg
+ --ubuntu=*)
+ UBUNTU_DIST_A=$optarg
+ ;;
+ --centos=*)
+ CENTOS_DIST_A=$optarg
;;
--upload)
upload=true
;;
+ --concurrency=*)
+ concurrency=$optarg
+ ;;
-*)
do_help=yes
;;
shift
done
+if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
+ DEBIAN_DIST=$DEBIAN_DIST_A
+ UBUNTU_DIST=$UBUNTU_DIST_A
+ CENTOS_DIST=$CENTOS_DIST_A
+fi
+
if test "$do_help" = "yes"; then
usage 1 1>&2
fi
-if test -d deb-src; then
- cd deb-src
+if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
+ debian=true
+else
+ debian=false
fi
-for f in *.dsc; do
- if test -f "$f"; then
- PKG=$f
- fi
-done
-if test -z "$PKG"; then
- echo "Specify .dsc file"
+
+D0=`dirname $0`
+ID_DEB_BUILD=`cd $D0; pwd`
+PBUILDROOT=${ID_DEB_BUILD}/id-pbuild-root.sh
+if test ! -x $PBUILDROOT; then
+ echo "$PBUILDROOT not found"
exit 1
fi
-if test ! -e "$PKG"; then
- echo "${PKG} does not exist"
- exit 1
+
+if test "$CENTOS_DIST"; then
+ RNAME=`awk '/Name:/ {print $2}' *.spec`
+ echo "RNAME=$RNAME"
+ if test "$NAME" -a "$NAME" != "$RNAME"; then
+ echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
+ exit 1
+ fi
+ PRODUCT=$RNAME
fi
-PBUILDER=/usr/sbin/pbuilder
-PRODUCT=`echo *.dsc|sed 's/_.*//g'`
-ARCHS="i386 amd64"
-echo "Dsc $PKG . Product $PRODUCT"
+if $debian; then
+ DNAME=`awk '/Source:/ {print $2}' debian/control`
+ if test "$NAME" -a "$NAME" != "$DNAME"; then
+ echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
+ exit 1
+ fi
+ PRODUCT=$DNAME
+ if ! $upload; then
+ MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
+ if test ! -x $MKDEBSRC; then
+ echo "$MKDEBSRC not found"
+ exit 1
+ fi
+ DCH=debian/changelog
+ if ! git ls-files $DCH --error-unmatch >/dev/null 2>&1; then
+ rm -f $DCH
+ echo "${DNAME} (${VERSION}-1.indexdata) unstable; urgency=medium" >$DCH
+ echo '' >>$DCH
+ echo ' * Upstream.' >>$DCH
+ echo '' >>$DCH
+ echo " -- `git config --get user.name` <`git config --get user.email`> `date -R`" >>$DCH
+ echo '' >>$DCH
+ fi
+ if test "${SUDO_USER}"; then
+ if test ! -d deb-src; then
+ $MKDEBSRC
+ fi
+ else
+ if test -d deb-src; then
+ rm -f deb-src/*.gz
+ if test $? -ne 0; then
+ echo "deb-src could not be removed. Remove deb-src manually"
+ exit 1
+ fi
+ fi
+ $MKDEBSRC
+ fi
+ fi
+else
+ mkdir -p deb-src
+fi
+
+cd deb-src
+
+if $debian; then
+ for f in *.dsc; do
+ if test -f "$f"; then
+ PKG=$f
+ fi
+ done
+ if test -z "$PKG"; then
+ echo "Specify .dsc file"
+ exit 1
+ fi
+ if test ! -e "$PKG"; then
+ echo "${PKG} does not exist"
+ exit 1
+ fi
+ if grep "Architecture: all" $PKG >/dev/null; then
+ USE_ARCHS=i386
+ else
+ USE_ARCHS=$ARCHS
+ fi
+fi
+
+echo "Product: $PRODUCT"
echo "Ubuntu distros: $UBUNTU_DIST"
echo "Debian distros: $DEBIAN_DIST"
+echo "Centos distros: $CENTOS_DIST"
+
+if $debian; then
+ if test "${SUDO_USER}"; then
+ echo "Running as sudo."
+ echo "Tip: You can avoid it by adding the following in /etc/sudoers"
+ echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
+ HOME_EXPORT=/home/${SUDO_USER}
+ else
+ sudo -k
+ HOME_EXPORT=$HOME
+ fi
+ if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
+ echo "${HOME_EXPORT}/.pbuilderrc missing"
+ echo "You may need to run: ln -s ~/proj/git-tools/id-deb-build/pbuilderrc ~/.pbuilderrc"
+ exit 1
+ fi
+fi
+
if $upload; then
+ for dist in ${CENTOS_DIST}; do
+ arch=amd64
+ prodver=${PRODUCT}-${VERSION}
+ if ! scp ${ID_DEB_BUILD}/../id-rpm-build/upload-rpms.sh ${dist}:rpmbuild/SOURCES/${prodver}/; then
+ echo "Copy of upload-rpms.sh to $dist failed"
+ exit 1
+ fi
+ if ssh $dist "cd rpmbuild/SOURCES/${prodver} && chmod +x upload-rpms.sh && ./upload-rpms.sh ${PRODUCT}.spec"; then
+ :
+ else
+ echo "Upload failed for $dist"
+ exit 1
+ fi
+ done
for dist in ${UBUNTU_DIST}; do
- scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
+ ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/ubuntu/${dist}"
+ if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}; then
+ echo "Upload failed for $dist"
+ exit 1
+ fi
done
for dist in ${DEBIAN_DIST}; do
- scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
+ ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/debian/${dist}"
+ if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}; then
+ echo "Upload failed for $dist"
+ exit 1
+ fi
done
- echo "Remember to update APT on ftp.indexdata.dk"
- echo "cd git-tools/update-archive"
- echo "sudo su"
- echo "./update-archive.sh"
+ if test "${CENTOS_DIST}"; then
+ if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh"; then
+ echo "update-yum-archive.sh failed"
+ exit 1
+ fi
+ fi
+ if test "${UBUNTU_DIST}" -o "${DEBIAN_DIST}"; then
+ if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
+ echo "update-archive.sh failed"
+ exit 1
+ fi
+ fi
+ echo "Upload successful - we hope"
exit 0
fi
+
+rm -f *.log
+
+# copy tars to centos build hosts
+for dist in ${CENTOS_DIST}; do
+ arch=amd64
+ prodver=${PRODUCT}-${VERSION}
+ tarname=${prodver}.tar.gz
+ if test ! -f ../${tarname}; then
+ echo "$tarname: missing"
+ exit 1
+ fi
+
+ if ssh $dist "test -f .rpmmacros && test -d rpmbuild/SOURCES && test -d rpmbuild/RPMS && test -d rpmbuild/SRPMS"; then
+ :
+ else
+ echo "Host $dist does not seem to be prepared with rpmbuild directories"
+ exit 1
+ fi
+
+ if scp ../${tarname} $dist:rpmbuild/SOURCES/ ; then
+ :
+ else
+ echo "Could not copy $tarname to $dist"
+ exit 1
+ fi
+ if ssh $dist "cd rpmbuild/SOURCES && rm -fr $prodver && tar zxf $tarname && cd ${prodver} && rpmbuild -ba ${PRODUCT}.spec" >${dist}-${arch}.log 2>&1; then
+ :
+ else
+ echo "FAILED: See ${dist}-${arch}.log"
+ exit 1
+ fi
+done
+
+# call our privileged wrapper to clean the directories, no --dsc option
+for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
+ for arch in ${USE_ARCHS}; do
+ sudo -n $PBUILDROOT --home=${HOME_EXPORT} --dist=$dist --arch=$arch
+ if test $? -ne 0; then
+ echo "FAILED"
+ echo "Run id-pbuild.sh using sudo or add yourself to /etc/sudoers:"
+ echo "${USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
+ exit 1
+ fi
+ done
+done
+
+# call our privileged wrapper to do the real work, with --dsc option
i=0
date
for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
- for arch in ${ARCHS}; do
- rm -fr ${dist}-${arch}
- (
- if test ! -f /var/cache/pbuilder/${dist}-${arch}-base.tgz; then
- DIST=$dist ARCH=$arch $PBUILDER create
- fi
- for f in `find /var/cache/pbuilder/${dist}-${arch}-base.tgz -ctime +7`; do
- DIST=$dist ARCH=$arch $PBUILDER update --override-config
- done
- DIST=$dist ARCH=$arch $PBUILDER --build $PKG
- ) >${dist}-${arch}.log 2>&1 &
+ for arch in ${USE_ARCHS}; do
+ sudo -n $PBUILDROOT --home=${HOME_EXPORT} \
+ --dist=$dist --arch=$arch --dsc=$PKG >${dist}-${arch}.log 2>&1 &
i=`expr $i + 1`
if test $i -eq $concurrency; then
i=0
wait
+ if test -f ${dist}-${arch}/*.dsc; then
+ :
+ else
+ echo "FAILED: No .dsc file for ${dist}-${arch}"
+ exit 1
+ fi
fi
done
done
wait
for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
- for arch in ${ARCHS}; do
+ for arch in ${USE_ARCHS}; do
if test -f ${dist}-${arch}/*.dsc; then
:
else
- echo "No .dsc file for ${dist}-${arch}"
+ echo "FAILED: No .dsc file for ${dist}-${arch}"
exit 1
fi
done
done
+
date
echo "Done"
# Local Variables: