2 # This script builds Debian packages for one or more distributions
3 # in i386/amd64 architectures. It uses pbuilder. pbuilder requires root
4 # privilege and so this script should be invoked with sudo.
9 Usage: id-pbuild.sh [OPTIONS]
20 # things that might be set by options
26 if test -f IDMETA; then
29 while test $# -gt 0; do
31 -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
57 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
58 DEBIAN_DIST=$DEBIAN_DIST_A
59 UBUNTU_DIST=$UBUNTU_DIST_A
60 CENTOS_DIST=$CENTOS_DIST_A
63 if test "$do_help" = "yes"; then
67 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
74 ID_DEB_BUILD=`cd $D0; pwd`
75 PBUILDROOT=${ID_DEB_BUILD}/id-pbuild-root.sh
76 if test ! -x $PBUILDROOT; then
77 echo "$PBUILDROOT not found"
81 if test "$CENTOS_DIST"; then
82 RNAME=`awk '/Name:/ {print $2}' *.spec`
84 if test "$NAME" -a "$NAME" != "$RNAME"; then
85 echo "NAME in IDMETA ($NAME) does not match RPM spec NAME ($RNAME)"
91 DNAME=`awk '/Source:/ {print $2}' debian/control`
92 if test "$NAME" -a "$NAME" != "$DNAME"; then
93 echo "NAME in IDMETA ($NAME) does not match debian/control ($DNAME)"
98 MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
99 if test ! -x $MKDEBSRC; then
100 echo "$MKDEBSRC not found"
104 if ! git ls-files $DCH --error-unmatch >/dev/null 2>&1; then
106 echo "${DNAME} (${VERSION}-1.indexdata) unstable; urgency=medium" >$DCH
108 echo ' * Upstream.' >>$DCH
110 echo " -- `git config --get user.name` <`git config --get user.email`> `date -R`" >>$DCH
113 if test "${SUDO_USER}"; then
114 if test ! -d deb-src; then
118 if test -d deb-src; then
120 if test $? -ne 0; then
121 echo "deb-src could not be removed. Remove deb-src manually"
136 if test -f "$f"; then
140 if test -z "$PKG"; then
141 echo "Specify .dsc file"
144 if test ! -e "$PKG"; then
145 echo "${PKG} does not exist"
148 if grep "Architecture: all" $PKG >/dev/null; then
155 echo "Product: $PRODUCT"
156 echo "Ubuntu distros: $UBUNTU_DIST"
157 echo "Debian distros: $DEBIAN_DIST"
158 echo "Centos distros: $CENTOS_DIST"
161 if test "${SUDO_USER}"; then
162 echo "Running as sudo."
163 echo "Tip: You can avoid it by adding the following in /etc/sudoers"
164 echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
165 HOME_EXPORT=/home/${SUDO_USER}
170 if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
171 echo "${HOME_EXPORT}/.pbuilderrc missing"
177 for dist in ${CENTOS_DIST}; do
179 prodver=${PRODUCT}-${VERSION}
180 if ! scp ${ID_DEB_BUILD}/../id-rpm-build/upload-rpms.sh ${dist}:rpmbuild/SOURCES/${prodver}/; then
181 echo "Copy of upload-rpms.sh to $dist failed"
184 if ssh $dist "cd rpmbuild/SOURCES/${prodver} && chmod +x upload-rpms.sh && ./upload-rpms.sh ${PRODUCT}.spec"; then
187 echo "Upload failed for $dist"
191 for dist in ${UBUNTU_DIST}; do
192 ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/ubuntu/${dist}"
193 if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}; then
194 echo "Upload failed for $dist"
198 for dist in ${DEBIAN_DIST}; do
199 ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/debian/${dist}"
200 if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}; then
201 echo "Upload failed for $dist"
205 if test "${CENTOS_DIST}"; then
206 if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh"; then
207 echo "update-yum-archive.sh failed"
211 if test "${UBUNTU_DIST}" -o "${DEBIAN_DIST}"; then
212 if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
213 echo "update-archive.sh failed"
217 echo "Upload successful - we hope"
223 # copy tars to centos build hosts
224 for dist in ${CENTOS_DIST}; do
226 prodver=${PRODUCT}-${VERSION}
227 tarname=${prodver}.tar.gz
228 if test ! -f ../${tarname}; then
229 echo "$tarname: missing"
233 if ssh $dist "test -f .rpmmacros && test -d rpmbuild/SOURCES && test -d rpmbuild/RPMS && test -d rpmbuild/SRPMS"; then
236 echo "Host $dist does not seem to be prepared with rpmbuild directories"
240 if scp ../${tarname} $dist:rpmbuild/SOURCES/ ; then
243 echo "Could not copy $tarname to $dist"
246 if ssh $dist "cd rpmbuild/SOURCES && rm -fr $prodver && tar zxf $tarname && cd ${prodver} && rpmbuild -ba ${PRODUCT}.spec" >${dist}-${arch}.log 2>&1; then
249 echo "FAILED: See ${dist}-${arch}.log"
254 # call our privileged wrapper to clean the directories, no --dsc option
255 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
256 for arch in ${USE_ARCHS}; do
257 sudo -n $PBUILDROOT --home=${HOME_EXPORT} --dist=$dist --arch=$arch
258 if test $? -ne 0; then
260 echo "Run id-pbuild.sh using sudo or add yourself to /etc/sudoers:"
261 echo "${USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
267 # call our privileged wrapper to do the real work, with --dsc option
270 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
271 for arch in ${USE_ARCHS}; do
272 sudo -n $PBUILDROOT --home=${HOME_EXPORT} \
273 --dist=$dist --arch=$arch --dsc=$PKG >${dist}-${arch}.log 2>&1 &
275 if test $i -eq $concurrency; then
278 if test -f ${dist}-${arch}/*.dsc; then
281 echo "FAILED: No .dsc file for ${dist}-${arch}"
288 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
289 for arch in ${USE_ARCHS}; do
290 if test -f ${dist}-${arch}/*.dsc; then
293 echo "FAILED: No .dsc file for ${dist}-${arch}"