#! /bin/bash # this is sourced from pbuilder packages to process the optional parameters. # pbuilder -- personal Debian package builder # Copyright (C) 2001-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 # This code is called for pbuilder and pbuilder inside pbuilder-uml; # pbuilder-uml calls uml-checkparams. export PBUILDER_PKGLIBDIR="${PBUILDER_PKGLIBDIR:-$PBUILDER_ROOT/usr/lib/pbuilder}" . "$PBUILDER_PKGLIBDIR"/pbuilder-loadconfig . "$PBUILDER_PKGLIBDIR"/pbuilder-modules #default value for this option is !empty! INTERNAL_BUILD_UML="" TWICE="" CHROOTEXEC="" OVERRIDE_APTLINES="no" OVERRIDE_APTLINES_WARN="" # set this if --override-config option should be set. BINARY_ARCH="no" BIN_NMU="no" PBUILDER_BUILD_LOGFILE= PRESERVE_BUILDPLACE="no" unset EXTRA_CONFIGFILE || true PBUILDER_DEBUGMODE= SAVE_AFTER_LOGIN= #option for user-mode-linux only. IGNORE_UMOUNT="" while [ -n "$1" ]; do case "$1" in --basetgz) case "${PBCURRENTCOMMANDLINEOPERATION}" in create|--create) touch "$2";; esac if [ ! -f "$2" ]; then log.e "File $2 does not exist" exit 1 fi BASETGZ=$(readlink -f "$2"); shift; shift; ;; --buildplace) if [ ! -d "$2" ] ; then log.e "Directory $2 does not exist" exit 1 fi BUILDPLACE=$(readlink -f "$2"); shift; shift; ;; --mirror) MIRRORSITE="$2"; OVERRIDE_APTLINES_WARN=yes shift; shift; ;; --othermirror) OTHERMIRROR="$2"; OVERRIDE_APTLINES_WARN=yes shift; shift; ;; --http-proxy) export http_proxy="$2"; shift; shift; ;; --distribution) DISTRIBUTION="$2"; OVERRIDE_APTLINES_WARN=yes shift; shift; ;; --architecture) ARCHITECTURE="$2"; shift; shift; ;; --components) COMPONENTS="$2"; OVERRIDE_APTLINES_WARN=yes shift; shift; ;; --buildresult) if [ -n "$2" ]; then if [ -d "$2" ]; then BUILDRESULT=$(readlink -f "$2"); else BUILDRESULT="$2" log.w "Build-result Directory $2 does not exist" # warn, but make it progress. fi else BUILDRESULT= fi shift; shift; ;; --compressprog) if [ -n "$2" ]; then COMPRESSPROG="$2" fi shift; shift; ;; --aptcache) if [ -n "$2" ]; then if [ -d "$2" ]; then APTCACHE=$(readlink -f "$2"); else log.e "Directory $2 does not exist" exit 1 fi else APTCACHE= fi shift; shift; ;; --autocleanaptcache) AUTOCLEANAPTCACHE=yes shift; ;; --removepackages) REMOVEPACKAGES="$2"; shift; shift; ;; --loglevel) LOGLEVEL="$2" shift; shift; ;; --configfile) if [ ! -f "$2" ]; then log.e "Config file $2 does not exist" exit 1 fi . "$2"; # deprecated in v0.216 if [ -n "$PKGNAME_LOGFILE_EXTENTION" ] ; then echo "W: The configuration option PKGNAME_LOGFILE_EXTENTION is deprecated in favour of PKGNAME_LOGFILE_EXTENSION. Though, while you have the former set it'll take precedence over the latter." echo "W: PKGNAME_LOGFILE_EXTENTION will be removed at some point, please update your config!" PKGNAME_LOGFILE_EXTENSION="$PKGNAME_LOGFILE_EXTENTION" fi EXTRA_CONFIGFILE[${#EXTRA_CONFIGFILE[@]}]="$2"; shift; shift; ;; --extrapackages) EXTRAPACKAGES="$2"; shift; shift; ;; --hookdir) HOOKDIR="$2"; shift; shift; ;; --debemail) DEBEMAIL="$2"; shift; shift; ;; --debbuildopts) # append to DEBBUILDOPTS or reset to empty if $2 isn't set DEBBUILDOPTS="${2:+${DEBBUILDOPTS:+$DEBBUILDOPTS }$2}"; shift; shift; ;; --logfile) log.i "Logging to $2" exec > >(tee "$2") 2>&1 PBUILDER_BUILD_LOGFILE=$(readlink -f "$2") shift; shift; ;; --pkgname-logfile) PKGNAME_LOGFILE="yes" shift; ;; --aptconfdir) APTCONFDIR="$2"; shift; shift; ;; --timeout) TIMEOUT_TIME="$2" shift; shift; ;; --help) showhelp exit 0 ;; --override-config) OVERRIDE_APTLINES="yes" shift; ;; --binary-arch) BINARY_ARCH="yes" # XXX this might be overwriten by --debbuildopts "" DEBBUILDOPTS="${DEBBUILDOPTS} -B" shift; ;; --bin-nmu) BIN_NMU="yes" BINARY_ARCH="yes" # XXX this might be overwriten by --debbuildopts "" DEBBUILDOPTS="${DEBBUILDOPTS} -B" BINNMU_MESSAGE="$2" shift; shift; ;; --bin-nmu-maintainer) BINNMU_MAINTAINER="$2" shift; shift; ;; --bin-nmu-version) BINNMU_VERSION="$2" shift; shift; ;; --preserve-buildplace) PRESERVE_BUILDPLACE="yes" shift; ;; --bindmounts) BINDMOUNTS="${BINDMOUNTS} $2" shift; shift; ;; --debootstrapopts) # specify this option to set --variant=buildd value to debootstrap DEBOOTSTRAPOPTS[${#DEBOOTSTRAPOPTS[@]}]="$2"; shift; shift; ;; --debootstrap) # Use this option to specify debootstrap/cdebootstrap DEBOOTSTRAP="$2"; shift; shift; ;; --allow-untrusted) ALLOWUNTRUSTED=yes; shift; ;; --debdelta) DEBDELTA=yes; shift; ;; --keyring) APTKEYRINGS[${#APTKEYRINGS[@]}]="$2"; shift; shift; ;; --save-after-login|--save-after-exec) SAVE_AFTER_LOGIN=yes; shift; ;; --inputfile) if [ ! -f "$2" ]; then log.e "Input file $2 does not exist" exit 1 fi INPUTFILE[${#INPUTFILE[@]}]="$2"; shift; shift; ;; --outputfile) OUTPUTFILE[${#OUTPUTFILE[@]}]="$2"; shift; shift; ;; ## internal options. --internal-chrootexec) # specify custom chrootexec function -- this is internal debugging function CHROOTEXEC="$2" shift; shift; ;; --debug) PBUILDER_DEBUGMODE=yes set -x shift; ;; --no-targz) # specify this option if I am running in no-targz mode log.i "Running in no-targz mode" INTERNAL_BUILD_UML="yes" shift; ;; --internal-build-uml) # specify this option if I am running inside UML. log.i "Running in pbuilder-user-mode-linux mode" INTERNAL_BUILD_UML="yes" IGNORE_UMOUNT="no" shift; ;; --twice) TWICE="yes" shift; ;; --) # end of processing for this shift; break; ;; --*) log.e "Unknown option [$1] was specified " exit 1; ;; *) break; ;; esac done BUILDPLACE=${BUILDPLACE?"Build root directory is not defined"} # the default is to add a PID in the buildplace specified in the config file. BASEBUILDPLACE="$BUILDPLACE" if [ "${INTERNAL_BUILD_UML}" != "yes" -a "${PRESERVE_BUILDPLACE}" != "yes" ]; then BUILDPLACE="$BUILDPLACE/$$" fi if [ -z "${CHROOTEXEC}" ]; then CHROOTEXEC="chroot $BUILDPLACE " fi # sanity check of LOGLEVEL case "$LOGLEVEL" in D|I|W|E) ;; *) # use log() instead of log.e() to override the buggy LOGLEVEL log "E: A non-valid LOGLEVEL has been specified: '${LOGLEVEL}'." log "E: Valid values are D, I, W, E" exit 1 ;; esac # handle 'experimental' specially. -- required for raw pbuilder (create/update) only. case "$PBCURRENTCOMMANDLINEOPERATION" in --update|update|--create|create) if [ "$DISTRIBUTION" = "experimental" ]; then DISTRIBUTION="sid" EXPERIMENTAL="true" else EXPERIMENTAL="" fi ;; *) EXPERIMENTAL="" ;; esac case "$PBCURRENTCOMMANDLINEOPERATION" in --login|login|--execute|execute|--pdebuild|pdebuild) # don't do anything if it is "login", or pdebuild ;; *) # line from kobras@debian.org if [ "$DEBIAN_FRONTEND" = "noninteractive" -o "$DEBIAN_FRONTEND" = "Noninteractive" ]; then exec < /dev/null # set variables used in the upgrade option. FORCE_CONFNEW[0]='-o' FORCE_CONFNEW[1]='DPkg::Options::=--force-confnew' else unset FORCE_CONFNEW || true fi ;; esac if [ -n "$CCACHEDIR" ]; then if [ -d "$CCACHEDIR" ]; then BINDMOUNTS="$BINDMOUNTS $CCACHEDIR" fi export PATH="/usr/lib/ccache:$PATH" fi # sort BINDMOUNTS to ensure that deeper directories are mounted last BINDMOUNTS="$(for i in $BINDMOUNTS; do echo $i; done | sort -u)" if [ "$ALLOWUNTRUSTED" = "yes" ]; then PBUILDERSATISFYDEPENDSOPT[${#PBUILDERSATISFYDEPENDSOPT[@]}]='--allow-untrusted' # Also duplicated in pbuilder-satisfydepends-checkparams! # apt flag to accept untrusted packages APTGETOPT[${#APTGETOPT[@]}]='--force-yes' # aptitude flag to accept untrusted packages APTITUDEOPT[${#APTITUDEOPT[@]}]='-o' APTITUDEOPT[${#APTITUDEOPT[@]}]='Aptitude::CmdLine::Ignore-Trust-Violations=true' fi