295 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Do the real building work. This script is executed on build VM and
 | |
| # requires a working installation of CMake.
 | |
| 
 | |
| # Build in a temp directory so we don't pollute cwd
 | |
| tmpdir=$(mktemp -d)
 | |
| 
 | |
| cd $tmpdir
 | |
| 
 | |
| distro_id=`cat /etc/*-release | grep "^ID_LIKE=" | sed "s/ID=//"`
 | |
| 
 | |
| unset packager_type
 | |
| 
 | |
| if [[ ${distro_id} =~ "suse" ]]
 | |
| then
 | |
|    packager_type="zypper"
 | |
| fi
 | |
| 
 | |
| if [[ ${distro_id} =~ "rhel" ]]
 | |
| then
 | |
|    packager_type="yum"
 | |
| fi
 | |
| 
 | |
| if [[ ${distro_id} =~ "debian" ]]
 | |
| then
 | |
|    packager_type="apt"
 | |
| fi
 | |
| 
 | |
| if [[ ${packager_type} == "" ]]
 | |
| then
 | |
|     command -v apt-get
 | |
| 
 | |
|     if [ $? == 0 ]
 | |
|     then
 | |
|         packager_type="apt"
 | |
|     fi
 | |
| 
 | |
|     command -v yum
 | |
| 
 | |
|     if [ $? == 0 ]
 | |
|     then
 | |
|         packager_type="yum"
 | |
|     fi
 | |
| 
 | |
|     command -v zypper
 | |
| 
 | |
|     if [ $? == 0 ]
 | |
|     then
 | |
|         packager_type="zypper"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if [[ ${packager_type} == "" ]]
 | |
| then
 | |
|     echo "Can not determine package manager type, exiting"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if [[ ${packager_type} == "apt" ]]
 | |
| then
 | |
|   # DEB-based distro
 | |
|   install_libdir=/usr/lib
 | |
|   export DEBIAN_FRONTEND=noninteractive
 | |
|   sudo apt-get update
 | |
| 
 | |
|   sudo dpkg-reconfigure libc6
 | |
|   apt_cmd="sudo -E apt-get -q -o Dpkg::Options::=--force-confold \
 | |
|        -o Dpkg::Options::=--force-confdef \
 | |
|        -y --force-yes"
 | |
|   ${apt_cmd} install dpkg-dev git wget \
 | |
|        build-essential libssl-dev ncurses-dev bison flex \
 | |
|        perl libtool tcl tcl-dev uuid \
 | |
|        uuid-dev libsqlite3-dev liblzma-dev libpam0g-dev pkg-config \
 | |
|        libedit-dev libcurl4-openssl-dev
 | |
| 
 | |
|   # One of these will work, older systems use libsystemd-daemon-dev
 | |
|   ${apt_cmd} install libsystemd-dev || \
 | |
|       ${apt_cmd} install libsystemd-daemon-dev
 | |
| 
 | |
|    ## separate libgnutls installation process for Ubuntu Trusty
 | |
