Skip to content
Snippets Groups Projects
Commit 9c3449c1 authored by Martin Killenberg's avatar Martin Killenberg
Browse files

undid the changes to use pbuilder in make_debian_package.sh. This...

undid the changes to use pbuilder in make_debian_package.sh. This conceptualluy does not work and will completely be changed in future.
parent 63f959f4
No related branches found
No related tags found
No related merge requests found
########################################################################################
# Project-specific configuration for the Debian packaging scripts #
# #
# Please modify this file for your needs by copying a line, uncommenting it and then #
# modifying the uncommented copy. Keep the commented original copy to avoid conflicts! #
########################################################################################
# URI of the git repository containing the build version numbers
#DEBIAN_BUILD_VERSIONS_REPO=git@github.com:ChimeraTK/DebianBuildVersions.git
########################################################################################
# NO USER CONFIGURATION BELOW THIS POINT! DO NOT MODIFY OUTSIDE THE project-template #
########################################################################################
ERROR_MESSAGE="DebianPackaging.config is not properly updated for this package!"
if [ -z "$DEBIAN_BUILD_VERSIONS_REPO" ]; then
echo ${ERROR_MESSAGE}
exit 1
fi
unset ERROR_MESSAGE
#!/bin/bash
#######################################################################################################################
# getDebianBuildVersion
#
# Determine the Debian build version from the git repository specified in the DebianPackaging.config file.
#
# Usage:
# ./getDebianBuildVersion <PACKAGE_NAME> <PACKAGE_VERSION> <DEBIAN_CODENAME> [<DEPENDENCY1_NAME_WITH_VERSION>] \
# [<DEPENDENCY2_NAME_WITH_VERSION>] [...]
#
# Example:
# ./getDebianBuildVersion DeviceAccess-DoocsBackend 0.1 xenial DeviceAccess-0.14 DOOCS-18.10.5 DoocsServerTestHelper-0.1
#
# IMPORTANT NOTES:
# If you change the order of dependencies passed to this script, the build version will be unnecessarily increased!
# Running this script requires access to the git repository and WILL eventually MAKE COMMITS to it!
#
#######################################################################################################################
#######################################################################################################################
#
# IMPORTANT NOTE:
#
# DO NOT MODIFY THIS FILE inside a project. Instead update the project-template repository and pull the change from
# there. Make sure to keep the file generic, since it will be used by other projects, too.
#
# If you have modified this file inside a project despite this warning, make sure to cherry-pick all your changes
# into the project-template repository immediately.
#
#######################################################################################################################
# obtain configuration
source "$(dirname $0)/DebianPackaging.config"
# check minimum number of command line parameters
if [ $# -lt 3 ]; then
echo "Usage:"
echo "./getDebianBuildVersion <PACKAGE_NAME> <PACKAGE_VERSION> <DEBIAN_CODENAME> [<DEPENDENCY1_NAME_WITH_VERSION>] [<DEPENDENCY2_NAME_WITH_VERSION>] [...]"
echo ""
echo "Example:"
echo "./getDebianBuildVersion DeviceAccess-DoocsBackend 0.1 xenial DeviceAccess-0.14 DOOCS-18.10.5 DoocsServerTestHelper-0.1"
echo ""
echo "IMPORTANT NOTES:"
echo "If you change the order of dependencies passed to this script, the build version will be unnecessarily increased!"
echo "Running this script requires access to the git repository and WILL eventually MAKE COMMITS to it!"
exit 1
fi
# parse mandatory command line parameters
PACKAGE_NAME="$1"
PACKAGE_VERSION="$2"
DEBIAN_CODENAME="$3"
shift ; shift ; shift
# build sub-directory name for dependency versions (will start and end with a /)
DEPENDENCY_STRING="/"
while (( "$#" )); do
DEPENDENCY_STRING="${DEPENDENCY_STRING}${1}/"
shift
done
# output information extracted from command line:
echo "PACKAGE_NAME=${PACKAGE_NAME}" >&2
echo "PACKAGE_VERSION=${PACKAGE_VERSION}" >&2
echo "DEBIAN_CODENAME=${DEBIAN_CODENAME}" >&2
echo "DEPENDENCY_STRING=${DEPENDENCY_STRING}" >&2
# create temporary directory for checking out the DebianBuildVersions repository and modifying it
WDIR=`mktemp --tmpdir -d DebianBuildVersions.XXXXXXXX`
echo Temporary directory to work in: $WDIR >&2
echo Git repository containing the build versions: $DEBIAN_BUILD_VERSIONS_REPO >&2
# check out the DebianBuildVersions repository
cd $WDIR || exit 1
git clone "$DEBIAN_BUILD_VERSIONS_REPO" . >&2 || exit 1
# go to the directory for the specific package version and debian codename (create it if not yet existing)
mkdir -p "${PACKAGE_NAME}/${PACKAGE_VERSION}/${DEBIAN_CODENAME}"
cd "${PACKAGE_NAME}/${PACKAGE_VERSION}/${DEBIAN_CODENAME}"
# if LATEST_BUILD file is not there, this is the first build of this package version on this debian codename
if [ ! -f "LATEST_BUILD" ]; then
echo "The package ${PACKAGE_NAME} in version ${PACKAGE_VERSION} has never been build on ${DEBIAN_CODENAME} before." >&2
# start with build number 1 and create the necessary control structure
BUILD_NUMBER=1
echo ".${DEPENDENCY_STRING}BUILD_NUMBER" > LATEST_BUILD
mkdir -p ".${DEPENDENCY_STRING}"
echo ${BUILD_NUMBER} > ".${DEPENDENCY_STRING}BUILD_NUMBER"
else
# if the file BUILD_NUMBER exists in the dependency sub-directory, this is a patch build and we re-use the build number
if [ -f ".${DEPENDENCY_STRING}BUILD_NUMBER" ]; then
echo "The package ${PACKAGE_NAME} in version ${PACKAGE_VERSION} has been build on ${DEBIAN_CODENAME} before against the SAME dependency versions." >&2
BUILD_NUMBER=`cat ".${DEPENDENCY_STRING}BUILD_NUMBER"`
else
# no build number has been assigned yet, so we have to increase the build number from the latest build
echo "The package ${PACKAGE_NAME} in version ${PACKAGE_VERSION} has been build on ${DEBIAN_CODENAME} before against DIFFERENT dependency versions." >&2
BUILD_NUMBER=$(( `cat $(cat LATEST_BUILD)` + 1 ))
echo ".${DEPENDENCY_STRING}BUILD_NUMBER" > LATEST_BUILD
mkdir -p ".${DEPENDENCY_STRING}"
echo ${BUILD_NUMBER} > ".${DEPENDENCY_STRING}BUILD_NUMBER"
fi
fi
# commit the changes to the repository
git add -A . >&2 || exit 1
git commit -m "Update by getDebianBuildVersion: ${PACKAGE_NAME}/${PACKAGE_VERSION}/${DEBIAN_CODENAME}${DEPENDENCY_STRING} -> ${BUILD_NUMBER}" >&2
git push >&2 || exit 1
# output the build number to stderr in human readable form and to stdout in plain form for further script processing
echo Build number: ${BUILD_NUMBER} >&2
echo ${BUILD_NUMBER}
rm -rf $WDIR
......@@ -15,121 +15,56 @@
#######################################################################################################################
# This cmake.in file requires the following variables to be set:
# PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME Environment variable which contains the build version.
# Must not contain any hyphens.
# PACKAGE_BASE_NAME This is the debian package name, not the project name (e.g. libraries must start with lib,
# all lower case, no underscore)
# all lover case, no underscore)
# PACKAGE_FULL_LIBRARY_VERSION The full version, incl. build version and patch version
# PACKAGE_GIT_URI The URI where to check out the source code
# PACKAGE_TAG_VERSION The tag for which the package is build
# PACKAGE_MAJORMINOR_VERSION The library version without the patch level (i.e. just "MAJOR.MINOR")
# PACKAGE_PATCH_VERSION The patch level
# PACKAGE_MESSAGE The message for the debian package log
# PACKAGE_DEPENDENCY_VERSIONS A space-separated list of dependency names and versions, each connected by a dash, e.g.:
# "DeviceAccess-0.15 ControlSystemAdapter-0.1"
# Also the following standard cmake variables are used (should be always correctly set):
# CMAKE_SOURCE_DIR
# PROJECT_NAME
# drop out of the script if anything goes wrong (e.g. non-existing git tag)
#Check that the @PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@ variable is set, otherwise reject creating a package
if [ -z "$@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@" ]; then
echo Environment variable '@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@' not set or empty. You need it to make a debian package!
exit 1
fi
#drop out of the script if anything goes wrong (e.g. non-existen git tag)
set -e
# Create a working directory in order not to merge with the rest in the build directory
#Create a working directory in order not to merge with the rest in the build directory
rm -rf debian_package
mkdir debian_package
cd debian_package
# Parse command line argument
if [ -z "$1" ] ; then
# build on host system
USE_PBUILDER=0
CODENAME=`lsb_release -c | sed "{s/Codename:\s*//}"`
elif [ "$1" == "--setup" ] ; then
if [ -z "$2" ] ; then
echo "Missing parameter to --setup"
exit 1
fi
sudo pbuilder --create --distribution $2
exit $?
else
USE_PBUILDER=1
CODENAME=$1
fi
# Print warning if not using pbuilder
if [ "$USE_PBUILDER" == "0" ]; then
echo "WARNING: You are building on your host system for ${CODENAME}."
echo ""
echo "It is strongly recommended to build in a chroot environment using pbuilder. This can be simply enabled by calling the make_debian_package.sh script with the codename as command line argument, i.e.:"
echo " ./make_debian_package.sh ${CODENAME}"
echo ""
echo "This will require root permissons (script will ask for password via sudo) and a previously setup pbuilder environment, but you can build for any target on every host system with pbuilder installed."
echo ""
echo "To setup the pbuilder environment, use the following command:"
echo " ./make_debian_package.sh --setup ${CODENAME}"
echo ""
echo -n "Continuing in 5 seconds. Press Ctrl+C to abort."
sleep 1 ; echo -n "."
sleep 1 ; echo -n "."
sleep 1 ; echo -n "."
sleep 1 ; echo -n "."
sleep 1 ; echo "."
fi
# Obtain build version and the derived so-file and debian versions
BUILD_NUMBER=`"@CMAKE_SOURCE_DIR@/cmake/getDebianBuildVersion" @PROJECT_NAME@ @PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ ${CODENAME} @PACKAGE_DEPENDENCY_VERSIONS@` || exit 1
export PROJECT_BUILDVERSION="${CODENAME}${BUILD_NUMBER}"
DEBVERSION="@PACKAGE_MAJOR_VERSION@-@PACKAGE_MINOR_VERSION@-${PROJECT_BUILDVERSION}"
SOVERSION="@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@${PROJECT_BUILDVERSION}"
# replace #DEBVERSION# inside the template files in the debian_from_template directory, also replace DEBVERSION in the
# file names
for file_source in ../debian_from_template/* ; do
file_target=`echo ${file_source} | sed -e "s|DEBVERSION|${DEBVERSION}|g" -e "s|.template$||" `
echo "$file_source -> $file_target"
# perform operation, if source and target file names are not identical
if [ "$file_source" != "$file_target" ] ; then
sed "$file_source" -e "s|#DEBVERSION#|${DEBVERSION}|g" -e "s|#SOVERSION#|${SOVERSION}|g" > "$file_target"
fi
done
# Check out the correct tag from the master git repository.
# The local directory name has to follow the debian convention
# lowecasepackagenname_package.ver.sion
# Note, we first clone and then checkout the tag because the old git version on
# Ubuntu12.4 does not support to do it in one go.
BUILD_DIR_NAME="@PACKAGE_BASE_NAME@_@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@-${PROJECT_BUILDVERSION}"
#Check out the correct tag from the master git repository.
#The local directory name has to follow the debian convention
# lowecasepackagenname_package.ver.sion
#Note, we first clone and then checkout the tag because the old git version on
#Ubuntu12.4 does not support to do it in one go.
BUILD_DIR_NAME=@PACKAGE_BASE_NAME@_@PACKAGE_FULL_LIBRARY_VERSION@
git clone @CMAKE_SOURCE_DIR@ ${BUILD_DIR_NAME}
( cd ${BUILD_DIR_NAME} &&\
git checkout @PACKAGE_TAG_VERSION@ &&\
rm -rf .git )
# Debian convention: file has to end on .orig.tar.gz
#Debian convention: file has to end on .orig.tar.gz
tar -czf ${BUILD_DIR_NAME}.orig.tar.gz ${BUILD_DIR_NAME}
# Copy the prepared debian packaging config files to the source code
# directroy
#Copy the prepared debian packaging config files to the source code
#directroy
cp -r ../debian_from_template ${BUILD_DIR_NAME}/debian
cd ${BUILD_DIR_NAME}
# Before building the package we will update the changelog. This is easier from a shell script
# because debchange does the right format and the current date, user name and email automatically for us.
# Use the NAME and EMAIL environment variables to get correct values if needed (usually the email is
# user@host instead of first.last@institute, for instance killenb@mskpcx18571.desy.de instead of martin.killenberg@desy.de).
debchange --create --package @PACKAGE_BASE_NAME@ -v @PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@-${PROJECT_BUILDVERSION}-@PACKAGE_PATCH_VERSION@ --distribution ${CODENAME} @PACKAGE_MESSAGE@
#The package versions for doocs / Ubuntu contain the codename of the distribution. Get it from the system.
CODENAME=`lsb_release -c | sed "{s/Codename:\s*//}"`
# Now everything is prepared and we can actually build the package.
# If you have a gpg signature you can remove the -us and -uc flags and sign the package.
if [ "$USE_PBUILDER" == "0" ]; then
dpkg-buildpackage -rfakeroot -us -uc
else
MIRRORLIST="deb [trusted=yes] http://doocspkgs.desy.de/pub/doocs xenial main|deb [trusted=yes] http://doocs.desy.de/pub/doocs xenial main|deb [trusted=yes] file:///var/cache/pbuilder/result ./"
sudo bash -c "cd /var/cache/pbuilder/result ; apt-ftparchive packages . > Packages" || exit 1
sudo pbuilder --update --distribution ${CODENAME} --override-config --components "main universe" \
--othermirror "$MIRRORLIST" --buildresult "/var/cache/pbuilder/result" \
--bindmounts "/var/cache/pbuilder/result" || exit 1
pdebuild -- --distribution ${CODENAME} --buildresult "/var/cache/pbuilder/result" \
--bindmounts "/var/cache/pbuilder/result" || exit 1
echo ""
echo "You can find the resulting debian packages in this directory: /var/cache/pbuilder/result"
fi
#Before building the package we will update the changelog. This is easier from a shell script
#because debchange does the right format and the current date, user name and email automatically for us.
#Use the NAME and EMAIL environment variables to get correct values if needed (usually the email is
# user@host instead of first.last@institute, for instance killenb@mskpcx18571.desy.de instead of martin.killenberg@desy.de).
debchange --create --package @PACKAGE_BASE_NAME@ -v @PACKAGE_FULL_LIBRARY_VERSION@-${@PACKAGE_BUILDVERSION_ENVIRONMENT_VARIABLE_NAME@} --distribution ${CODENAME} @PACKAGE_MESSAGE@
#Now everything is prepared and we can actually build the package.
#If you have a gpg signature you can remove the -us and -uc flags and sign the package.
dpkg-buildpackage -rfakeroot -us -uc
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment