74fa1a40ca
We found on some Debian environment Ubuntu .deb build fails with gpg error because lack of Ubuntu GPG key, so we need to install it before start pbuilder. Same as on Ubuntu, it needs to install Debian GPG key. See scylladb/scylla#3823 Signed-off-by: Takuya ASADA <syuu@scylladb.com> Message-Id: <20181008110724.18335-1-syuu@scylladb.com>
163 lines
4.9 KiB
Bash
Executable File
163 lines
4.9 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
PRODUCT=scylla
|
|
|
|
. /etc/os-release
|
|
print_usage() {
|
|
echo "build_deb.sh -target <codename>"
|
|
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 ]
|
|
}
|
|
is_debian() {
|
|
case "$1" in
|
|
jessie|stretch) return 0;;
|
|
*) return 1;;
|
|
esac
|
|
}
|
|
is_ubuntu() {
|
|
case "$1" in
|
|
trusty|xenial|bionic) return 0;;
|
|
*) return 1;;
|
|
esac
|
|
}
|
|
|
|
|
|
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
|
|
sudo rm -rf debian build
|
|
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
|
|
sudo yum install -y git
|
|
fi
|
|
if [ ! -f /usr/bin/git ]; then
|
|
pkg_install git
|
|
fi
|
|
if [ ! -f /usr/bin/python ]; then
|
|
pkg_install python
|
|
fi
|
|
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 [ ! -f /usr/bin/pystache ]; then
|
|
if is_redhat_variant; then
|
|
sudo yum install -y /usr/bin/pystache
|
|
elif is_debian_variant; then
|
|
sudo apt-get install -y python-pystache
|
|
fi
|
|
fi
|
|
|
|
if [ "$ID" = "ubuntu" ] && [ ! -f /usr/share/keyrings/debian-archive-keyring.gpg ]; then
|
|
sudo apt-get install -y debian-archive-keyring
|
|
fi
|
|
if [ "$ID" = "debian" ] && [ ! -f /usr/share/keyrings/ubuntu-archive-keyring.gpg ]; then
|
|
sudo apt-get install -y ubuntu-archive-keyring
|
|
fi
|
|
|
|
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)
|
|
SCYLLA_VERSION=$(cat build/SCYLLA-VERSION-FILE | sed 's/\.rc/~rc/')
|
|
SCYLLA_RELEASE=$(cat build/SCYLLA-RELEASE-FILE)
|
|
echo $VERSION > version
|
|
./scripts/git-archive-all --extra version --force-submodules --prefix $PRODUCT-jmx ../$PRODUCT-jmx_$SCYLLA_VERSION-$SCYLLA_RELEASE.orig.tar.gz
|
|
|
|
cp -a dist/debian/debian debian
|
|
if [ "$PRODUCT" != "scylla" ]; then
|
|
for i in debian/scylla-*;do
|
|
mv $i ${i/scylla-/$PRODUCT-}
|
|
done
|
|
fi
|
|
if is_debian $TARGET; then
|
|
REVISION="1~$TARGET"
|
|
elif is_ubuntu $TARGET; then
|
|
REVISION="0ubuntu1~$TARGET"
|
|
else
|
|
echo "Unknown distribution: $TARGET"
|
|
fi
|
|
|
|
MUSTACHE_DIST="\"debian\": true, \"$TARGET\": true, \"product\": \"$PRODUCT\", \"$PRODUCT\": true"
|
|
pystache dist/debian/changelog.mustache "{ $MUSTACHE_DIST, \"version\": \"$SCYLLA_VERSION\", \"release\": \"$SCYLLA_RELEASE\", \"revision\": \"$REVISION\", \"codename\": \"$TARGET\" }" > debian/changelog
|
|
pystache dist/debian/rules.mustache "{ $MUSTACHE_DIST }" > debian/rules
|
|
chmod a+rx debian/rules
|
|
pystache dist/debian/control.mustache "{ $MUSTACHE_DIST }" > debian/control
|
|
|
|
if [ "$TARGET" != "trusty" ]; then
|
|
pystache dist/common/systemd/scylla-jmx.service.mustache "{ $MUSTACHE_DIST }" > debian/scylla-jmx.service
|
|
fi
|
|
|
|
sudo rm -fv /var/cache/pbuilder/$PRODUCT-jmx-$TARGET.tgz
|
|
sudo PRODUCT=$PRODUCT DIST=$TARGET /usr/sbin/pbuilder clean --configfile ./dist/debian/pbuilderrc
|
|
sudo PRODUCT=$PRODUCT DIST=$TARGET /usr/sbin/pbuilder create --configfile ./dist/debian/pbuilderrc
|
|
sudo PRODUCT=$PRODUCT DIST=$TARGET /usr/sbin/pbuilder update --configfile ./dist/debian/pbuilderrc
|
|
if [ "$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 PRODUCT=$PRODUCT DIST=$TARGET /usr/sbin/pbuilder execute --configfile ./dist/debian/pbuilderrc build/jessie-pkginst.sh
|
|
elif [ "$TARGET" = "bionic" ]; then
|
|
echo "apt-get install -y ca-certificates-java openjdk-8-jdk-headless" > build/bionic-workaround.sh
|
|
echo "update-ca-certificates -f" >> build/bionic-workaround.sh
|
|
chmod a+rx build/bionic-workaround.sh
|
|
sudo PRODUCT=$PRODUCT DIST=$TARGET /usr/sbin/pbuilder execute --configfile ./dist/debian/pbuilderrc --save-after-exec build/bionic-workaround.sh
|
|
fi
|
|
sudo PRODUCT=$PRODUCT DIST=$TARGET pdebuild --configfile ./dist/debian/pbuilderrc --buildresult build/debs
|