308 lines
9.5 KiB
Bash
Executable File
308 lines
9.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#######################################################################
|
|
# Copyright (c): 2020-2025, Huawei Tech. Co., Ltd.
|
|
# descript: Compile and pack MPPDB
|
|
# Return 0 means OK.
|
|
# Return 1 means failed.
|
|
# version: 2.0
|
|
# date: 2020-08-09
|
|
#######################################################################
|
|
declare install_package_format='tar'
|
|
declare serverlib_dir='None'
|
|
|
|
#detect platform information.
|
|
PLATFORM=32
|
|
bit=$(getconf LONG_BIT)
|
|
if [ "$bit" -eq 64 ]; then
|
|
PLATFORM=64
|
|
fi
|
|
|
|
#get OS distributed version.
|
|
kernel=""
|
|
version=""
|
|
if [ -f "/etc/euleros-release" ]; then
|
|
kernel=$(cat /etc/euleros-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
|
version=$(cat /etc/euleros-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
|
elif [ -f "/etc/openEuler-release" ]; then
|
|
kernel=$(cat /etc/openEuler-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
|
version=$(cat /etc/openEuler-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
|
elif [ -f "/etc/centos-release" ]; then
|
|
kernel=$(cat /etc/centos-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
|
version=$(cat /etc/centos-release | awk -F '(' '{print $2}'| awk -F ')' '{print $1}' | tr A-Z a-z)
|
|
elif [ -f "/etc/kylin-release" ]; then
|
|
kernel=$(cat /etc/kylin-release | awk -F ' ' '{print $1}' | tr A-Z a-z)
|
|
version=$(cat /etc/kylin-release | awk '{print $6}' | tr A-Z a-z)
|
|
else
|
|
kernel=$(lsb_release -d | awk -F ' ' '{print $2}'| tr A-Z a-z)
|
|
version=$(lsb_release -r | awk -F ' ' '{print $2}')
|
|
fi
|
|
|
|
if [ X"$kernel" == X"euleros" ]; then
|
|
dist_version="EULER"
|
|
elif [ X"$kernel" == X"centos" ]; then
|
|
dist_version="CENTOS"
|
|
elif [ X"$kernel" == X"openeuler" ]; then
|
|
dist_version="OPENEULER"
|
|
elif [ X"$kernel" == X"kylin" ]; then
|
|
dist_version="KYLIN"
|
|
elif [ X"$kernel" == X"suse" ]; then
|
|
dist_version="SUSE"
|
|
elif [ X"$kernel" = X"redflag" ]; then
|
|
dist_version="Asianux"
|
|
elif [ X"$kernel" = X"asianux" ]; then
|
|
dist_version="Asianux"
|
|
else
|
|
echo "We only support EulerOS, OPENEULER(aarch64) SUSE, CentOS and Asianux platform."
|
|
echo "Kernel is $kernel"
|
|
exit 1
|
|
fi
|
|
|
|
##default install version storage path
|
|
declare mppdb_version='GaussDB Kernel'
|
|
declare mppdb_name_for_package="$(echo ${mppdb_version} | sed 's/ /-/g')"
|
|
declare version_number='V500R002C10'
|
|
#######################################################################
|
|
## print help information
|
|
#######################################################################
|
|
function print_help()
|
|
{
|
|
echo "Usage: $0 [OPTION]
|
|
-h|--help show help information.
|
|
-bd|--serverlib_dir the directory of sever binarylibs.
|
|
"
|
|
}
|
|
|
|
if [ $# = 0 ] ; then
|
|
echo "missing option"
|
|
print_help
|
|
exit 1
|
|
fi
|
|
|
|
LOCAL_PATH=${0}
|
|
FIRST_CHAR=$(expr substr "$LOCAL_PATH" 1 1)
|
|
if [ "$FIRST_CHAR" = "/" ]; then
|
|
LOCAL_PATH=${0}
|
|
else
|
|
LOCAL_PATH="$(pwd)/${LOCAL_PATH}"
|
|
fi
|
|
|
|
LOCAL_DIR=$(dirname "${LOCAL_PATH}")
|
|
#########################################################################
|
|
##read command line paramenters
|
|
#######################################################################
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
print_help
|
|
exit 1
|
|
;;
|
|
-bd|--serverlib_dir)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given binarylib directory values"
|
|
exit 1
|
|
fi
|
|
serverlib_dir=$2
|
|
shift 2
|
|
;;
|
|
-ud|--unixodbc_dir)
|
|
if [ "$2"X = X ]; then
|
|
echo "no given unixodbc directory values"
|
|
exit 1
|
|
fi
|
|
UNIX_ODBC=$2
|
|
shift 2
|
|
;;
|
|
|
|
*)
|
|
echo "Internal Error: option processing error: $1" 1>&2
|
|
echo "please input right paramtenter, the following command may help you"
|
|
echo "./mpp_package.sh --help or ./mpp_package.sh -h"
|
|
exit 1
|
|
esac
|
|
done
|
|
|
|
#######################################################################
|
|
## declare all package name
|
|
#######################################################################
|
|
declare version_string="${mppdb_name_for_package}-${version_number}"
|
|
declare package_pre_name="${version_string}-${dist_version}-${PLATFORM}bit"
|
|
declare odbc_package_name="${package_pre_name}-Odbc.${install_package_format}.gz"
|
|
declare windows_odbc_package_name="${version_string}-Windows-Odbc.tar.gz"
|
|
|
|
echo "[makeodbc] $(date +%y-%m-%d' '%T): script dir : ${LOCAL_DIR}"
|
|
declare LOG_FILE="${LOCAL_DIR}/build.log"
|
|
declare BUILD_DIR="${LOCAL_DIR}/tmp_odbc"
|
|
declare ODBC_INSTALL_DIR="${BUILD_DIR}/odbc"
|
|
declare ERR_MKGS_FAILED=1
|
|
declare MKGS_OK=0
|
|
|
|
if [ "$UNIX_ODBC"X = X ]; then
|
|
UNIX_ODBC="${LOCAL_DIR}/third_party/unixodbc/install_comm/unixODBC-2.3.9"
|
|
fi
|
|
|
|
SERVERLIBS_PATH="${serverlib_dir}"
|
|
|
|
###################################
|
|
# build parameter about enable-llt
|
|
##################################
|
|
COMPLIE_TYPE="comm"
|
|
echo "[makeodbc] $(date +%y-%m-%d' '%T): Work root dir : ${LOCAL_DIR}"
|
|
#######################################################################
|
|
# Print log.
|
|
#######################################################################
|
|
log()
|
|
{
|
|
echo "[Build unixODBC] $(date +%y-%m-%d' '%T): $@"
|
|
echo "[Build unixODBC] $(date +%y-%m-%d' '%T): $@" >> "$LOG_FILE" 2>&1
|
|
}
|
|
|
|
#######################################################################
|
|
# print log and exit.
|
|
#######################################################################
|
|
die()
|
|
{
|
|
log "$@"
|
|
echo "$@"
|
|
exit $ERR_MKGS_FAILED
|
|
}
|
|
|
|
function clean_environment()
|
|
{
|
|
if [ -d "$BUILD_DIR" ]; then
|
|
rm -rf "$BUILD_DIR"
|
|
fi
|
|
|
|
if [ -f "$LOG_FILE" ]; then
|
|
rm -rf "$LOG_FILE"
|
|
fi
|
|
|
|
echo "clean completely"
|
|
}
|
|
|
|
#######################################################################
|
|
##install odbc
|
|
#######################################################################
|
|
function install_odbc()
|
|
{
|
|
cd ${LOCAL_DIR}
|
|
|
|
cd ${LOCAL_DIR}/third_party/unixodbc/
|
|
sh ./build_unixodbc.sh -m build >> "$LOG_FILE" 2>&1
|
|
cd ${LOCAL_DIR}
|
|
|
|
export GAUSSHOME=$SERVERLIBS_PATH
|
|
export LD_LIBRARY_PATH=$SERVERLIBS_PATH/lib:$LD_LIBRARY_PATH
|
|
|
|
if [ "$version_mode"x == "memcheck"x ]; then
|
|
export LIBS="-lrt -ldl -lm -lpthread -lasan"
|
|
fi
|
|
|
|
./configure CFLAGS='-fstack-protector-all -Wl,-z,relro,-z,now -Wl,-z,noexecstack -fPIC' --prefix=${ODBC_INSTALL_DIR} --with-libpq=${SERVERLIBS_PATH} --with-unixodbc=${UNIX_ODBC} >> "$LOG_FILE" 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
die "configure odbc failed."
|
|
fi
|
|
|
|
make -sj >> "$LOG_FILE" 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
die "make odbc failed."
|
|
fi
|
|
|
|
make install -sj >> "$LOG_FILE" 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
die "make install odbc failed."
|
|
fi
|
|
|
|
echo "End make odbc" >> "$LOG_FILE" 2>&1
|
|
}
|
|
|
|
declare package_command
|
|
#######################################################################
|
|
##select package command accroding to install_package_format
|
|
#######################################################################
|
|
function select_package_command()
|
|
{
|
|
case "$install_package_format" in
|
|
tar)
|
|
tar='tar'
|
|
option=' -zcvf'
|
|
package_command="$tar$option"
|
|
;;
|
|
rpm)
|
|
rpm='rpm'
|
|
option=' -i'
|
|
package_command="$rpm$option"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
###############################################################
|
|
## copy the target to set path
|
|
###############################################################
|
|
function target_file_copy()
|
|
{
|
|
rm -rf ${BUILD_DIR}/lib
|
|
mkdir ${BUILD_DIR}/lib
|
|
|
|
#copy libraries into lib
|
|
cp $SERVERLIBS_PATH/lib/libpq* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libssl* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libcrypto* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libgssapi_krb5_gauss* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libgssrpc_gauss* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libkrb5_gauss* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libkrb5support_gauss* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libk5crypto_gauss* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libconfig* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libpgport_tool* ${BUILD_DIR}/lib
|
|
cp $SERVERLIBS_PATH/lib/libcom_err_gauss* ${BUILD_DIR}/lib
|
|
|
|
cp $UNIX_ODBC/lib/libodb* ${BUILD_DIR}/lib
|
|
}
|
|
|
|
#######################################################################
|
|
##function make_package have tree actions
|
|
##1.copy target file into a newly created temporary directory temp
|
|
##2.package all file in the temp directory and renome to destination package_path
|
|
#######################################################################
|
|
function make_package()
|
|
{
|
|
cd ${BUILD_DIR}
|
|
|
|
target_file_copy
|
|
select_package_command
|
|
|
|
echo "packaging odbc..."
|
|
$package_command "${odbc_package_name}" ./lib ./odbc >>"$LOG_FILE" 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
die "$package_command ${odbc_package_name} failed"
|
|
fi
|
|
|
|
mv ${odbc_package_name} ${BUILD_DIR}/
|
|
|
|
echo "install odbc tools is ${odbc_package_name} of ${BUILD_DIR} directory " >> "$LOG_FILE" 2>&1
|
|
echo "success!"
|
|
}
|
|
|
|
#############################################################
|
|
# main function
|
|
#############################################################
|
|
|
|
# 1. build odbc
|
|
install_odbc
|
|
|
|
# 2. make odbc package
|
|
make_package
|
|
|
|
# 3. cp odbc package to output
|
|
mkdir ${LOCAL_DIR}/output
|
|
mv ${BUILD_DIR}/*.tar.gz ${LOCAL_DIR}/output/
|
|
|
|
# 4. clean environment
|
|
echo "clean enviroment"
|
|
echo "[makemppdb] $(date +%y-%m-%d' '%T): remove ${BUILD_DIR}" >>"$LOG_FILE" 2>&1
|
|
clean_environment
|
|
|
|
echo "now, odbc package has finished!"
|
|
|
|
exit 0
|