mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
164 lines
5.8 KiB
Bash
Executable File
164 lines
5.8 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.9.0~xenial
|
|
#
|
|
# To build packages for Ubuntu 14.04 run this script on a
|
|
# 14.04 system. The same goes for Ubuntu 16.04
|
|
#
|
|
# The biggest difference between those two versions is the
|
|
# sysvinit vs systemd and Java 7 vs Java 8
|
|
#
|
|
# 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"
|
|
#
|
|
# Ubuntu 14.04
|
|
# docker run -ti -v /tmp:/src ubuntu:14.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
|