blob: ed2f96c9dbb9b6312b1e12bf491a4cde2e12f958 (
plain) (
tree)
|
|
#!/bin/bash
# Script to automate backporting for CRAN
# Creates a source package and binary packages for the following architecture
ARCH=i386
export ARCH
# Iteration of the backport, for the case several backports of the same
# release are published
iteration=0
# Where the buildresults should be stored and where to look for current backports
rcrandir=/home/jranke/git/uni-bremen/website/www/ranke/r-cran
# Author: Johannes Ranke <jranke@uni-bremen.de>
# Preconditions:
# - sudo and pbuilder configuration (see README)
# - sid sources in /etc/apt/sources/list
# - dh-r installed (and maybe more)
# - shell variables DEBEMAIL and DEBFULLNAME
usage()
{
echo "Usage: ./backport [options] sourcepackage buster|bullseye|bookworm"
echo "Options:"
echo " -k, --keep Keep copied source package and directory used for package building"
echo " -s, --skip Skip apt-get update/upgrade and pbuilder update"
}
# Loop over options
skip=false
keep=false
while test -n "${1}"; do
case "$1" in
-k | --keep)
keep=true
shift
;;
-s | --skip)
skip=true
shift
;;
-*)
echo "Error: Unknown option: $1" >&2
usage
exit 1
;;
*) # No more options
break
;;
esac
done
# Positional arguments
if [ $# -lt 2 ]; then usage; exit 1; fi
pkg=$1
DIST=$2
# Validate distribution argument
if [ $DIST != "bookworm" ] && [ $DIST != "buster" ] && [ $DIST != "bullseye" ]; then usage; exit 1; fi
export DIST
# Remove previously extracted sources
if [ -d $pkg-* ]
then
sudo rm -rf `ls -d $pkg-*`
fi
# Get current source
if [ "$skip" = false ]
then
sudo apt-get update
sudo apt-get upgrade
fi
#sudo apt-get source -t sid $pkg
sudo apt-get source $pkg
# Copy sources to $DIST directory to enable parallel builds
mkdir -p $DIST
cp -r $pkg\_* $DIST
cp -r $pkg-* $DIST
# Go to package building directory
cd $DIST/$pkg-*
# Determine the version of the upstream Debian package
upstreamversion=`dpkg-parsechangelog | grep ^Version | cut -f2 -d " "`
# Define the version to be used for the backport
cranversion=$upstreamversion"~"$DIST"cran.$iteration"
# Only do a backport if not already available
# This avoids recompiling packages resulting in different sizes which
# would make an update of the archive index inside the loop in backport_others
# necessary
new_dsc=$rcrandir/$DIST-cran40/${pkg}_${cranversion}.dsc
logfile=$rcrandir/$DIST-cran40/${pkg}_${cranversion}_${ARCH}.build
if [ -e $new_dsc ]; then
echo backport.sh: $new_dsc already present
else
echo backport.sh: Upstream version is $upstreamversion
echo backport.sh: New CRAN version is $cranversion
# Add new version to changelog
dch -v "${cranversion}" --force-distribution -D $DIST-cran -b "Backport from Debian unstable to Debian $DIST"
# Check for a script doing modifications required for backporting
script=../\_reverts\_$pkg\.sh
if [ -f $script ]; then source $script; fi
if [ "$skip" = false ]
then
sudo -E pbuilder update \
--override-config \
--distribution $DIST \
--basetgz /var/cache/pbuilder/$DIST-$ARCH-base.tgz \
--aptcache /var/cache/pbuilder/$DIST-$ARCH/aptcache
fi
sudo -E pdebuild --debbuildopts '-sa' \
--buildresult $rcrandir/$DIST-cran40/ \
--logfile $logfile \
-- --override-config \
--distribution $DIST --basetgz /var/cache/pbuilder/$DIST-$ARCH-base.tgz \
--aptcache /var/cache/pbuilder/$DIST-$ARCH/aptcache \
--buildplace /var/cache/pbuilder/$DIST-$ARCH/build
if [ $? -ne 0 ]; then
exit
fi
fi
cd ../..
# Clean sources from $DIST directory
if [ "$keep" = false ]
then
rm -f $DIST/$pkg\_*
rm -rf $DIST/$pkg-*
fi
|