ubuntu-dev-tools/pbuilder-dist

196 lines
5.1 KiB
Bash
Executable File

#!/bin/sh
# Copyright (C) Jamin W. Collins <jcollins@asgardsrealm.net>
# and Jordan Mantha <mantha@ubuntu.com>
# Copyright 2007 (C) Siegfried-A. Gevatter <siggi.gevatter@gmail.com>
# License: GPLv2 or later
#
# This script is a wrapper to use pbuilder with many different
# distributions / versions. (It was originally created because of
# bug #255165 in Debian.)
#
# If you want to use this copy of the script only for a single distribution
# / version, rename it to 'pbuilder-dapper', 'pbuilder-feisty', 'pbuilder-gutsy',
# or whatever it is. If you have an amd64, you can also use names like
# 'pbuilder-feisty-i386', etc.
# Base directory where pbuilder will put all the files it creates
# This is overriden by the global variable $PBUILDFOLDER
BASE_DIR="$HOME/pbuilder"
# Enable additional components by default? (universe and multiverse in Ubuntu,
# contrib and non-free in Debian.)
EXTRACOMP=1
# Save the log of the last operation in a dot-file? ('.lastlog' in BASE_DIR)
SAVELOG=0
# Allow this script to use /var/cache/apt/archives/ when possible
SYSCACHE=1
################################
ARCH=`dpkg-architecture -qDEB_HOST_ARCH`
SYSDIST=`lsb_release -cs`
if [ $PBUILDFOLDER ] && [ $PBUILDFOLDER != "" ]
then
BASE_DIR=$PBUILDFOLDER
fi
help()
{
echo "Insufficient number of arguments."
echo "Usage: $0 "$( [ "$1" != 'show-dist-flag' ] || echo "<distribution> " )$( [ $ARCH != "amd64" ] || echo "[i386|amd64] " )"[mainonly|allcomp] [withlog|nolog] <operation>"
exit 1
}
if [ ! -z `echo \`basename $0\` | grep -- '-'` ] && [ `basename $0` != 'pbuilder-dist' ]
then
if [ $# -lt 1 ]
then
help
fi
BINARCH=`basename $0 | cut -f3 -d '-'`
DISTRIBUTION=`basename $0 | cut -f2 -d '-'`
else
if [ $# -lt 2 ]
then
help show-dist-flag
fi
DISTRIBUTION=$1
shift 1
fi
if [ $1 = "i386" ] || [ $1 = "amd64" ]
then
if [ $ARCH = "amd64" ]; then
BINARCH=$1
else
echo "Warning: Architecture switching is not supported on your system; ignoring argument."
fi
shift 1
fi
if [ $1 = "mainonly" ]; then
EXTRACOMP=0
shift 1
elif [ $1 = "allcomp" ]; then
EXTRACOMP=1
shift 1
fi
if [ $1 = "withlog" ]; then
SAVELOG=1
shift 1
elif [ $1 = "nolog" ]; then
SAVELOG=0
shift 1
fi
distdata()
{
if [ "$1" = "debian" ]
then
# Set Debian specific data
ISDEBIAN=True
ARCHIVE="http://ftp.debian.org"
COMPONENTS="main"$( [ $EXTRACOMP = 0 ] || echo " contrib non-free" )
else
# Set Ubuntu specific data
ISDEBIAN=False
ARCHIVE="http://archive.ubuntu.com/ubuntu"
COMPONENTS="main restricted"$( [ $EXTRACOMP = 0 ] || echo " universe multiverse" )
fi
}
case $DISTRIBUTION in
dapper|edgy|feisty|gutsy|hardy) # warty|hoary|breezy
distdata ubuntu
;;
oldstable|sarge|stable|etch|testing|lenny|unstable|sid|experimental)
distdata debian
;;
*)
if [ ! -d $BASE_DIR/${DISTRIBUTION}-* ]
then
echo -n "Warning: Unknown distribution «$DISTRIBUTION». Do you want to continue [y/N]? "
read continue
if [ "$continue" != 'y' ] && [ "$continue" != 'Y' ]
then
echo "Aborting..."
exit 1
fi
fi
distdata
;;
esac
OPERATION=$1
case $OPERATION in
create|update|build|clean|login|execute)
shift 1
;;
*)
echo "Unrecognized argument. Please use one of those:"
echo " create"
echo " update"
echo " build"
echo " clean"
echo " login"
echo " execute"
exit 1
;;
esac
FOLDERBASE="${DISTRIBUTION}-$( ([ "$BINARCH" != "" ] && echo $BINARCH) || echo $ARCH )"
if [ ! -d $BASE_DIR/${FOLDERBASE}_result ]
then
mkdir -p $BASE_DIR/${FOLDERBASE}_result
fi
if [ $SYSCACHE != 0 ] && [ "$SYSDIST" = "$DISTRIBUTION" ] && [ "$ARCH" = "$BINARCH" -o -z $BINARCH ]
then
DEBCACHE='/var/cache/apt/archives/'
fi
# Check what version of pbuilder is installed, and if
# it's supported, use the --components option
if dpkg --compare-versions $(dpkg-query -W -f='${Version}' pbuilder) ge 0.174
then
if [ $ISDEBIAN = True ]; then
echo "Warning: If this operation fails it might be because you changed the value of $COMPONENTS in the pbuilderrc file."
echo "See https://bugs.launchpad.net/ubuntu/+source/ubuntu-dev-tools/+bug/140964 for more information."
fi
COMPONENTS_LINE="--othermirror \"\" --components \"$COMPONENTS\""
else
# else, do it the old way
COMPONENTS_LINE="--othermirror \"deb $ARCHIVE $DISTRIBUTION $COMPONENTS\""
fi
sudo pbuilder $OPERATION \
--basetgz $BASE_DIR/$FOLDERBASE-base.tgz \
--distribution $DISTRIBUTION \
$( [ -z $BINARCH ] || echo "--debootstrapopts \"--arch\" --debootstrapopts \"$BINARCH\"" ) \
$( [ $SAVELOG = 0 ] || echo "--logfile $BASE_DIR/.lastlog" ) \
$( [ -z $DEBCACHE ] || echo "--aptcache $DEBCACHE" ) \
--buildresult $BASE_DIR/${FOLDERBASE}_result \
--mirror "$ARCHIVE" \
$COMPONENTS_LINE \
$@