#! /bin/bash # pbuilder -- personal Debian package builder # Copyright (C) 2001,2002 Junichi Uekawa # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA export LANG=C export LC_ALL=C set -e function copydsc () { local DSCFILE="$1" local TARGET="$2" for FILE in \ "$DSCFILE" \ $(cat "$DSCFILE" | \ awk 'BEGIN{p=0} /^$/ {p=0} /^.*:/ {p=0} {if (p){print "'$(dirname "$DSCFILE")'/" $3}} /^Files:/{p=1}' ) ; do echo " -> copying [$FILE]" cp "$FILE" "$TARGET" ; done } function checkbuilddep () { if ! /usr/lib/pbuilder/pbuilder-satisfydepends --control "$BUILDPLACE/"tmp/buildd/*/debian/control --chroot "$BUILDPLACE" --binary-all ; then echo "E: pbuilder-satisfydepends failed." >&2 saveaptcache_umountproc_cleanbuildplace exit 1 fi # install extra packages to the chroot if [ -n "$EXTRAPACKAGES" ]; then $CHROOTEXEC usr/bin/apt-get -y install ${EXTRAPACKAGES} fi } function echobacktime () { echo "Current time: $(date)" echo "pbuilder-time-stamp: $(date +%s)" } function showbuildbanner () { # show some banners for building echo "pbuilder-buildpackage/"$(dpkg --print-architecture) '$Id$' echo } function saveaptcache_umountproc_cleanbuildplace () { # save the apt cache, and call umountproc_cleanbuildplace save_aptcache umountproc_cleanbuildplace } function createbuilduser () { # create the build user if [ -n "$SUTOUSER" ]; then echo "$BUILDUSERNAME:x:$BUILDUSERID:$BUILDUSERID:,,,:/tmp/buildd:/bin/sh" >> $BUILDPLACE/etc/passwd echo "$BUILDUSERNAME:*:$BUILDUSERID:" >> $BUILDPLACE/etc/group fi } . /usr/lib/pbuilder/pbuilder-checkparams . /usr/lib/pbuilder/pbuilder-runhooks PACKAGENAME="$1" CHROOTEXEC="chroot $BUILDPLACE " if [ ! -f "$PACKAGENAME" ]; then echo "Command line parameter [$PACKAGENAME] is not a valid .dsc file name" >&2 exit 1; fi; if [ -n "$BUILDUSERNAME" -a -n "$BUILDUSERID" ]; then SUTOUSER="HOME=/tmp/buildd su $BUILDUSERNAME -- " DEBBUILDOPTS="$DEBBUILDOPTS -rfakeroot" EXTRAPACKAGES="${EXTRAPACKAGES} fakeroot" echo "I: using fakeroot in build." else # run the build in root SUTOUSER="" BUILDUSERID=0 BUILDUSERNAME=root fi showbuildbanner echobacktime extractbuildplace loadhooks createbuilduser echo Copying source file copydsc "$PACKAGENAME" "$BUILDPLACE/tmp/buildd" executehooks "D" echo Extracting source if ! $CHROOTEXEC /bin/bash -c "( cd tmp/buildd; chown $BUILDUSERNAME:$BUILDUSERNAME ../buildd *; $SUTOUSER /usr/bin/dpkg-source -x $(basename $PACKAGENAME) )"; then echo "pbuilder: Failed extracting the source" >&2 umountproc_cleanbuildplace exit 1; fi recover_aptcache echo "Installing the build-deps" checkbuilddep save_aptcache echo " -> Building the package" export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" executehooks "A" if [ -z "$DEBEMAIL" ]; then if ! $CHROOTEXEC /bin/bash -c "cd tmp/buildd/*/; $SUTOUSER dpkg-buildpackage -us -uc $DEBBUILDOPTS"; then echo "pbuilder: Failed autobuilding of package" >&2 umountproc_cleanbuildplace exit 1; fi else if ! $CHROOTEXEC /bin/bash -c "cd tmp/buildd/*/; $SUTOUSER dpkg-buildpackage -us -uc \"-m$DEBEMAIL\" $DEBBUILDOPTS"; then echo "pbuilder: Failed autobuilding of package" >&2 executehooks "C" umountproc_cleanbuildplace exit 1; fi fi executehooks "B" umountproc if [ -n "$BUILDRESULT" ]; then mkdir -p "$BUILDRESULT" if [ -d "$BUILDRESULT" ]; then cp "$BUILDPLACE"/tmp/buildd/* "$BUILDRESULT" 2>/dev/null || true else echo "E: BUILDRESULT=[$BUILDRESULT] is not a directory." >&2 fi fi cleanbuildplace echobacktime