X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=id-deb-build%2Fid-pbuild.sh;h=9a8f2027c1ece45e94fb08781077284470f01397;hb=03096f528e96eddeb87bba805e35572476809bb7;hp=cde1dc5720384ecea5c09365ec36cc51c5cd460a;hpb=3695c369af793871ee5e0c8e4fc56df3fd32c8d5;p=git-tools-moved-to-github.git diff --git a/id-deb-build/id-pbuild.sh b/id-deb-build/id-pbuild.sh index cde1dc5..9a8f202 100755 --- a/id-deb-build/id-pbuild.sh +++ b/id-deb-build/id-pbuild.sh @@ -1,135 +1,255 @@ #!/bin/sh -# This script builds Debian packages for one or more distributions -# in i386/amd64 architectures. It uses pbuilder. pbuilder requires root -# privilege and is invoked with sudo. -# -# In order to avoid having to type-in the password for it, you might -# use something like this in sudoers -# user ALL=NOPASSWD,SETENV: /usr/sbin/pbuilder -# where user is your username. - usage() { cat <&2 fi +if test ! -x /usr/bin/lxc-attach; then + echo "No lxc-attach. Probably not running on mochi!!" + exit 1 +fi +if test -f IDMETA; then + . ./IDMETA +else + echo "IDMETA missing" + exit 1 +fi +UPLOAD_HOST=${UPLOAD_HOST:=ftp.indexdata.dk} +UPLOAD_PATH=${UPLOAD_PATH:=/home/ftp/pub} -if test -d deb-src; then - cd deb-src +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 -for f in *.dsc; do - if test -f "$f"; then - PKG=$f +if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then + debian=true + 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 -done -if test -z "$PKG"; then - echo "Specify .dsc file" - exit 1 + PRODUCT=$DNAME +else + debian=false fi -if test ! -e "$PKG"; then - echo "${PKG} does not exist" - exit 1 +if test "$CENTOS_DIST"; then + centos=true + RNAME=`awk '/Name:/ {print $2}' *.spec` + if test "$NAME" -a "$NAME" != "$RNAME"; then + echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)" + exit 1 + fi + PRODUCT=$RNAME + if test ! -d ~/rpmbuild; then + mkdir -p ~/pmbuild/BUILD + mkdir -p ~/rpmbuild/RPMS/noarch + mkdir -p ~/rpmbuild/RPMS/x86_64 + mkdir -p ~/rpmbuild/SOURCES + mkdir -p ~/rpmbuild/SPECS + mkdir -p ~/rpmbuild/SRPMS + fi +else + centos=false fi -PBUILDER=/usr/sbin/pbuilder -PRODUCT=`echo *.dsc|sed 's/_.*//g'` -ARCHS="i386 amd64" -echo "Dsc $PKG . Product $PRODUCT" -echo "Ubuntu distros: $UBUNTU_DIST" -echo "Debian distros: $DEBIAN_DIST" +TAR=${PRODUCT}-${VERSION}.tar.gz + if $upload; then - for dist in ${UBUNTU_DIST}; do - scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist} - done - for dist in ${DEBIAN_DIST}; do - scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist} - done - echo "Remember to update APT on ftp.indexdata.dk" - echo "cd git-tools/update-archive" - echo "sudo su" - echo "./update-archive.sh" - exit 0 -fi -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 - sudo DIST=$dist ARCH=$arch $PBUILDER create - fi - for f in `find /var/cache/pbuilder/${dist}-${arch}-base.tgz -ctime +7`; do - sudo DIST=$dist ARCH=$arch $PBUILDER update --override-config + UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT} + echo "Uploading to ${UPLOAD_URI}" + if $centos; then + pkg_names=`rpm -q --specfile ${PRODUCT}.spec --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n"` + for dist in ${CENTOS_DIST}; do + case $dist in + centos5) + ftpdir=centos/5.5 + r=id-epel-5-x86_64 ;; + centos6) + ftpdir=centos/6 + r=id-epel-6-x86_64 ;; + centos7) + ftpdir=centos/7 + r=id-epel-7-x86_64 ;; + *) + ftpdir=centos/$dist + r=$dist ;; + esac + echo "$r" + for pkg in ${pkg_names}; do + ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/SRPMS" + if test -f ~/rpmbuild/SRPMS/${pkg}.src.rpm; then + scp ~/rpmbuild/SRPMS/${pkg}.src.rpm ${UPLOAD_URI}/redhat/${ftpdir}/SRPMS + fi + for arch in x86_64 noarch; do + if test -f ~/rpmbuild/$r/${pkg}.${arch}.rpm; then + ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/redhat/${ftpdir}/RPMS/${arch}" + scp ~/rpmbuild/$r/${pkg}.${arch}.rpm ${UPLOAD_URI}/redhat/${ftpdir}/RPMS/${arch} + fi + done done - sudo DIST=$dist ARCH=$arch $PBUILDER --build $PKG - ) >${dist}-${arch}.log 2>&1 & - i=`expr $i + 1` - if test $i -eq $concurrency; then - i=0 - wait + done + if ! ssh ${UPLOAD_HOST} "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh" >~/rpmbuild/yum-update.log 2>&1; then + echo "update-yum-archive.sh failed. Inspect ~/rpmbuild/yum-update.log" + exit 1 fi - done -done -wait -for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do - for arch in ${ARCHS}; do - if test -f ${dist}-${arch}/*.dsc; then - : + fi + + if $debian; then + cd deb-src + if test -n "${UBUNTU_DIST}"; then + for dist in ${UBUNTU_DIST}; do + ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/ubuntu/${dist}" + if ! scp ${dist}-*/* ${UPLOAD_URI}/ubuntu/${dist}; then + echo "Upload failed for $dist" + exit 1 + fi + done + fi + if test -n "${DEBIAN_DIST}"; then + for dist in ${DEBIAN_DIST}; do + ssh ${UPLOAD_HOST} "mkdir -p ${UPLOAD_PATH}/${PRODUCT}/debian/${dist}" + if ! scp ${dist}-*/* ${UPLOAD_URI}/debian/${dist}; then + echo "Upload failed for $dist" + exit 1 + fi + done + fi + if ! ssh ${UPLOAD_HOST} "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 + +if $centos; then + SPEC=${PRODUCT}.spec + cp ${TAR} ~/rpmbuild/SOURCES + cat ${SPEC}|sed "s/%define idmetaversion.*/%define idmetaversion ${VERSION}/" >~/rpmbuild/SPECS/${SPEC} + sudo lxc-attach -n mockbuild -- rpmbuild -bs ~/rpmbuild/SPECS/${SPEC} + for dist in ${CENTOS_DIST}; do + case $dist in + centos5) + r=id-epel-5-x86_64 ;; + centos6) + r=id-epel-6-x86_64 ;; + centos7) + r=id-epel-7-x86_64 ;; + *) + r=$dist ;; + esac + echo -n "$r" + mkdir -p ~/rpmbuild/$r + if sudo lxc-attach -n mockbuild -- mock -q --resultdir=~/rpmbuild/$r -r $r ~/rpmbuild/SRPMS/${PRODUCT}-${VERSION}*src.rpm; then + echo " done" else - echo "No .dsc file for ${dist}-${arch}" + echo " failed. Inspect ~/rpmbuild/$r/build.log" exit 1 fi done -done -date -echo "Done" +fi +if $debian; then + sudo rm -fr deb-src + MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh + if test ! -x $MKDEBSRC; then + echo "$MKDEBSRC not found" + exit 1 + fi + if ! ${ID_DEB_BUILD}/id-mk-deb-changelog.sh; then + echo "id-mk-deb-changelog.sh failed" + fi + if ! ${MKDEBSRC}; then + echo "id-mk-deb-src.sh failed" + fi + cd deb-src + for f in *.dsc; do + if test -f "$f"; then + DSC=$f + fi + done + if test -z "$DSC"; then + echo "${DSC}does not exist" + exit 1 + fi + if grep "Architecture: all" $DSC >/dev/null; then + USE_ARCHS=i386 + else + USE_ARCHS="i386 amd64" + fi + for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do + for arch in ${USE_ARCHS}; do + echo -n "dist=$dist arch=$arch" + rm -f ~/.pbuilderrc + echo "DIST=$dist" > ~/.pbuilderrc + echo "ARCH=$arch" >> ~/.pbuilderrc + cat ${ID_DEB_BUILD}/pbuilderrc >> ~/.pbuilderrc + echo -n " update" + if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then + echo -n " create" + if ! sudo lxc-attach -n pbuilder -- pbuilder --create >create-${dist}-${arch}.log 2>&1; then + echo " failed. Inspect deb-src/create-${dist}-${arch}.log" + exit 1 + fi + echo -n " update" + if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then + echo " failed. Inspect deb-src/update-${dist}-${arch}.log" + exit 1 + fi + fi + echo -n " build" + if sudo lxc-attach -n pbuilder -- pbuilder --build $DSC >build-${dist}-${arch}.log 2>&1; then + echo " done" + else + echo " failed. Inspect deb-src/build-${dist}-${arch}.log" + exit 1 + fi + done + done +fi + # Local Variables: # mode:shell-script -# sh-indentation: 2 +# sh-indentation: 4 # sh-basic-offset: 4 # End: +