cloudstack/packaging/build-deb.sh
Wido den Hollander 7313a5ead2 deb: Remove Ubuntu 14.04 LTS support and update DEB dependencies (#2828)
Ubuntu 14.04 will go EOL in April 2019. With a new CloudStack
release close to that date we can drop support for this Ubuntu
version and the master branch of CloudStack.

Ubuntu 16.04 (Xenial) and 18.04 (Bionic) both have systemd and
more recent Java versions which make it easier to run the CloudStack
KVM Agent on them.

In addition libvirt and Qemu are more up to date with features
which allow VMs to run better.

Yet to be implemented features in KVM can also leverage the newer
version of Qemu and libvirt without the need of taking older
version of them into account.

Signed-off-by: Wido den Hollander <wido@widodh.nl>
2018-09-18 16:01:37 +05:30

155 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
set -e
#
# This script builds Debian packages for CloudStack and does
# so by altering the debian/changelog file and add the Ubuntu
# version as a suffix, for example: 4.10.0~xenial
#
# These packages can be build using Docker for example:
#
# Assume that the cloudstack source is present in /tmp/cloudstack
#
# Ubuntu 16.04
# docker run -ti -v /tmp:/src ubuntu:16.04 /bin/bash -c "apt-get update && apt-get install -y dpkg-dev python debhelper openjdk-8-jdk genisoimage python-mysql.connector maven lsb-release devscripts dh-systemd python-setuptools && /src/cloudstack/packaging/build-deb.sh"
#
function usage() {
cat << USAGE
Usage: ./build-deb.sh [OPTIONS]...
Package CloudStack for Debian based distribution.
If there's a "branding" string in the POM version (e.g. x.y.z.a-NAME[-SNAPSHOT]), the branding name will
be used in the final generated package like: cloudstack-management_x.y.z.a-NAME-SNAPSHOT~xenial_all.deb
note that you can override/provide "branding" string with "-b, --brand" flag as well.
Optional arguments:
-b, --brand string Set branding to be used in package name (it will override any branding string in POM version)
-T, --use-timestamp Use epoch timestamp instead of SNAPSHOT in the package name (if not provided, use "SNAPSHOT")
Other arguments:
-h, --help Display this help message and exit
Examples:
build-deb.sh --use-timestamp
build-deb.sh --brand foo
USAGE
exit 0
}
BRANDING=""
USE_TIMESTAMP="false"
while [ -n "$1" ]; do
case "$1" in
-h | --help)
usage
;;
-b | --brand)
if [ -n "$BRANDING" ]; then
echo "ERROR: you have already entered value for -b, --brand"
exit 1
else
BRANDING=$2
shift 2
fi
;;
-T | --use-timestamp)
if [ "$USE_TIMESTAMP" == "true" ]; then
echo "ERROR: you have already entered value for -T, --use-timestamp"
exit 1
else
USE_TIMESTAMP="true"
shift 1
fi
;;
-*|*)
echo "ERROR: no such option $1. -h or --help for help"
exit 1
;;
esac
done
if [ -z "$(which dch)" ] ; then
echo -e "dch not found, please install devscripts at first. \nDEB Build Failed"
exit 1
fi
NOW="$(date +%s)"
PWD=$(cd $(dirname "$0") && pwd -P)
cd $PWD/../
# Fail early if working directory is NOT clean and --use-timestamp was provided
if [ "$USE_TIMESTAMP" == "true" ]; then
if [ -n "$(cd $PWD; git status -s)" ]; then
echo "Erro: You have uncommitted changes and asked for --use-timestamp to be used."
echo " --use-timestamp flag is going to temporarily change POM versions and"
echo " revert them at the end of build, and there's no way we can do partial"
echo " revert. Please commit your changes first or omit --use-timestamp flag."
exit 1
fi
fi
VERSION=$(head -n1 debian/changelog |awk -F [\(\)] '{print $2}')
DISTCODE=$(lsb_release -sc)
if [ "$USE_TIMESTAMP" == "true" ]; then
# use timestamp instead of SNAPSHOT
if echo "$VERSION" | grep -q SNAPSHOT ; then
# apply/override branding, if provided
if [ "$BRANDING" != "" ]; then
VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
VERSION="$VERSION-$BRANDING-$NOW"
else
VERSION=`echo $VERSION | sed 's/-SNAPSHOT/-'$NOW'/g'`
fi
branch=$(cd $PWD; git rev-parse --abbrev-ref HEAD)
(cd $PWD; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
fi
else
# apply/override branding, if provided
if [ "$BRANDING" != "" ]; then
VERSION=$(echo "$VERSION" | cut -d '-' -f 1) # remove any existing branding from POM version to be overriden
VERSION="$VERSION-$BRANDING"
branch=$(cd $PWD; git rev-parse --abbrev-ref HEAD)
(cd $PWD; ./tools/build/setnextversion.sh --version $VERSION --sourcedir . --branch $branch --no-commit)
fi
fi
/bin/cp debian/changelog /tmp/changelog.orig
dch -b -v "${VERSION}~${DISTCODE}" -u low -m "Apache CloudStack Release ${VERSION}"
sed -i '0,/ UNRELEASED;/s// unstable;/g' debian/changelog
dpkg-checkbuilddeps
dpkg-buildpackage -uc -us -b
/bin/mv /tmp/changelog.orig debian/changelog
if [ "$USE_TIMESTAMP" == "true" ]; then
(cd $PWD; git reset --hard)
fi