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]
21 # things that might be set by options
27 if test -f IDMETA; then
30 while test $# -gt 0; do
32 -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
61 if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
62 DEBIAN_DIST=$DEBIAN_DIST_A
63 UBUNTU_DIST=$UBUNTU_DIST_A
64 CENTOS_DIST=$CENTOS_DIST_A
67 if test "$do_help" = "yes"; then
71 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
78 ID_DEB_BUILD=`cd $D0; pwd`
79 PBUILDROOT=${ID_DEB_BUILD}/id-pbuild-root.sh
80 if test ! -x $PBUILDROOT; then
81 echo "$PBUILDROOT not found"
85 MKDEBSRC=${ID_DEB_BUILD}/id-mk-deb-src.sh
86 if test ! -x $MKDEBSRC; then
87 echo "$MKDEBSRC not found"
93 if test "${SUDO_USER}"; then
94 if test ! -d deb-src; then
98 if test -d deb-src; then
100 if test $? -ne 0; then
101 echo "deb-src could not be removed. Remove deb-src manually"
116 if test -f "$f"; then
120 if test -z "$PKG"; then
121 echo "Specify .dsc file"
124 if test ! -e "$PKG"; then
125 echo "${PKG} does not exist"
128 if grep "Architecture: all" $PKG >/dev/null; then
135 if test -z "$PRODUCT"; then
138 if test -z "$PRODUCT"; then
140 PRODUCT=`echo *.dsc|sed 's/_.*//g'`
142 PRODUCT=`cd ..;rpm -q --specfile *.spec --queryformat "%{NAME};" | cut -d ";" -f1`
145 echo "Dsc $PKG . Product $PRODUCT"
146 echo "Ubuntu distros: $UBUNTU_DIST"
147 echo "Debian distros: $DEBIAN_DIST"
148 echo "Centos distros: $CENTOS_DIST"
151 if test "${SUDO_USER}"; then
152 echo "Running as sudo."
153 echo "Tip: You can avoid it by adding the following in /etc/sudoers"
154 echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
155 HOME_EXPORT=/home/${SUDO_USER}
160 if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
161 echo "${HOME_EXPORT}/.pbuilderrc missing"
167 for dist in ${CENTOS_DIST}; do
169 prodver=${PRODUCT}-${VERSION}
170 if ! scp ${ID_DEB_BUILD}/../id-rpm-build/upload-rpms.sh ${dist}:rpmbuild/SOURCES/${prodver}/; then
171 echo "Copy of upload-rpms.sh to $dist failed"
174 if ssh $dist "cd rpmbuild/SOURCES/${prodver} && chmod +x upload-rpms.sh && ./upload-rpms.sh ${PRODUCT}.spec"; then
177 echo "Upload failed for $dist"
181 for dist in ${UBUNTU_DIST}; do
182 ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/ubuntu/${dist}"
183 if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}; then
184 echo "Upload failed for $dist"
188 for dist in ${DEBIAN_DIST}; do
189 ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/debian/${dist}"
190 if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}; then
191 echo "Upload failed for $dist"
195 if test "${CENTOS_DIST}"; then
196 if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh"; then
197 echo "update-yum-archive.sh failed"
201 if test "${UBUNTU_DIST}" -o "${DEBIAN_DIST}"; then
202 if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
203 echo "update-archive.sh failed"
207 echo "Upload successful - we hope"
213 # copy tars to centos build hosts
214 for dist in ${CENTOS_DIST}; do
216 prodver=${PRODUCT}-${VERSION}
217 tarname=${prodver}.tar.gz
218 if test ! -f ../${tarname}; then
219 echo "$tarname: missing"
223 if ssh $dist "test -f .rpmmacros && test -d rpmbuild/SOURCES && test -d rpmbuild/RPMS && test -d rpmbuild/SRPMS"; then
226 echo "Host $dist does not seem to be prepared with rpmbuild directories"
230 if scp ../${tarname} $dist:rpmbuild/SOURCES/ ; then
233 echo "Could not copy $tarname to $dist"
236 if ssh $dist "cd rpmbuild/SOURCES && rm -fr $prodver && tar zxf $tarname && cd ${prodver} && rpmbuild -ba ${PRODUCT}.spec" >${dist}-${arch}.log 2>&1; then
239 echo "FAILED: See ${dist}-${arch}.log"
244 # call our privileged wrapper to clean the directories, no --dsc option
245 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
246 for arch in ${USE_ARCHS}; do
247 sudo -n $PBUILDROOT --home=${HOME_EXPORT} --dist=$dist --arch=$arch
248 if test $? -ne 0; then
250 echo "Run id-pbuild.sh using sudo or add yourself to /etc/sudoers:"
251 echo "${USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
257 # call our privileged wrapper to do the real work, with --dsc option
260 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
261 for arch in ${USE_ARCHS}; do
262 sudo -n $PBUILDROOT --home=${HOME_EXPORT} \
263 --dist=$dist --arch=$arch --dsc=$PKG >${dist}-${arch}.log 2>&1 &
265 if test $i -eq $concurrency; then
268 if test -f ${dist}-${arch}/*.dsc; then
271 echo "FAILED: No .dsc file for ${dist}-${arch}"
278 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
279 for arch in ${USE_ARCHS}; do
280 if test -f ${dist}-${arch}/*.dsc; then
283 echo "FAILED: No .dsc file for ${dist}-${arch}"