X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=id-deb-build%2Fid-pbuild.sh;h=75916cd4b74aa9c915a256f16ba22f35c9b2d849;hb=ea81219434763b72d3f80541ea081c47de6ff429;hp=b9cd94da2854467ff9b5fc7b3c3ecc0db346422a;hpb=5800761f8be3c0ec6fddf74327d75b5505e14a89;p=git-tools-moved-to-github.git diff --git a/id-deb-build/id-pbuild.sh b/id-deb-build/id-pbuild.sh index b9cd94d..75916cd 100755 --- a/id-deb-build/id-pbuild.sh +++ b/id-deb-build/id-pbuild.sh @@ -10,9 +10,9 @@ Usage: id-pbuild.sh [OPTIONS] Options: [--debian=distros] [--ubuntu=distros] + [--centos=distros] [--upload] [--concurrency=N] - [--product=X] EOF exit $1 } @@ -21,6 +21,7 @@ EOF upload=false do_help=false concurrency=4 +ARCHS="i386 amd64" if test -f IDMETA; then . ./IDMETA @@ -30,13 +31,15 @@ while test $# -gt 0; do -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac - case $1 in --debian=*) - DEBIAN_DIST=$optarg + DEBIAN_DIST_A=$optarg ;; --ubuntu=*) - UBUNTU_DIST=$optarg + UBUNTU_DIST_A=$optarg + ;; + --centos=*) + CENTOS_DIST_A=$optarg ;; --upload) upload=true @@ -44,9 +47,6 @@ while test $# -gt 0; do --concurrency=*) concurrency=$optarg ;; - --product=*) - PRODUCT=$optarg - ;; -*) do_help=yes ;; @@ -54,71 +54,224 @@ while test $# -gt 0; do 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 -PBUILDROOT=`dirname $0`/id-pbuild-root.sh +if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then + debian=true +else + debian=false +fi + +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 -d deb-src; then - cd deb-src -fi - -for f in *.dsc; do - if test -f "$f"; then - PKG=$f +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 -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 test -z "$PRODUCT"; then - PRODUCT=`echo *.dsc|sed 's/_.*//g'` + PRODUCT=$RNAME fi -ARCHS="i386 amd64" -if grep "Architecture: all" $PKG >/dev/null; then - USE_ARCHS=i386 +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 + rm -f deb-src/*.dsc + fi + $MKDEBSRC + fi + fi else - USE_ARCHS=$ARCHS + mkdir -p deb-src fi -echo "Dsc $PKG . Product $PRODUCT" + +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 "" - echo "====================================================" - echo "Remember to update APT on ftp.indexdata.dk !!!" - echo "" - echo "ssh ftp.indexdata.dk" - echo "cd ~/proj/git-tools/update-archive" - echo "sudo su" - echo "./update-archive.sh" - echo "====================================================" + 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 ${USE_ARCHS}; do - sudo -n $PBUILDROOT \ + 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 @@ -127,7 +280,7 @@ for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; 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 fi @@ -139,11 +292,12 @@ for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; 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: