#! /bin/bash # pbuilder-internal -- personal Debian package builder, internal routine # Copyright (C) 2003-2007 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # invoke this as # pbuilder execute pdebuild-internal --bindmount "${pwd}/.." "$1" # does not support --buildresult, but should that be required ? # # Risk: May corrupt your files depending on how user-mode-linux works, if used inside UML. # Will take longer if your package does not successfully run 'debian/rules clean' # # This script is running inside chroot under 'pbuilder execute' as root. set -e # I am probably running as root; make sure I have pbuilder installed here. # passwd is needed as well because of useradd and groupadd calls. apt-get install -y --force-yes pbuilder passwd # I'm not going to have the same LOGNAME as outside, I'm root. export LOGNAME=root cd "$1" shift; while [ -n "$1" ]; do case "$1" in --debbuildopts) echo "Setting DEBBUILDOPTS=$2" DEBBUILDOPTS="$2" shift; shift; ;; --uid) BUILDRESULTUID=$2 shift; shift; ;; --gid) BUILDRESULTGID=$2 shift; shift; ;; --pbuildersatisfydepends) PBUILDERSATISFYDEPENDSCMD=$2 shift; shift; ;; --debug) PBUILDER_DEBUGMODE=yes set -x shift; ;; --*) echo "Error: Unknown option [$1] was specified " >&2 exit 1; ;; *) break; ;; esac done # fool pbuilder-runhooks to use / as buildplace, since I am inside chroot. BUILDPLACE= . /usr/lib/pbuilder/pbuilder-runhooks executehooks "D" export PBCURRENTCOMMANDLINEOPERATION="pdebuild" "$PBUILDERSATISFYDEPENDSCMD" apt-get install -y --force-yes fakeroot # create the user similar to that used outside groupadd -g "${BUILDRESULTGID}" -o pbgroup useradd -g pbgroup -u "${BUILDRESULTUID}" -o pbuser # what about id -G output? if other groups than the designated is used, we're stuffed. export HOME=$(pwd)/../ executehooks "A" # do build with that user. export DEBBUILDOPTS if echo /usr/bin/dpkg-buildpackage -rfakeroot -us -uc '${DEBBUILDOPTS}' | \ su -p pbuser; then # build was successful : else executehooks "C" exit 1 fi executehooks "B"