1 Star 0 Fork 16

周斌/openGauss-connector-python-psycopg2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
build.sh 8.71 KB
一键复制 编辑 原始数据 按行查看 历史
zhangminjie 提交于 2022-04-25 17:39 . 添加对asianux平台支持
#!/bin/bash
#######################################################################
# Copyright (c): 2020-2025, Huawei Tech. Co., Ltd.
# descript: Compile and pack python driver for openGauss
# 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=$(uname -p)
#get OS distributed 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"redflag" ]; then
dist_version="Asianux"
elif [ X"$kernel" = X"asianux" ]; then
dist_version="Asianux"
else
echo "We only support EulerOS, openEuler(aarch64), CentOS and Asianux platform."
echo "Kernel is $kernel"
exit 1
fi
#######################################################################
## print help information
#######################################################################
function print_help()
{
echo "Usage: $0 [OPTION]
-h|--help show help information.
-bd|--serverlib_dir the directory of sever binarylibs.
"
}
##default install version storage path
declare db_name_for_package='openGauss'
declare version_number='3.0.0'
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
;;
*)
echo "Internal Error: option processing error: $1" 1>&2
echo "please input right paramtenter, the following command may help you"
echo "./build.sh --help or ./build.sh -h"
exit 1
esac
done
#######################################################################
## declare all package name
#######################################################################
declare version_string="${db_name_for_package}-${version_number}"
declare package_pre_name="${version_string}-${dist_version}-${PLATFORM}"
declare python_package_name="${package_pre_name}-Python.${install_package_format}.gz"
declare BUILD_DIR="${LOCAL_DIR}/build"
declare MKGS_OK=0
SERVERLIBS_PATH="${serverlib_dir}"
PSYCOPG_VERSION=psycopg2-2.9
declare LOG_FILE="${LOCAL_DIR}/build_psycopg2.log"
declare ERR_MKGS_FAILED=1
echo "[makepython] $(date +%y-%m-%d' '%T): script dir : ${LOCAL_DIR}"
#######################################################################
# Print log.
#######################################################################
log()
{
echo "[Build psycopg2] $(date +%y-%m-%d' '%T): $@"
echo "[Build psycopg2] $(date +%y-%m-%d' '%T): $@" >> "$LOG_FILE" 2>&1
}
#######################################################################
# print log and exit.
#######################################################################
die()
{
log "$@"
echo "$@"
exit $ERR_MKGS_FAILED
}
# clean build python log
function clean_environment()
{
if [ -f "$LOG_FILE" ]; then
rm -rf "$LOG_FILE"
fi
if [ -d "${LOCAL_DIR}/build" ]; then
rm -rf ${LOCAL_DIR}/build
fi
echo "clean completely"
}
function check_python()
{
array=(python3 python2 python)
for py in ${array[@]}; do
${py} -c 'import setuptools' >> /dev/null 2>&1
if [ $? -eq 0 ]; then
log "choose python: $(which ${py})"
PYTHON=${py}
version=$(${py} --version 2>&1)
PYTHON_VERSION=python${version:7:1}
return 0
fi
done
die "the python in your current enviroment is invalid, please check again and install setuptools."
}
function change_gaussdb_version()
{
if [ ! -f setup.py ]; then
die "not found psycopg2 code in current working directory."
fi
src_text='(pgmajor, pgminor, pgpatch)'
dst_text='(9, 2, 4)'
sed -i "s/${src_text}/${dst_text}/g" setup.py
search_result=$(cat setup.py | grep "$src_text")
if [ "${search_result}"X != "X" ]; then
die "failed to replace PG_VERSION_NUM at setup.py."
fi
}
###############################################################
## copy the target to set path
###############################################################
function target_file_copy()
{
cd ${LOCAL_DIR}/build/lib*
mv psycopg2/_psycopg*.so psycopg2/_psycopg.so
mkdir -p lib
#copy libraries into lib
cd ./psycopg2
libs=$(ldd _psycopg.so | awk '{print $3}' | grep $GAUSSHOME/lib)
for lib in ${libs[@]}; do
cp $lib ../lib
done
cd ..
}
#######################################################################
# build and install component
#######################################################################
function build_python()
{
cd ${LOCAL_DIR}
# set GAUSSHOME enviroment variable with BUILD_OPTION
export GAUSSHOME=$SERVERLIBS_PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export PATH=${GAUSSHOME}/bin:${PATH}
echo "GAUSSHOME: ${GAUSSHOME}"
change_gaussdb_version
check_python
${PYTHON} ./setup.py build
if [ $? -ne 0 ]; then
die "failed to compile psycopg2."
fi
echo "End make python" >> "$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
}
#######################################################################
##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()
{
target_file_copy
cd ${BUILD_DIR}/lib*
select_package_command
echo "packaging python..."
$package_command "${python_package_name}" ./lib ./psycopg2 >>"$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
die "$package_command ${python_package_name} failed"
fi
mv ${python_package_name} ${BUILD_DIR}/
echo "install python tools is ${python_package_name} of ${BUILD_DIR} directory " >> "$LOG_FILE" 2>&1
echo "success!"
}
#############################################################
# main function
#############################################################
# 1. clean environment
echo "clean enviroment"
echo "[makedb] $(date +%y-%m-%d' '%T): remove ${BUILD_DIR}" >>"$LOG_FILE" 2>&1
clean_environment
# 2. build python
build_python
# 3. make python package
make_package
# 4. cp python package to output
mkdir ${LOCAL_DIR}/output
mv ${BUILD_DIR}/*.tar.gz ${LOCAL_DIR}/output/
echo "now, python driver package has finished!"
exit 0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/justbk/openGauss-connector-python-psycopg2.git
git@gitee.com:justbk/openGauss-connector-python-psycopg2.git
justbk
openGauss-connector-python-psycopg2
openGauss-connector-python-psycopg2
master

搜索帮助