diff --git a/dist/debian/build_deb.sh b/dist/debian/build_deb.sh index 7c3816b397..cdb0e08771 100755 --- a/dist/debian/build_deb.sh +++ b/dist/debian/build_deb.sh @@ -2,7 +2,8 @@ . /etc/os-release print_usage() { - echo "build_deb.sh --rebuild-dep" + echo "build_deb.sh -target --dist --rebuild-dep" + echo " --target target distribution codename" echo " --dist create a public distribution package" echo " --rebuild-dep rebuild dependency packages" exit 1 @@ -17,6 +18,7 @@ install_deps() { REBUILD=0 DIST=0 +TARGET= while [ $# -gt 0 ]; do case "$1" in "--rebuild-dep") @@ -27,51 +29,89 @@ while [ $# -gt 0 ]; do DIST=1 shift 1 ;; + "--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/release ]; then - rm -rf debian build + sudo rm -rf debian build mkdir build fi -sudo apt-get -y update +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 + sudo yum install -y git +fi if [ ! -f /usr/bin/git ]; then - sudo apt-get -y install git + pkg_install git fi -if [ ! -f /usr/bin/mk-build-deps ]; then - sudo apt-get -y install devscripts +if [ ! -f /usr/bin/python ]; then + pkg_install python fi -if [ ! -f /usr/bin/equivs-build ]; then - sudo apt-get -y install equivs +if [ ! -f /usr/sbin/pbuilder ]; then + pkg_install pbuilder fi -if [ ! -f /usr/bin/add-apt-repository ]; then - sudo apt-get -y install software-properties-common +if [ ! -f /usr/bin/ant ]; then + pkg_install ant fi -if [ ! -f /usr/bin/wget ]; then - sudo apt-get -y install wget -fi -if [ ! -f /usr/bin/lsb_release ]; then - sudo apt-get -y install lsb-release -fi -if [ ! -f /usr/bin/gdebi ]; then - sudo apt-get -y install gdebi-core +if [ ! -f /usr/bin/dh_testdir ]; then + pkg_install debhelper fi -DISTRIBUTION=`lsb_release -i|awk '{print $3}'` CODENAME=`lsb_release -c|awk '{print $2}'` -if [ `grep -c $VERSION_ID dist/debian/supported_release` -lt 1 ]; then - echo "Unsupported release: $VERSION_ID" - echo "Pless any key to continue..." - read input + +if [ -z "$TARGET" ]; then + if is_debian_variant; then + if [ ! -f /usr/bin/lsb_release ]; then + pkg_install lsb-release + fi + TARGET=$CODENAME + else + echo "Please specify target" + exit 1 + fi +fi +if [ $REBUILD -eq 1 ] && [ "$TARGET" != "$CODENAME" ]; then + echo "Rebuild dependencies doesn't support cross-build." + echo "Please run it on following distribution: $TARGET" + exit 1 fi VERSION=$(./SCYLLA-VERSION-GEN) @@ -85,11 +125,12 @@ cp dist/common/sysconfig/scylla-server debian/scylla-server.default cp dist/debian/changelog.in debian/changelog 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 cp dist/debian/rules.in debian/rules cp dist/debian/control.in debian/control cp dist/debian/scylla-server.install.in debian/scylla-server.install -if [ "$DISTRIBUTION" = "Debian" ]; then +if [ "$TARGET" = "jessie" ]; then + cp dist/debian/scylla-server.cron.d debian/ sed -i -e "s/@@REVISION@@/1/g" debian/changelog sed -i -e "s/@@DH_INSTALLINIT@@//g" debian/rules sed -i -e "s/@@COMPILER@@/g++-5/g" debian/rules @@ -102,7 +143,8 @@ if [ "$DISTRIBUTION" = "Debian" ]; then sed -i -e "s#@@SCRIPTS_SAVE_COREDUMP@@#dist/debian/scripts/scylla_save_coredump usr/lib/scylla#g" debian/scylla-server.install sed -i -e "s#@@SCRIPTS_FSTRIM@@#dist/debian/scripts/scylla_fstrim usr/lib/scylla#g" debian/scylla-server.install sed -i -e "s#@@SCRIPTS_DELAY_FSTRIM@@#dist/debian/scripts/scylla_delay_fstrim usr/lib/scylla#g" debian/scylla-server.install -elif [ "$VERSION_ID" = "14.04" ]; then +elif [ "$TARGET" = "trusty" ]; then + cp dist/debian/scylla-server.cron.d debian/ sed -i -e "s/@@REVISION@@/0ubuntu1/g" debian/changelog sed -i -e "s/@@DH_INSTALLINIT@@/--upstart-only/g" debian/rules sed -i -e "s/@@COMPILER@@/g++-5/g" debian/rules @@ -134,36 +176,22 @@ if [ $DIST -gt 0 ]; then else sed -i -e "s#@@ADDHKCFG@@##g" debian/scylla-server.install fi - cp dist/common/systemd/scylla-server.service.in debian/scylla-server.service sed -i -e "s#@@SYSCONFDIR@@#/etc/default#g" debian/scylla-server.service cp dist/common/systemd/scylla-housekeeping-daily.service debian/scylla-server.scylla-housekeeping-daily.service cp dist/common/systemd/scylla-housekeeping-restart.service debian/scylla-server.scylla-housekeeping-restart.service cp dist/common/systemd/node-exporter.service debian/scylla-server.node-exporter.service -if [ "$DISTRIBUTION" = "Debian" ] || [ "$VERSION_ID" = "14.04" ]; then - cp dist/debian/scylla-server.cron.d debian/ -fi -if [ $REBUILD -eq 0 ]; then - if [ ! -f /etc/apt/sources.list.d/scylla-3rdparty.list ]; then - cd /etc/apt/sources.list.d - sudo wget -nv https://s3.amazonaws.com/downloads.scylladb.com/deb/3rdparty/$CODENAME/scylla-3rdparty.list - cd - - fi - sudo apt-get -y update - sudo apt-get -y --allow-unauthenticated install antlr3 antlr3-c++-dev libthrift-dev libthrift0 thrift-compiler -else +if [ $REBUILD -eq 1 ]; then ./dist/debian/dep/build_dependency.sh fi -if [ "$VERSION_ID" = "14.04" ]; then - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get -y update -elif [ "$DISTRIBUTION" = "Ubuntu" ]; then - sudo apt-get -y install g++-5 -else - sudo apt-get install g++ +cp ./dist/debian/pbuilderrc ~/.pbuilderrc +sudo rm -fv /var/cache/pbuilder/scylla-server-$TARGET.tgz +sudo -E DIST=$TARGET REBUILD=$REBUILD /usr/sbin/pbuilder clean +sudo -E DIST=$TARGET REBUILD=$REBUILD /usr/sbin/pbuilder create +sudo -E DIST=$TARGET REBUILD=$REBUILD /usr/sbin/pbuilder update +if [ $REBUILD -eq 1 ]; then + sudo -E DIST=$TARGET REBUILD=$REBUILD /usr/sbin/pbuilder execute --save-after-exec dist/debian/dep/pbuilder_install_deps.sh fi - -install_deps -debuild -r fakeroot -us -uc +sudo -E DIST=$TARGET REBUILD=$REBUILD pdebuild --buildresult build/debs diff --git a/dist/debian/dep/build_dependency.sh b/dist/debian/dep/build_dependency.sh index 53da8e6ba3..1549e68b27 100755 --- a/dist/debian/dep/build_dependency.sh +++ b/dist/debian/dep/build_dependency.sh @@ -21,7 +21,16 @@ if [ "$CODENAME" = "jessie" ]; then sudo apt-get install -t jessie-backports -y texlive fi -sudo apt-get install -y gdebi-core +if [ ! -f /usr/bin/gdebi ]; then + sudo apt-get install -y gdebi-core +fi +if [ ! -f /usr/bin/mk-build-deps ]; then + sudo apt-get install -y devscripts +fi +if [ ! -f /usr/bin/equivs ]; then + sudo apt-get install -y equivs +fi + if [ "$VERSION_ID" = "14.04" ] || [ "$DISTRIBUTION" = "Debian" ]; then if [ ! -f build/antlr3_*.deb ]; then rm -rf build/antlr3-3.5.2 @@ -110,32 +119,6 @@ if [ "$DISTRIBUTION" = "Debian" ] && [ "$VERSION_ID" = "8" ]; then fi fi -if [ "$VERSION_ID" = "14.04" ]; then - sudo gdebi -n build/antlr3_*.deb - sudo gdebi -n build/thrift-compiler_*.deb -elif [ "$DISTRIBUTION" = "Debian" ]; then - sudo gdebi -n build/antlr3_*.deb -fi -sudo gdebi -n build/antlr3-c++-dev_*.deb -sudo gdebi -n build/libthrift0_*.deb -sudo gdebi -n build/libthrift-dev_*.deb -if [ "$DISTRIBUTION" = "Debian" ] && [ "$VERSION_ID" = "8" ]; then - sudo gdebi -n build/gcc-5-base_*.deb - sudo gdebi -n build/libatomic1_*.deb - sudo gdebi -n build/libcilkrts5_*.deb - sudo gdebi -n build/libgcc1_*.deb - sudo gdebi -n build/libgomp1_*.deb - sudo gdebi -n build/libitm1_*.deb - sudo gdebi -n build/liblsan0_*.deb - sudo gdebi -n build/libstdc++6_*.deb - sudo gdebi -n build/libtsan0_*.deb - sudo gdebi -n build/libubsan0_*.deb - sudo gdebi -n build/libasan2_*.deb - sudo gdebi -n build/libcc1-0_*.deb - sudo gdebi -n build/libmpx0_*.deb - sudo gdebi -n build/libgcc-5-dev_*.deb - sudo gdebi -n build/libstdc++-5-dev_*.deb - sudo gdebi -n build/cpp-5_*.deb - sudo gdebi -n build/gcc-5_*.deb - sudo gdebi -n build/g++-5_*.deb -fi +rm -rf /var/tmp/pbuilder +mkdir /var/tmp/pbuilder +cp -v build/*.deb /var/tmp/pbuilder/ diff --git a/dist/debian/dep/pbuilder_install_deps.sh b/dist/debian/dep/pbuilder_install_deps.sh new file mode 100755 index 0000000000..eb9d6b7bbf --- /dev/null +++ b/dist/debian/dep/pbuilder_install_deps.sh @@ -0,0 +1,38 @@ +#!/bin/bash -e + + sudo apt update +if [ ! -f /usr/bin/gdebi ]; then + sudo apt install -y gdebi-core +fi +if [ ! -f /usr/bin/lsb_release ]; then + sudo apt install -y lsb-release +fi + +CODENAME=`lsb_release -c|awk '{print $2}'` + +sudo gdebi -n /var/tmp/pbuilder/antlr3-c++-dev_*.deb +sudo gdebi -n /var/tmp/pbuilder/libthrift0_*.deb +sudo gdebi -n /var/tmp/pbuilder/libthrift-dev_*.deb +if [ "$CODENAME" = "trusty" ] || [ "$CODENAME" = "jessie" ]; then + sudo gdebi -n /var/tmp/pbuilder/antlr3_*.deb +fi +if [ "$CODENAME" = "jessie" ]; then + sudo gdebi -n /var/tmp/pbuilder/gcc-5-base_*.deb + sudo gdebi -n /var/tmp/pbuilder/libatomic1_*.deb + sudo gdebi -n /var/tmp/pbuilder/libcilkrts5_*.deb + sudo gdebi -n /var/tmp/pbuilder/libgcc1_*.deb + sudo gdebi -n /var/tmp/pbuilder/libgomp1_*.deb + sudo gdebi -n /var/tmp/pbuilder/libitm1_*.deb + sudo gdebi -n /var/tmp/pbuilder/liblsan0_*.deb + sudo gdebi -n /var/tmp/pbuilder/libstdc++6_*.deb + sudo gdebi -n /var/tmp/pbuilder/libtsan0_*.deb + sudo gdebi -n /var/tmp/pbuilder/libubsan0_*.deb + sudo gdebi -n /var/tmp/pbuilder/libasan2_*.deb + sudo gdebi -n /var/tmp/pbuilder/libcc1-0_*.deb + sudo gdebi -n /var/tmp/pbuilder/libmpx0_*.deb + sudo gdebi -n /var/tmp/pbuilder/libgcc-5-dev_*.deb + sudo gdebi -n /var/tmp/pbuilder/libstdc++-5-dev_*.deb + sudo gdebi -n /var/tmp/pbuilder/cpp-5_*.deb + sudo gdebi -n /var/tmp/pbuilder/gcc-5_*.deb + sudo gdebi -n /var/tmp/pbuilder/g++-5_*.deb +fi diff --git a/dist/debian/pbuilderrc b/dist/debian/pbuilderrc new file mode 100644 index 0000000000..e1ef7ed1e4 --- /dev/null +++ b/dist/debian/pbuilderrc @@ -0,0 +1,40 @@ +USENETWORK=yes +BUILD_HOME=/tmp +BASETGZ="/var/cache/pbuilder/scylla-server-$DIST.tgz" +DISTRIBUTION="$DIST" +BUILDRESULT="/var/cache/pbuilder/scylla-server-$DIST/result/" +APTCACHE="/var/cache/pbuilder/scylla-server-$DIST/aptcache/" +ALLOWUNTRUSTED=yes +if [ $REBUILD -eq 1 ]; then + BINDMOUNTS="/var/tmp/pbuilder" +fi + +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://archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse|deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main|deb http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu trusty main" + if [ $REBUILD -eq 0 ]; then + OTHERMIRROR="$OTHERMIRROR|deb [arch=amd64] http://downloads.scylladb.com/deb/3rdparty/trusty trusty scylladb/multiverse" + fi + elif [ "$DIST" = "xenial" ]; then + OTHERMIRROR="deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse" + if [ $REBUILD -eq 0 ]; then + OTHERMIRROR="$OTHERMIRROR|deb [arch=amd64] http://downloads.scylladb.com/deb/3rdparty/xenial xenial scylladb/multiverse" + fi + else + echo "Unknown distribution: $DIST" + exit 1 + fi +elif [ "$DIST" = "jessie" ]; then + MIRRORSITE="http://deb.debian.org/debian/" + COMPONENTS="main contrib non-free" + DEBOOTSTRAPOPTS="--keyring=/usr/share/keyrings/debian-archive-keyring.gpg" + if [ $REBUILD -eq 0 ]; then + OTHERMIRROR="deb [arch=amd64] http://downloads.scylladb.com/deb/3rdparty/jessie jessie scylladb/non-free" + fi +else + echo "Unknown distribution: $DIST" + exit 1 +fi