|   cat /etc/*release | grep -E "Trusty|wheezy"
 | |
|   if [ $? == 0 ]
 | |
|   then
 | |
|      ${apt_cmd} install libgnutls-dev libgcrypt11-dev
 | |
|   else
 | |
|      ${apt_cmd} install libgnutls30 libgnutls-dev
 | |
|      if [ $? != 0 ]
 | |
|      then
 | |
|          ${apt_cmd} install libgnutls28-dev
 | |
|      fi
 | |
|      ${apt_cmd} install libgcrypt20-dev
 | |
|      if [ $? != 0 ]
 | |
|      then
 | |
|          ${apt_cmd} install libgcrypt11-dev
 | |
|      fi
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if [[ ${packager_type} == "yum" ]]
 | |
| then
 | |
|     install_libdir=/usr/lib64
 | |
|     # YUM!
 | |
|     sudo yum clean all
 | |
|     sudo yum update -y
 | |
|     unset enable_power_tools
 | |
|     yum repolist all | grep PowerTools
 | |
|     if [ $? == 0 ]
 | |
|     then
 | |
|         enable_power_tools="--enablerepo=PowerTools"
 | |
|     fi
 | |
|     sudo yum install -y --nogpgcheck ${enable_power_tools} \
 | |
|          gcc gcc-c++ ncurses-devel bison glibc-devel \
 | |
|          libgcc perl make libtool openssl-devel libaio libaio-devel libedit-devel \
 | |
|          libedit-devel systemtap-sdt-devel rpm-sign wget \
 | |
|          gnupg flex rpmdevtools git wget tcl tcl-devel openssl libuuid-devel xz-devel \
 | |
|          sqlite sqlite-devel pkgconfig lua lua-devel rpm-build createrepo yum-utils \
 | |
|          gnutls-devel libgcrypt-devel pam-devel libcurl-devel
 | |
| 
 | |
|     # Attempt to install systemd-devel, doesn't work on CentOS 6
 | |
|     sudo yum install -y systemd-devel
 | |
| 
 | |
|     # Enable the devtoolkit to get a newer compiler
 | |
| 
 | |
|     # CentOS: install the centos-release-scl repo
 | |
|     # RHEL: enable the existing repo (seems to be rhui-REGION-rhel-server-rhscl on AWS)
 | |
|     sudo yum -y install centos-release-scl || \
 | |
|         sudo yum-config-manager --enable rhui-REGION-rhel-server-rhscl
 | |
| 
 | |
|     # Install newer compiler for CentOS 7 and 6
 | |
|     grep "release [67]" /etc/redhat-release
 | |
|     if [ $? -eq 0 ]
 | |
|     then
 | |
|         sudo yum -y install devtoolset-7-gcc-c++
 | |
|         sudo yum -y install devtoolset-7-libasan-devel
 | |
|         # Enable it by default
 | |
|         echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc
 | |
|     else
 | |
|         # CentOS 8 only needs ASAN
 | |
|         sudo yum -y install libasan-devel
 | |
|     fi
 | |
| 
 | |
|     grep "release 6" /etc/redhat-release
 | |
|     if [ $? -ne 0 ]
 | |
|     then
 | |
|         # EPEL is installed for GCOV report generation (lcov)
 | |
|         sudo yum -y install epel-release
 | |
|         sudo yum -y install lcov
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if [[ ${packager_type} == "zypper" ]]
 | |
| then
 | |
|     install_libdir=/usr/lib64
 | |
|     # We need zypper here
 | |
|     sudo zypper -n refresh
 | |
|     sudo zypper -n update
 | |
|     sudo zypper -n remove gettext-runtime-mini
 | |
|     sudo zypper -n install gcc gcc-c++ ncurses-devel bison glibc-devel libgcc_s1 perl \
 | |
|          make libtool libopenssl-devel libaio libaio-devel flex \
 | |
|          git wget tcl tcl-devel libuuid-devel \
 | |
|          xz-devel sqlite3 sqlite3-devel pkg-config lua lua-devel \
 | |
|          gnutls-devel libgcrypt-devel pam-devel systemd-devel libcurl-devel
 | |
|     sudo zypper -n install rpm-build
 | |
|     cat /etc/*-release | grep "SUSE Linux Enterprise Server 11"
 | |
| 
 | |
|     if [ $? != 0 ]
 | |
|     then
 | |
|       sudo zypper -n install libedit-devel
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| # Methods allow to compare software versions according to semantic versioning
 | |
| verlte() {
 | |
|     [  "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
 | |
| }
 | |
| 
 | |
| verlt() {
 | |
|     [ "$1" = "$2" ] && return 1 || verlte $1 $2
 | |
| }
 | |
| 
 | |
| # cmake
 | |
| cmake_vrs_cmd="cmake --version"
 | |
| cmake_version_ok=0
 | |
| cmake_version_required="3.16.0"
 | |
| if command -v ${cmake_vrs_cmd} &> /dev/null ; then
 | |
|   cmake_version=`${cmake_vrs_cmd} | grep "cmake version" | awk '{ print $3 }'`
 | |
|   if verlt $cmake_version $cmake_version_required ; then
 | |
|     echo "Found CMake ${cmake_version}, which is too old."
 | |
|   else
 | |
|     cmake_version_ok=1
 | |
|     echo "Found CMake ${cmake_version}, which is recent enough."
 | |
|   fi
 | |
| else
 | |
|   echo "CMake not found"
 | |
| fi
 | |
| 
 | |
| cmake_filename="cmake-3.16.8-Linux-x86_64.tar.gz"
 | |
| if [ $cmake_version_ok -eq 0 ] ; then
 | |
|   wget -q http://max-tst-01.mariadb.com/ci-repository/${cmake_filename} --no-check-certificate
 | |
|   if [ $? != 0 ] ; then
 | |
|     echo "CMake could not be downloaded from Maxscale build server, trying from cmake.org"
 | |
|     wget -q https://cmake.org/files/v3.16/${cmake_filename} --no-check-certificate
 | |
|   fi
 | |
|   sudo tar xzf ${cmake_filename} -C /usr/ --strip-components=1
 | |
|   cmake_version=`${cmake_vrs_cmd} | grep "cmake version" | awk '{ print $3 }'`
 | |
|   if verlt $cmake_version $cmake_version_required ; then
 | |
|     echo "CMake installation failed"
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # RabbitMQ C client
 | |
| mkdir rabbit
 | |
| cd rabbit
 | |
| git clone https://github.com/alanxz/rabbitmq-c.git
 | |
| 
 | |
| if [ $? != 0 ]
 | |
| then
 | |
|     echo "Error cloning rabbitmq-c"
 | |
|     sudo rm -rf $tmpdir
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| cd rabbitmq-c
 | |
| git checkout v0.7.1
 | |
| cmake .  -DCMAKE_C_FLAGS=-fPIC -DBUILD_SHARED_LIBS=N  -DCMAKE_INSTALL_PREFIX=/usr
 | |
| sudo make install
 | |
| cd ../../
 | |
| 
 | |
| # TCL
 | |
| system_tcl_version=$(tclsh <<< 'puts [info patchlevel]')
 | |
| if verlt "$system_tcl_version" "8.6.5"
 | |
| then
 | |
|    mkdir tcl
 | |
|    cd tcl
 | |
|    wget -q --no-check-certificate http://prdownloads.sourceforge.net/tcl/tcl8.6.5-src.tar.gz
 | |
| 
 | |
|    if [ $? != 0 ]
 | |
|    then
 | |
|        echo "Error getting tcl"
 | |
|        exit 1
 | |
|    fi
 | |
| 
 | |
|    tar xzf tcl8.6.5-src.tar.gz
 | |
|    cd tcl8.6.5/unix
 | |
|    ./configure
 | |
|    sudo make install
 | |
|    cd ../../..
 | |
| fi
 | |
| 
 | |
| # Jansson
 | |
| git clone https://github.com/akheron/jansson.git
 | |
| if [ $? != 0 ]
 | |
| then
 | |
|     echo "Error cloning jansson"
 | |
|     sudo rm -rf $tmpdir
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| cd jansson
 | |
| git checkout v2.9
 | |
| mkdir build
 | |
| cd build
 | |
| cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_FLAGS=-fPIC -DJANSSON_INSTALL_LIB_DIR=$install_libdir
 | |
| make
 | |
| sudo make install
 | |
| cd ../../
 | |
| 
 | |
| # Avro C API
 | |
| wget -q -r -l1 -nH --cut-dirs=2 --no-parent -A.tar.gz --no-directories https://downloads.apache.org/avro/stable/c/
 | |
| if [ $? != 0 ]
 | |
| then
 | |
|     echo "Error getting avro-c"
 | |
|     sudo rm -rf $tmpdir
 | |
|     exit 1
 | |
| fi
 | |
| avro_filename=`ls -1 avro*.tar.gz`
 | |
| avro_dir=`echo "$avro_filename" | sed "s/.tar.gz//"`
 | |
| tar -axf $avro_filename
 | |
| mkdir $avro_dir/build
 | |
| pushd $avro_dir/build
 | |
| # Make sure the library isn't linked against snappy
 | |
| sed -i 's/find_package(Snappy)//' ../lang/c/CMakeLists.txt
 | |
| cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC
 | |
| make
 | |
| sudo make install
 | |
| popd
 | |
| 
 | |
| wget --quiet https://nodejs.org/dist/v6.17.1/node-v6.17.1-linux-x64.tar.xz
 | |
| tar -axf node-v6.17.1-linux-x64.tar.xz
 | |
| sudo cp -t /usr -r node-v6.17.1-linux-x64/*
 | |
| 
 | |
| sudo rm -rf $tmpdir
 | 
