#!/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