316 lines
9.3 KiB
Bash
Executable File
316 lines
9.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Generate the deb package for ubuntu, or rpm package for centos, or tar.gz package for other linux os
|
|
|
|
set -e
|
|
#set -x
|
|
|
|
# release.sh -v [cluster | edge]
|
|
# -c [aarch32 | aarch64 | x64 | x86 | mips64 ...]
|
|
# -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
|
|
# -V [stable | beta]
|
|
# -l [full | lite]
|
|
# -s [static | dynamic]
|
|
# -d [taos | ...]
|
|
# -n [2.0.0.3]
|
|
# -m [2.0.0.0]
|
|
# -H [ false | true]
|
|
|
|
# set parameters by default value
|
|
verMode=edge # [cluster, edge]
|
|
verType=stable # [stable, beta]
|
|
cpuType=x64 # [aarch32 | aarch64 | x64 | x86 | mips64 ...]
|
|
osType=Linux # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...]
|
|
pagMode=full # [full | lite]
|
|
soMode=dynamic # [static | dynamic]
|
|
dbName=taos # [taos | ...]
|
|
allocator=glibc # [glibc | jemalloc]
|
|
verNumber=""
|
|
verNumberComp="2.0.0.0"
|
|
httpdBuild=false
|
|
|
|
while getopts "hv:V:c:o:l:s:d:a:n:m:H:" arg; do
|
|
case $arg in
|
|
v)
|
|
#echo "verMode=$OPTARG"
|
|
verMode=$(echo $OPTARG)
|
|
;;
|
|
V)
|
|
#echo "verType=$OPTARG"
|
|
verType=$(echo $OPTARG)
|
|
;;
|
|
c)
|
|
#echo "cpuType=$OPTARG"
|
|
cpuType=$(echo $OPTARG)
|
|
;;
|
|
l)
|
|
#echo "pagMode=$OPTARG"
|
|
pagMode=$(echo $OPTARG)
|
|
;;
|
|
s)
|
|
#echo "soMode=$OPTARG"
|
|
soMode=$(echo $OPTARG)
|
|
;;
|
|
d)
|
|
#echo "dbName=$OPTARG"
|
|
dbName=$(echo $OPTARG)
|
|
;;
|
|
a)
|
|
#echo "allocator=$OPTARG"
|
|
allocator=$(echo $OPTARG)
|
|
;;
|
|
n)
|
|
#echo "verNumber=$OPTARG"
|
|
verNumber=$(echo $OPTARG)
|
|
;;
|
|
m)
|
|
#echo "verNumberComp=$OPTARG"
|
|
verNumberComp=$(echo $OPTARG)
|
|
;;
|
|
o)
|
|
#echo "osType=$OPTARG"
|
|
osType=$(echo $OPTARG)
|
|
;;
|
|
H)
|
|
#echo "httpdBuild=$OPTARG"
|
|
httpdBuild=$(echo $OPTARG)
|
|
;;
|
|
h)
|
|
echo "Usage: $(basename $0) -v [cluster | edge] "
|
|
echo " -c [aarch32 | aarch64 | x64 | x86 | mips64 ...] "
|
|
echo " -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | Ningsi60 | Ningsi80 |...] "
|
|
echo " -V [stable | beta] "
|
|
echo " -l [full | lite] "
|
|
echo " -a [glibc | jemalloc] "
|
|
echo " -s [static | dynamic] "
|
|
echo " -d [taos | ...] "
|
|
echo " -n [version number] "
|
|
echo " -m [compatible version number] "
|
|
echo " -H [false | true] "
|
|
exit 0
|
|
;;
|
|
?) #unknow option
|
|
echo "unkonw argument"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo "verMode=${verMode} verType=${verType} cpuType=${cpuType} osType=${osType} pagMode=${pagMode} soMode=${soMode} dbName=${dbName} allocator=${allocator} verNumber=${verNumber} verNumberComp=${verNumberComp} httpdBuild=${httpdBuild}"
|
|
|
|
curr_dir=$(pwd)
|
|
|
|
if [ "$osType" == "Darwin" ]; then
|
|
script_dir=$(dirname $0)
|
|
cd ${script_dir}
|
|
script_dir="$(pwd)"
|
|
top_dir=${script_dir}/..
|
|
else
|
|
script_dir="$(dirname $(readlink -f $0))"
|
|
top_dir="$(readlink -f ${script_dir}/..)"
|
|
fi
|
|
|
|
csudo=""
|
|
if command -v sudo > /dev/null; then
|
|
csudo="sudo "
|
|
fi
|
|
|
|
function is_valid_version() {
|
|
[ -z $1 ] && return 1 || :
|
|
|
|
rx='^([0-9]+\.){3}(\*|[0-9]+)$'
|
|
if [[ $1 =~ $rx ]]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function vercomp() {
|
|
if [[ $1 == $2 ]]; then
|
|
echo 0
|
|
exit 0
|
|
fi
|
|
|
|
local IFS=.
|
|
local i ver1=($1) ver2=($2)
|
|
|
|
# fill empty fields in ver1 with zeros
|
|
for ((i = ${#ver1[@]}; i < ${#ver2[@]}; i++)); do
|
|
ver1[i]=0
|
|
done
|
|
|
|
for ((i = 0; i < ${#ver1[@]}; i++)); do
|
|
if [[ -z ${ver2[i]} ]]; then
|
|
# fill empty fields in ver2 with zeros
|
|
ver2[i]=0
|
|
fi
|
|
if ((10#${ver1[i]} > 10#${ver2[i]})); then
|
|
echo 1
|
|
exit 0
|
|
fi
|
|
if ((10#${ver1[i]} < 10#${ver2[i]})); then
|
|
echo 2
|
|
exit 0
|
|
fi
|
|
done
|
|
echo 0
|
|
}
|
|
|
|
# 1. check version information
|
|
if ( (! is_valid_version $verNumber) || (! is_valid_version $verNumberComp) || [[ "$(vercomp $verNumber $verNumberComp)" == '2' ]]); then
|
|
echo "please enter correct version"
|
|
exit 0
|
|
fi
|
|
|
|
echo "=======================new version number: ${verNumber}, compatible version: ${verNumberComp}======================================"
|
|
|
|
build_time=$(date +"%F %R")
|
|
|
|
# get commint id from git
|
|
gitinfo=$(git rev-parse --verify HEAD)
|
|
|
|
if [[ "$verMode" == "cluster" ]]; then
|
|
enterprise_dir="${top_dir}/../enterprise"
|
|
cd ${enterprise_dir}
|
|
gitinfoOfInternal=$(git rev-parse --verify HEAD)
|
|
else
|
|
gitinfoOfInternal=NULL
|
|
fi
|
|
|
|
cd "${curr_dir}"
|
|
|
|
# 2. cmake executable file
|
|
compile_dir="${top_dir}/debug"
|
|
if [ -d ${compile_dir} ]; then
|
|
${csudo}rm -rf ${compile_dir}
|
|
fi
|
|
|
|
if [ "$osType" != "Darwin" ]; then
|
|
${csudo}mkdir -p ${compile_dir}
|
|
else
|
|
mkdir -p ${compile_dir}
|
|
fi
|
|
cd ${compile_dir}
|
|
|
|
if [[ "$allocator" == "jemalloc" ]]; then
|
|
allocator_macro="-DJEMALLOC_ENABLED=true"
|
|
else
|
|
allocator_macro=""
|
|
fi
|
|
|
|
if [[ "$dbName" != "taos" ]]; then
|
|
source ${enterprise_dir}/packaging/oem/sed_$dbName.sh
|
|
replace_community_$dbName
|
|
fi
|
|
|
|
if [[ "$httpdBuild" == "true" ]]; then
|
|
BUILD_HTTP=true
|
|
else
|
|
BUILD_HTTP=false
|
|
fi
|
|
|
|
if [[ "$verMode" == "cluster" ]]; then
|
|
BUILD_HTTP=internal
|
|
fi
|
|
|
|
if [[ "$pagMode" == "full" ]]; then
|
|
BUILD_TOOLS=true
|
|
else
|
|
BUILD_TOOLS=false
|
|
fi
|
|
|
|
# check support cpu type
|
|
if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "mips64" ]]; then
|
|
if [ "$verMode" != "cluster" ]; then
|
|
# community-version compile
|
|
cmake ../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} -DPAGMODE=${pagMode} -DBUILD_HTTP=${BUILD_HTTP} -DBUILD_TOOLS=${BUILD_TOOLS} ${allocator_macro}
|
|
else
|
|
if [[ "$dbName" != "taos" ]]; then
|
|
replace_enterprise_$dbName
|
|
fi
|
|
cmake ../../ -DCPUTYPE=${cpuType} -DOSTYPE=${osType} -DSOMODE=${soMode} -DDBNAME=${dbName} -DVERTYPE=${verType} -DVERDATE="${build_time}" -DGITINFO=${gitinfo} -DGITINFOI=${gitinfoOfInternal} -DVERNUMBER=${verNumber} -DVERCOMPATIBLE=${verNumberComp} -DBUILD_HTTP=${BUILD_HTTP} -DBUILD_TOOLS=${BUILD_TOOLS} ${allocator_macro}
|
|
fi
|
|
else
|
|
echo "input cpuType=${cpuType} error!!!"
|
|
exit 1
|
|
fi
|
|
|
|
CORES=$(grep -c ^processor /proc/cpuinfo)
|
|
|
|
if [[ "$allocator" == "jemalloc" ]]; then
|
|
# jemalloc need compile first, so disable parallel build
|
|
make -j ${CORES} && ${csudo}make install
|
|
else
|
|
make -j ${CORES} && ${csudo}make install
|
|
fi
|
|
|
|
cd ${curr_dir}
|
|
|
|
# 3. Call the corresponding script for packaging
|
|
if [ "$osType" != "Darwin" ]; then
|
|
if [[ "$verMode" != "cluster" ]] && [[ "$pagMode" == "full" ]] && [[ "$cpuType" == "x64" ]] && [[ "$dbName" == "taos" ]]; then
|
|
ret='0'
|
|
command -v dpkg >/dev/null 2>&1 || { ret='1'; }
|
|
if [ "$ret" -eq 0 ]; then
|
|
echo "====do deb package for the ubuntu system===="
|
|
output_dir="${top_dir}/debs"
|
|
if [ -d ${output_dir} ]; then
|
|
${csudo}rm -rf ${output_dir}
|
|
fi
|
|
${csudo}mkdir -p ${output_dir}
|
|
cd ${script_dir}/deb
|
|
${csudo}./makedeb.sh ${compile_dir} ${output_dir} ${verNumber} ${cpuType} ${osType} ${verMode} ${verType}
|
|
|
|
if [[ "$pagMode" == "full" ]]; then
|
|
if [ -d ${top_dir}/tools/taos-tools/packaging/deb ]; then
|
|
cd ${top_dir}/tools/taos-tools/packaging/deb
|
|
[ -z "$taos_tools_ver" ] && taos_tools_ver="0.1.0"
|
|
|
|
taos_tools_ver=$(git describe --tags | sed -e 's/ver-//g' | awk -F '-' '{print $1}')
|
|
${csudo}./make-taos-tools-deb.sh ${top_dir} \
|
|
${compile_dir} ${output_dir} ${taos_tools_ver} ${cpuType} ${osType} ${verMode} ${verType}
|
|
fi
|
|
fi
|
|
else
|
|
echo "==========dpkg command not exist, so not release deb package!!!"
|
|
fi
|
|
ret='0'
|
|
command -v rpmbuild >/dev/null 2>&1 || { ret='1'; }
|
|
if [ "$ret" -eq 0 ]; then
|
|
echo "====do rpm package for the centos system===="
|
|
output_dir="${top_dir}/rpms"
|
|
if [ -d ${output_dir} ]; then
|
|
${csudo}rm -rf ${output_dir}
|
|
fi
|
|
${csudo}mkdir -p ${output_dir}
|
|
cd ${script_dir}/rpm
|
|
${csudo}./makerpm.sh ${compile_dir} ${output_dir} ${verNumber} ${cpuType} ${osType} ${verMode} ${verType}
|
|
|
|
if [[ "$pagMode" == "full" ]]; then
|
|
if [ -d ${top_dir}/tools/taos-tools/packaging/rpm ]; then
|
|
cd ${top_dir}/tools/taos-tools/packaging/rpm
|
|
[ -z "$taos_tools_ver" ] && taos_tools_ver="0.1.0"
|
|
|
|
taos_tools_ver=$(git describe --tags | sed -e 's/ver-//g' | awk -F '-' '{print $1}' | sed -e 's/-/_/g')
|
|
${csudo}./make-taos-tools-rpm.sh ${top_dir} \
|
|
${compile_dir} ${output_dir} ${taos_tools_ver} ${cpuType} ${osType} ${verMode} ${verType}
|
|
fi
|
|
fi
|
|
else
|
|
echo "==========rpmbuild command not exist, so not release rpm package!!!"
|
|
fi
|
|
fi
|
|
|
|
echo "====do tar.gz package for all systems===="
|
|
cd ${script_dir}/tools
|
|
|
|
${csudo}./makepkg.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${verNumberComp} ${dbName}
|
|
${csudo}./makeclient.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${dbName}
|
|
# ${csudo}./makearbi.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
|
|
|
|
else
|
|
# only make client for Darwin
|
|
cd ${script_dir}/tools
|
|
./makeclient.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${dbName}
|
|
fi
|