diff --git a/dist/debian/build_deb.sh b/dist/debian/build_deb.sh index 2d030ac..44d0d87 100755 --- a/dist/debian/build_deb.sh +++ b/dist/debian/build_deb.sh @@ -1,37 +1,91 @@ #!/bin/bash -e +. /etc/os-release +print_usage() { + echo "build_deb.sh -target " + echo " --target target distribution codename" + exit 1 +} +TARGET= +while [ $# -gt 0 ]; do + case "$1" in + "--target") + TARGET=$2 + shift 2 + ;; + *) + print_usage + ;; + esac +done + +is_redhat_variant() { + [ -f /etc/redhat-release ] +} +is_debian_variant() { + [ -f /etc/debian_version ] +} + + +pkg_install() { + if is_redhat_variant; then + sudo yum install -y $1 + elif is_debian_variant; then + sudo apt-get install -y $1 + else + echo "Requires to install following command: $1" + exit 1 + fi +} + if [ ! -e dist/debian/build_deb.sh ]; then echo "run build_deb.sh in top of scylla dir" exit 1 fi +if [ "$(arch)" != "x86_64" ]; then + echo "Unsupported architecture: $(arch)" + exit 1 +fi -if [ -e debian ] || [ -e build ] || [ -e target ] || [ -e m2 ] || [ -e dependency-reduced-pom.xml ]; then - rm -rf debian build target m2 dependency-reduced-pom.xml +if [ -e debian ] || [ -e build/release ]; then + rm -rf debian build conf/hotspot_compiler + mkdir build +fi +if is_debian_variant; then + sudo apt-get -y update +fi +# this hack is needed since some environment installs 'git-core' package, it's +# subset of the git command and doesn't works for our git-archive-all script. +if is_redhat_variant && [ ! -f /usr/libexec/git-core/git-submodule ]; then + yum install -y git fi -sudo apt-get -y update if [ ! -f /usr/bin/git ]; then - sudo apt-get -y install git -fi -if [ ! -f /usr/bin/lsb_release ]; then - sudo apt-get -y install lsb-release + pkg_install git fi if [ ! -f /usr/bin/python ]; then - sudo apt-get -y install python + pkg_install python fi -DISTRIBUTION=`lsb_release -i|awk '{print $3}'` -RELEASE=`lsb_release -r|awk '{print $2}'` -CODENAME=`lsb_release -c|awk '{print $2}'` - -if [ "$RELEASE" = "14.04" ]; then - sudo apt-get -y install software-properties-common - sudo add-apt-repository -y ppa:openjdk-r/ppa - sudo apt-get -y update +if [ ! -f /usr/sbin/pbuilder ]; then + pkg_install pbuilder +fi +if [ ! -f /usr/bin/mvn ]; then + pkg_install maven +fi +if [ ! -f /usr/bin/dh_testdir ]; then + pkg_install debhelper fi -if [ "$CODENAME" = "jessie" ]; then - sudo sh -c 'echo deb "http://httpredir.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list' - sudo apt-get -y update - sudo apt-get install -t jessie-backports -y ca-certificates-java + +if [ -z "$TARGET" ]; then + if is_debian_variant; then + if [ ! -f /usr/bin/lsb_release ]; then + pkg_install lsb-release + fi + TARGET=`lsb_release -c|awk '{print $2}'` + else + echo "Please specify target" + exit 1 + fi fi VERSION=$(./SCYLLA-VERSION-GEN) @@ -48,7 +102,7 @@ cp dist/debian/changelog.in debian/changelog cp dist/debian/rules.in debian/rules sed -i -e "s/@@VERSION@@/$SCYLLA_VERSION/g" debian/changelog sed -i -e "s/@@RELEASE@@/$SCYLLA_RELEASE/g" debian/changelog -sed -i -e "s/@@CODENAME@@/$CODENAME/g" debian/changelog +sed -i -e "s/@@CODENAME@@/$TARGET/g" debian/changelog if [ "$DISTRIBUTION" = "Ubuntu" ]; then sed -i -e "s/@@REVISION@@/0ubuntu1/g" debian/changelog else @@ -62,5 +116,18 @@ fi cp dist/common/systemd/scylla-jmx.service.in debian/scylla-jmx.service sed -i -e "s#@@SYSCONFDIR@@#/etc/default#g" debian/scylla-jmx.service -sudo apt-get install -y debhelper maven openjdk-8-jdk-headless devscripts -debuild -r fakeroot -us -uc +cp ./dist/debian/pbuilderrc ~/.pbuilderrc +sudo rm -fv /var/cache/pbuilder/$TARGET-base.tgz +sudo -E DIST=$TARGET /usr/sbin/pbuilder clean +sudo -E DIST=$TARGET /usr/sbin/pbuilder create +sudo -E DIST=$TARGET /usr/sbin/pbuilder update +if [ "$TARGET" = "trusty" ]; then + true +elif [ "$TARGET" = "xenial" ]; then + true +elif [ "$TARGET" = "jessie" ]; then + echo "apt-get install -y -t jessie-backports ca-certificates-java" > build/jessie-pkginst.sh + chmod a+rx build/jessie-pkginst.sh + sudo -E DIST=$TARGET /usr/sbin/pbuilder execute build/jessie-pkginst.sh +fi +sudo -E DIST=$TARGET pdebuild --buildresult build/debs diff --git a/dist/debian/pbuilderrc b/dist/debian/pbuilderrc new file mode 100644 index 0000000..00f6bfa --- /dev/null +++ b/dist/debian/pbuilderrc @@ -0,0 +1,24 @@ +USENETWORK=yes +BUILD_HOME=/tmp +BASETGZ="/var/cache/pbuilder/$DIST-base.tgz" +DISTRIBUTION="$DIST" +BUILDRESULT="/var/cache/pbuilder/$DIST/result/" +APTCACHE="/var/cache/pbuilder/$DIST/aptcache/" +ALLOWUNTRUSTED=yes + +if [ "$DIST" = "trusty" ] || [ "$DIST" = "xenial" ]; then + MIRRORSITE="http://archive.ubuntu.com/ubuntu/" + COMPONENTS="main restricted universe multiverse" + DEBOOTSTRAPOPTS="--keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg" + if [ "$DIST" = "trusty" ]; then + OTHERMIRROR="deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu trusty main" + fi +elif [ "$DIST" = "jessie" ]; then + MIRRORSITE="http://ftp.us.debian.org/debian/" + COMPONENTS="main contrib non-free" + DEBOOTSTRAPOPTS="--keyring=/usr/share/keyrings/debian-archive-keyring.gpg" + OTHERMIRROR="deb http://httpredir.debian.org/debian jessie-backports main" +else + echo "Unknown distribution: $DIST" + exit 1 +fi