mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
779151db80
Add check for git command and test for internet connectivity using bash /dev/tcp interface, instead of wget and curl which might not be available, thus reducing dependencies for this script.
181 lines
7.4 KiB
Bash
Executable file
181 lines
7.4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Build MariaDB .deb packages for test and release at mariadb.org
|
|
#
|
|
|
|
# Exit immediately on any error
|
|
set -e
|
|
|
|
# This file is invocated from Buildbot and Travis-CI to build deb packages.
|
|
# As both of those CI systems have many parallel jobs that include different
|
|
# parts of the test suite, we don't need to run the mysql-test-run at all when
|
|
# building the deb packages here.
|
|
export DEB_BUILD_OPTIONS="nocheck $DEB_BUILD_OPTIONS"
|
|
|
|
# Travis-CI optimizations
|
|
if [[ $TRAVIS ]]
|
|
then
|
|
# On Travis-CI, the log must stay under 4MB so make the build less verbose
|
|
sed -i -e '/Add support for verbose builds/,+2d' debian/rules
|
|
|
|
# Don't include test suite package on Travis-CI to make the build time shorter
|
|
sed '/Package: mariadb-test-data/,+28d' -i debian/control
|
|
sed '/Package: mariadb-test/,+36d' -i debian/control
|
|
|
|
# Don't build the test package at all to save time and disk space
|
|
sed 's|DINSTALL_MYSQLTESTDIR=share/mysql/mysql-test|DINSTALL_MYSQLTESTDIR=false|' -i debian/rules
|
|
|
|
# Also skip building RocksDB and TokuDB to save even more time and disk space
|
|
sed 's|-DDEB|-DPLUGIN_TOKUDB=NO -DPLUGIN_MROONGA=NO -DPLUGIN_ROCKSDB=NO -DPLUGIN_SPIDER=NO -DPLUGIN_OQGRAPH=NO -DPLUGIN_PERFSCHEMA=NO -DPLUGIN_SPHINX=NO -WITH_EMBEDDED_SERVER=OFF -DDEB|' -i debian/rules
|
|
fi
|
|
|
|
# Convert gcc version to numberical value. Format is Mmmpp where M is Major
|
|
# version, mm is minor version and p is patch.
|
|
# -dumpfullversion & -dumpversion to make it uniform across old and new (>=7)
|
|
GCCVERSION=$(gcc -dumpfullversion -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' \
|
|
-e 's/\.\([0-9]\)/0\1/g' \
|
|
-e 's/^[0-9]\{3,4\}$/&00/')
|
|
|
|
# Look up distro-version specific stuff
|
|
#
|
|
# Always keep the actual packaging as up-to-date as possible following the latest
|
|
# Debian policy and targeting Debian Sid. Then case-by-case run in autobake-deb.sh
|
|
# tests for backwards compatibility and strip away parts on older builders.
|
|
|
|
# If libcrack2 (>= 2.9.0) is not available (before Debian Jessie and Ubuntu Trusty)
|
|
# clean away the cracklib stanzas so the package can build without them.
|
|
if ! apt-cache madison libcrack2-dev | grep 'libcrack2-dev *| *2\.9' >/dev/null 2>&1
|
|
then
|
|
sed '/libcrack2-dev/d' -i debian/control
|
|
sed '/Package: mariadb-plugin-cracklib/,+9d' -i debian/control
|
|
fi
|
|
|
|
# If libpcre3-dev (>= 2:8.35-3.2~) is not available (before Debian Jessie or Ubuntu Wily)
|
|
# clean away the PCRE3 stanzas so the package can build without them.
|
|
# Update check when version 2:8.40 or newer is available.
|
|
if ! apt-cache madison libpcre3-dev | grep 'libpcre3-dev *| *2:8\.3[2-9]' >/dev/null 2>&1
|
|
then
|
|
sed '/libpcre3-dev/d' -i debian/control
|
|
fi
|
|
|
|
# If libsystemd-dev is not available (before Debian Jessie or Ubuntu Wily)
|
|
# clean away the systemd stanzas so the package can build without them.
|
|
if ! apt-cache madison libsystemd-dev | grep 'libsystemd-dev' >/dev/null 2>&1
|
|
then
|
|
sed '/dh-systemd/d' -i debian/control
|
|
sed '/libsystemd-dev/d' -i debian/control
|
|
sed 's/ --with systemd//' -i debian/rules
|
|
sed '/systemd/d' -i debian/rules
|
|
sed '/\.service/d' -i debian/rules
|
|
sed '/galera_new_cluster/d' -i debian/mariadb-server-10.3.install
|
|
sed '/galera_recovery/d' -i debian/mariadb-server-10.3.install
|
|
sed '/mariadb-service-convert/d' -i debian/mariadb-server-10.3.install
|
|
fi
|
|
|
|
# If libzstd-dev is not available (before Debian Stretch and Ubuntu Xenial)
|
|
# remove the dependency from server and rocksdb so it can build properly
|
|
if ! apt-cache madison libzstd-dev | grep 'libzstd-dev' >/dev/null 2>&1
|
|
then
|
|
sed '/libzstd-dev/d' -i debian/control
|
|
sed '/libzstd1/d' -i debian/control
|
|
fi
|
|
|
|
# The binaries should be fully hardened by default. However TokuDB compilation seems to fail on
|
|
# Debian Jessie and older and on Ubuntu Xenial and older with the following error message:
|
|
# /usr/bin/ld.bfd.real: /tmp/ccOIwjFo.ltrans0.ltrans.o: relocation R_X86_64_PC32 against symbol
|
|
# `toku_product_name_strings' can not be used when making a shared object; recompile with -fPIC
|
|
# Therefore we need to disable PIE on those releases using gcc as proxy for detection.
|
|
if [[ $GCCVERSION -lt 60000 ]]
|
|
then
|
|
sed 's/hardening=+all$/hardening=+all,-pie/' -i debian/rules
|
|
fi
|
|
|
|
# Don't build rocksdb package if gcc version is less than 4.8 or we are running on
|
|
# x86 32 bit.
|
|
if [[ $GCCVERSION -lt 40800 ]] || [[ $(arch) =~ i[346]86 ]] || [[ $TRAVIS ]]
|
|
then
|
|
sed '/Package: mariadb-plugin-rocksdb/,+14d' -i debian/control
|
|
fi
|
|
|
|
# AWS SDK requires c++11 -capable compiler.
|
|
# Minimal supported versions are g++ 4.8 and clang 3.3.
|
|
# AWS SDK also requires the build machine to have network access and git, so
|
|
# it cannot be part of the base version included in Linux distros, but a pure
|
|
# custom built plugin.
|
|
if [[ $GCCVERSION -gt 40800 ]] && [[ ! $TRAVIS ]] && [[ -x "$(command -v git)" ]] && $(timeout 3s bash -c 'cat </dev/tcp/github.com/22')
|
|
then
|
|
cat <<EOF >> debian/control
|
|
|
|
Package: mariadb-plugin-aws-key-management
|
|
Architecture: any
|
|
Breaks: mariadb-aws-key-management-10.1,
|
|
mariadb-aws-key-management-10.2
|
|
Replaces: mariadb-aws-key-management-10.1,
|
|
mariadb-aws-key-management-10.2
|
|
Depends: mariadb-server-10.3,
|
|
\${misc:Depends},
|
|
\${shlibs:Depends}
|
|
Description: Amazon Web Service Key Management Service Plugin for MariaDB
|
|
This encryption key management plugin gives an interface to the Amazon Web
|
|
Services Key Management Service for managing encryption keys used for MariaDB
|
|
data-at-rest encryption.
|
|
EOF
|
|
|
|
sed -i -e "/-DPLUGIN_AWS_KEY_MANAGEMENT=NO/d" debian/rules
|
|
fi
|
|
|
|
# Mroonga, TokuDB never built on Travis CI anyway, see build flags above
|
|
if [[ $TRAVIS ]]
|
|
then
|
|
sed -i -e "/Package: mariadb-plugin-tokudb/,+19d" debian/control
|
|
sed -i -e "/Package: mariadb-plugin-mroonga/,+17d" debian/control
|
|
sed -i -e "/Package: mariadb-plugin-spider/,+18d" debian/control
|
|
sed -i -e "/Package: mariadb-plugin-oqgraph/,+16d" debian/control
|
|
sed -i -e "/usr\/lib\/mysql\/plugin\/ha_sphinx.so/d" debian/mariadb-server-10.3.install
|
|
sed -i -e "/Package: libmariadbd-dev/,+19d" debian/control
|
|
fi
|
|
|
|
# Adjust changelog, add new version
|
|
echo "Incrementing changelog and starting build scripts"
|
|
|
|
# Find major.minor version
|
|
source ./VERSION
|
|
UPSTREAM="${MYSQL_VERSION_MAJOR}.${MYSQL_VERSION_MINOR}.${MYSQL_VERSION_PATCH}${MYSQL_VERSION_EXTRA}"
|
|
PATCHLEVEL="+maria"
|
|
LOGSTRING="MariaDB build"
|
|
CODENAME="$(lsb_release -sc)"
|
|
EPOCH="1:"
|
|
|
|
dch -b -D ${CODENAME} -v "${EPOCH}${UPSTREAM}${PATCHLEVEL}~${CODENAME}" "Automatic build with ${LOGSTRING}."
|
|
|
|
echo "Creating package version ${EPOCH}${UPSTREAM}${PATCHLEVEL}~${CODENAME} ... "
|
|
|
|
# On Travis CI, use -b to build binary only packages as there is no need to
|
|
# waste time on generating the source package.
|
|
if [[ $TRAVIS ]]
|
|
then
|
|
BUILDPACKAGE_FLAGS="-b"
|
|
fi
|
|
|
|
# Build the package
|
|
# Pass -I so that .git and other unnecessary temporary and source control files
|
|
# will be ignored by dpkg-source when creating the tar.gz source package.
|
|
fakeroot dpkg-buildpackage -us -uc -I $BUILDPACKAGE_FLAGS -j$(nproc)
|
|
|
|
# If the step above fails due to missing dependencies, you can manually run
|
|
# sudo mk-build-deps debian/control -r -i
|
|
|
|
# Don't log package contents on Travis-CI to save time and log size
|
|
if [[ ! $TRAVIS ]]
|
|
then
|
|
echo "List package contents ..."
|
|
cd ..
|
|
for package in `ls *.deb`
|
|
do
|
|
echo $package | cut -d '_' -f 1
|
|
dpkg-deb -c $package | awk '{print $1 " " $2 " " $6}' | sort -k 3
|
|
echo "------------------------------------------------"
|
|
done
|
|
fi
|
|
|
|
echo "Build complete"
|