install.sh 30.6 KB
Newer Older
H
hzcheng 已提交
1 2
#!/bin/bash
#
L
lihui 已提交
3
# This file is used to install database on linux systems. The operating system
H
hzcheng 已提交
4 5 6 7 8
# is required to use systemd to manage services at boot

set -e
#set -x

L
lihui 已提交
9 10
verMode=edge
pagMode=full
S
slguan 已提交
11

H
Hui Li 已提交
12 13 14
iplist=""
serverFqdn=""

H
hzcheng 已提交
15
# -----------------------Variables definition---------------------
F
Frozen 已提交
16
script_dir=$(dirname $(readlink -f "$0"))
H
hzcheng 已提交
17
# Dynamic directory
18

19 20 21 22 23 24 25 26 27 28 29 30
clientName="taos"
serverName="taosd"
configFile="taos.cfg"
productName="TDengine"
emailName="taosdata.com"
uninstallScript="rmtaos"
historyFile="taos_history"
tarName="taos.tar.gz"
dataDir="/var/lib/taos"
logDir="/var/log/taos"
configDir="/etc/taos"
installDir="/usr/local/taos"
31 32 33 34
adapterName="taosadapter"
benchmarkName="taosBenchmark"
dumpName="taosdump"
demoName="taosdemo"
35 36 37 38

data_dir=${dataDir}
log_dir=${logDir}
cfg_install_dir=${configDir}
H
hzcheng 已提交
39 40 41

bin_link_dir="/usr/bin"
lib_link_dir="/usr/lib"
H
Hui Li 已提交
42
lib64_link_dir="/usr/lib64"
H
hzcheng 已提交
43 44 45
inc_link_dir="/usr/include"

#install main path
46
install_main_dir=${installDir}
H
hzcheng 已提交
47
# old bin dir
48
bin_dir="${installDir}/bin"
S
slguan 已提交
49

H
hzcheng 已提交
50
service_config_dir="/etc/systemd/system"
S
slguan 已提交
51 52
nginx_port=6060
nginx_dir="/usr/local/nginxd"
H
hzcheng 已提交
53 54 55 56 57 58 59 60

# Color setting
RED='\033[0;31m'
GREEN='\033[1;32m'
GREEN_DARK='\033[0;32m'
GREEN_UNDERLINE='\033[4;32m'
NC='\033[0m'

P
plum-lihui 已提交
61
csudo=""
62 63
if command -v sudo >/dev/null; then
  csudo="sudo "
P
plum-lihui 已提交
64
fi
H
hzcheng 已提交
65

S
slguan 已提交
66
update_flag=0
67
prompt_force=0
S
slguan 已提交
68

L
lihui 已提交
69
initd_mod=0
P
plum-lihui 已提交
70
service_mod=2
71 72 73 74 75 76 77 78 79 80 81 82
if pidof systemd &>/dev/null; then
  service_mod=0
elif $(which service &>/dev/null); then
  service_mod=1
  service_config_dir="/etc/init.d"
  if $(which chkconfig &>/dev/null); then
    initd_mod=1
  elif $(which insserv &>/dev/null); then
    initd_mod=2
  elif $(which update-rc.d &>/dev/null); then
    initd_mod=3
  else
P
plum-lihui 已提交
83
    service_mod=2
84 85 86
  fi
else
  service_mod=2
H
hzcheng 已提交
87 88
fi

L
lihui 已提交
89 90 91
# get the operating system type for using the corresponding init file
# ubuntu/debian(deb), centos/fedora(rpm), others: opensuse, redhat, ..., no verification
#osinfo=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
H
Hui Li 已提交
92
if [[ -e /etc/os-release ]]; then
93
  osinfo=$(cat /etc/os-release | grep "NAME" | cut -d '"' -f2) || :
H
Hui Li 已提交
94 95 96
else
  osinfo=""
fi
L
lihui 已提交
97 98
#echo "osinfo: ${osinfo}"
os_type=0
99 100
if echo $osinfo | grep -qwi "ubuntu"; then
  #  echo "This is ubuntu system"
L
lihui 已提交
101
  os_type=1
102 103
elif echo $osinfo | grep -qwi "debian"; then
  #  echo "This is debian system"
L
lihui 已提交
104
  os_type=1
105 106
elif echo $osinfo | grep -qwi "Kylin"; then
  #  echo "This is Kylin system"
L
lihui 已提交
107
  os_type=1
108 109 110
elif echo $osinfo | grep -qwi "Red"; then
  #  echo "This is Red Hat system"
  os_type=1
111 112
elif echo $osinfo | grep -qwi "centos"; then
  #  echo "This is centos system"
L
lihui 已提交
113
  os_type=2
114 115
elif echo $osinfo | grep -qwi "fedora"; then
  #  echo "This is fedora system"
L
lihui 已提交
116
  os_type=2
117 118
elif echo $osinfo | grep -qwi "Linx"; then
  #  echo "This is Linx system"
haoranc's avatar
haoranc 已提交
119 120 121 122
  os_type=1
  service_mod=0
  initd_mod=0
  service_config_dir="/etc/systemd/system"
L
lihui 已提交
123
else
H
Hui Li 已提交
124
  echo " osinfo: ${osinfo}"
125
  echo " This is an officially unverified linux system,"
H
Hui Li 已提交
126
  echo " if there are any problems with the installation and operation, "
127
  echo " please feel free to contact ${emailName} for support."
L
lihui 已提交
128
  os_type=1
L
lihui 已提交
129 130
fi

H
Hui Li 已提交
131
# =============================  get input parameters =================================================
132 133 134

# install.sh -v [server | client]  -e [yes | no] -i [systemd | service | ...]

H
Hui Li 已提交
135
# set parameters by default value
136 137 138
interactiveFqdn=yes # [yes | no]
verType=server      # [server | client]
initType=systemd    # [systemd | service | ...]
H
Hui Li 已提交
139

140
while getopts "hv:e:i:" arg; do
H
Hui Li 已提交
141
  case $arg in
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
  e)
    #echo "interactiveFqdn=$OPTARG"
    interactiveFqdn=$(echo $OPTARG)
    ;;
  v)
    #echo "verType=$OPTARG"
    verType=$(echo $OPTARG)
    ;;
  i)
    #echo "initType=$OPTARG"
    initType=$(echo $OPTARG)
    ;;
  h)
    echo "Usage: $(basename $0) -v [server | client]  -e [yes | no]"
    exit 0
    ;;
  ?) #unknow option
    echo "unkonw argument"
    exit 1
    ;;
H
Hui Li 已提交
162 163 164
  esac
done

H
Hui Li 已提交
165
#echo "verType=${verType} interactiveFqdn=${interactiveFqdn}"
H
Hui Li 已提交
166

167 168
function kill_process() {
  pid=$(ps -ef | grep "$1" | grep -v "grep" | awk '{print $2}')
L
lihui 已提交
169
  if [ -n "$pid" ]; then
170
    ${csudo}kill -9 $pid || :
L
lihui 已提交
171
  fi
P
plum-lihui 已提交
172 173
}

H
hzcheng 已提交
174
function install_main_path() {
175 176 177 178 179
  #create install main dir and all sub dir
  ${csudo}rm -rf ${install_main_dir} || :
  ${csudo}mkdir -p ${install_main_dir}
  ${csudo}mkdir -p ${install_main_dir}/cfg
  ${csudo}mkdir -p ${install_main_dir}/bin
180
  #  ${csudo}mkdir -p ${install_main_dir}/connector
181 182 183
  ${csudo}mkdir -p ${install_main_dir}/driver
  ${csudo}mkdir -p ${install_main_dir}/examples
  ${csudo}mkdir -p ${install_main_dir}/include
184
  #  ${csudo}mkdir -p ${install_main_dir}/init.d
185 186 187
  if [ "$verMode" == "cluster" ]; then
    ${csudo}mkdir -p ${nginx_dir}
  fi
188

189 190 191
  if [[ -e ${script_dir}/email ]]; then
    ${csudo}cp ${script_dir}/email ${install_main_dir}/ || :
  fi
H
hzcheng 已提交
192 193 194
}

function install_bin() {
195 196 197
  # Remove links
  ${csudo}rm -f ${bin_link_dir}/${clientName} || :
  ${csudo}rm -f ${bin_link_dir}/${serverName} || :
198
  ${csudo}rm -f ${bin_link_dir}/${adapterName} || :
199 200 201
  ${csudo}rm -f ${bin_link_dir}/${uninstallScript} || :
  ${csudo}rm -f ${bin_link_dir}/tarbitrator || :
  ${csudo}rm -f ${bin_link_dir}/set_core || :
202
  ${csudo}rm -f ${bin_link_dir}/TDinsight.sh || :
203 204 205 206 207 208

  ${csudo}cp -r ${script_dir}/bin/* ${install_main_dir}/bin && ${csudo}chmod 0555 ${install_main_dir}/bin/*

  #Make link
  [ -x ${install_main_dir}/bin/${clientName} ] && ${csudo}ln -s ${install_main_dir}/bin/${clientName} ${bin_link_dir}/${clientName} || :
  [ -x ${install_main_dir}/bin/${serverName} ] && ${csudo}ln -s ${install_main_dir}/bin/${serverName} ${bin_link_dir}/${serverName} || :
209 210 211
  [ -x ${install_main_dir}/bin/${adapterName} ] && ${csudo}ln -s ${install_main_dir}/bin/${adapterName} ${bin_link_dir}/${adapterName} || :
  [ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -s ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${demoName} || :
  [ -x ${install_main_dir}/bin/${benchmarkName} ] && ${csudo}ln -s ${install_main_dir}/bin/${benchmarkName} ${bin_link_dir}/${benchmarkName} || :
Z
zyyang 已提交
212
#  [ -x ${install_main_dir}/bin/${dumpName} ] && ${csudo}ln -s ${install_main_dir}/bin/${dumpName} ${bin_link_dir}/${dumpName} || :
213
  [ -x ${install_main_dir}/bin/TDinsight.sh ] && ${csudo}ln -s ${install_main_dir}/bin/TDinsight.sh ${bin_link_dir}/TDinsight.sh || :
214 215 216 217 218 219 220 221 222
  [ -x ${install_main_dir}/bin/remove.sh ] && ${csudo}ln -s ${install_main_dir}/bin/remove.sh ${bin_link_dir}/${uninstallScript} || :
  [ -x ${install_main_dir}/bin/set_core.sh ] && ${csudo}ln -s ${install_main_dir}/bin/set_core.sh ${bin_link_dir}/set_core || :
  [ -x ${install_main_dir}/bin/tarbitrator ] && ${csudo}ln -s ${install_main_dir}/bin/tarbitrator ${bin_link_dir}/tarbitrator || :

  if [ "$verMode" == "cluster" ]; then
    ${csudo}cp -r ${script_dir}/nginxd/* ${nginx_dir} && ${csudo}chmod 0555 ${nginx_dir}/*
    ${csudo}mkdir -p ${nginx_dir}/logs
    ${csudo}chmod 777 ${nginx_dir}/sbin/nginx
  fi
H
hzcheng 已提交
223 224 225
}

function install_lib() {
226 227 228
  # Remove links
  ${csudo}rm -f ${lib_link_dir}/libtaos.* || :
  ${csudo}rm -f ${lib64_link_dir}/libtaos.* || :
229
  #${csudo}rm -rf ${v15_java_app_dir}              || :
230
  ${csudo}cp -rf ${script_dir}/driver/* ${install_main_dir}/driver && ${csudo}chmod 777 ${install_main_dir}/driver/*
231

232 233
  ${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib_link_dir}/libtaos.so.1
  ${csudo}ln -s ${lib_link_dir}/libtaos.so.1 ${lib_link_dir}/libtaos.so
234

235 236 237 238 239 240
  if [[ -d ${lib64_link_dir} && ! -e ${lib64_link_dir}/libtaos.so ]]; then
    ${csudo}ln -s ${install_main_dir}/driver/libtaos.* ${lib64_link_dir}/libtaos.so.1 || :
    ${csudo}ln -s ${lib64_link_dir}/libtaos.so.1 ${lib64_link_dir}/libtaos.so || :
  fi

  ${csudo}ldconfig
H
hzcheng 已提交
241 242
}

243
function install_avro() {
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
  if [ "$osType" != "Darwin" ]; then
    avro_dir=${script_dir}/avro
    if [ -f "${avro_dir}/lib/libavro.so.23.0.0" ] && [ -d /usr/local/$1 ]; then
      ${csudo}/usr/bin/install -c -d /usr/local/$1
      ${csudo}/usr/bin/install -c -m 755 ${avro_dir}/lib/libavro.so.23.0.0 /usr/local/$1
      ${csudo}ln -sf /usr/local/$1/libavro.so.23.0.0 /usr/local/$1/libavro.so.23
      ${csudo}ln -sf /usr/local/$1/libavro.so.23 /usr/local/$1/libavro.so

      ${csudo}/usr/bin/install -c -d /usr/local/$1
      [ -f ${avro_dir}/lib/libavro.a ] &&
        ${csudo}/usr/bin/install -c -m 755 ${avro_dir}/lib/libavro.a /usr/local/$1

      if [ -d /etc/ld.so.conf.d ]; then
        echo "/usr/local/$1" | ${csudo}tee /etc/ld.so.conf.d/libavro.conf >/dev/null || echo -e "failed to write /etc/ld.so.conf.d/libavro.conf"
        ${csudo}ldconfig
      else
        echo "/etc/ld.so.conf.d not found!"
      fi
262
    fi
263
  fi
264 265
}

266
function install_jemalloc() {
267
  jemalloc_dir=${script_dir}/jemalloc
268

269 270
  if [ -d ${jemalloc_dir} ]; then
    ${csudo}/usr/bin/install -c -d /usr/local/bin
271

272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
    if [ -f ${jemalloc_dir}/bin/jemalloc-config ]; then
      ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/bin/jemalloc-config /usr/local/bin
    fi
    if [ -f ${jemalloc_dir}/bin/jemalloc.sh ]; then
      ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/bin/jemalloc.sh /usr/local/bin
    fi
    if [ -f ${jemalloc_dir}/bin/jeprof ]; then
      ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/bin/jeprof /usr/local/bin
    fi
    if [ -f ${jemalloc_dir}/include/jemalloc/jemalloc.h ]; then
      ${csudo}/usr/bin/install -c -d /usr/local/include/jemalloc
      ${csudo}/usr/bin/install -c -m 644 ${jemalloc_dir}/include/jemalloc/jemalloc.h /usr/local/include/jemalloc
    fi
    if [ -f ${jemalloc_dir}/lib/libjemalloc.so.2 ]; then
      ${csudo}/usr/bin/install -c -d /usr/local/lib
      ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/lib/libjemalloc.so.2 /usr/local/lib
      ${csudo}ln -sf libjemalloc.so.2 /usr/local/lib/libjemalloc.so
      ${csudo}/usr/bin/install -c -d /usr/local/lib
      if [ -f ${jemalloc_dir}/lib/libjemalloc.a ]; then
        ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/lib/libjemalloc.a /usr/local/lib
      fi
      if [ -f ${jemalloc_dir}/lib/libjemalloc_pic.a ]; then
        ${csudo}/usr/bin/install -c -m 755 ${jemalloc_dir}/lib/libjemalloc_pic.a /usr/local/lib
      fi
      if [ -f ${jemalloc_dir}/lib/libjemalloc_pic.a ]; then
        ${csudo}/usr/bin/install -c -d /usr/local/lib/pkgconfig
        ${csudo}/usr/bin/install -c -m 644 ${jemalloc_dir}/lib/pkgconfig/jemalloc.pc /usr/local/lib/pkgconfig
      fi
    fi
    if [ -f ${jemalloc_dir}/share/doc/jemalloc/jemalloc.html ]; then
      ${csudo}/usr/bin/install -c -d /usr/local/share/doc/jemalloc
      ${csudo}/usr/bin/install -c -m 644 ${jemalloc_dir}/share/doc/jemalloc/jemalloc.html /usr/local/share/doc/jemalloc
    fi
    if [ -f ${jemalloc_dir}/share/man/man3/jemalloc.3 ]; then
      ${csudo}/usr/bin/install -c -d /usr/local/share/man/man3
      ${csudo}/usr/bin/install -c -m 644 ${jemalloc_dir}/share/man/man3/jemalloc.3 /usr/local/share/man/man3
    fi
309

310 311 312 313 314
    if [ -d /etc/ld.so.conf.d ]; then
      echo "/usr/local/lib" | ${csudo}tee /etc/ld.so.conf.d/jemalloc.conf >/dev/null || echo -e "failed to write /etc/ld.so.conf.d/jemalloc.conf"
      ${csudo}ldconfig
    else
      echo "/etc/ld.so.conf.d not found!"
315
    fi
316
  fi
317 318
}

H
hzcheng 已提交
319
function install_header() {
320 321 322 323 324
  ${csudo}rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taosdef.h ${inc_link_dir}/taoserror.h || :
  ${csudo}cp -f ${script_dir}/inc/* ${install_main_dir}/include && ${csudo}chmod 644 ${install_main_dir}/include/*
  ${csudo}ln -s ${install_main_dir}/include/taos.h ${inc_link_dir}/taos.h
  ${csudo}ln -s ${install_main_dir}/include/taosdef.h ${inc_link_dir}/taosdef.h
  ${csudo}ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
H
hzcheng 已提交
325 326
}

H
Hui Li 已提交
327 328 329 330 331 332 333
function add_newHostname_to_hosts() {
  localIp="127.0.0.1"
  OLD_IFS="$IFS"
  IFS=" "
  iphost=$(cat /etc/hosts | grep $1 | awk '{print $1}')
  arr=($iphost)
  IFS="$OLD_IFS"
334
  for s in "${arr[@]}"; do
H
Hui Li 已提交
335 336 337
    if [[ "$s" == "$localIp" ]]; then
      return
    fi
338
  done
339
  ${csudo}echo "127.0.0.1  $1" >>/etc/hosts || :
H
Hui Li 已提交
340 341 342 343
}

function set_hostname() {
  echo -e -n "${GREEN}Please enter one hostname(must not be 'localhost')${NC}:"
344
  read newHostname
H
Hui Li 已提交
345 346 347 348 349 350 351 352
  while true; do
    if [[ ! -z "$newHostname" && "$newHostname" != "localhost" ]]; then
      break
    else
      read -p "Please enter one hostname(must not be 'localhost'):" newHostname
    fi
  done

353 354
  ${csudo}hostname $newHostname || :
  retval=$(echo $?)
H
Hui Li 已提交
355
  if [[ $retval != 0 ]]; then
356 357 358
    echo
    echo "set hostname fail!"
    return
H
Hui Li 已提交
359
  fi
360

H
Hui Li 已提交
361 362
  #ubuntu/centos /etc/hostname
  if [[ -e /etc/hostname ]]; then
363
    ${csudo}echo $newHostname >/etc/hostname || :
H
Hui Li 已提交
364
  fi
365

H
Hui Li 已提交
366 367
  #debian: #HOSTNAME=yourname
  if [[ -e /etc/sysconfig/network ]]; then
368
    ${csudo}sed -i -r "s/#*\s*(HOSTNAME=\s*).*/\1$newHostname/" /etc/sysconfig/network || :
H
Hui Li 已提交
369 370
  fi

371
  ${csudo}sed -i -r "s/#*\s*(fqdn\s*).*/\1$newHostname/" ${cfg_install_dir}/${configFile}
372 373
  serverFqdn=$newHostname

H
Hui Li 已提交
374 375 376 377 378 379 380 381 382 383 384
  if [[ -e /etc/hosts ]]; then
    add_newHostname_to_hosts $newHostname
  fi
}

function is_correct_ipaddr() {
  newIp=$1
  OLD_IFS="$IFS"
  IFS=" "
  arr=($iplist)
  IFS="$OLD_IFS"
385 386 387 388
  for s in "${arr[@]}"; do
    if [[ "$s" == "$newIp" ]]; then
      return 0
    fi
H
Hui Li 已提交
389
  done
390

H
Hui Li 已提交
391 392 393 394
  return 1
}

function set_ipAsFqdn() {
395
  iplist=$(ip address | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}' | awk -F "/" '{print $1}') || :
H
Hui Li 已提交
396
  if [ -z "$iplist" ]; then
397
    iplist=$(ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}' | awk -F ":" '{print $2}') || :
H
Hui Li 已提交
398 399 400 401 402 403
  fi

  if [ -z "$iplist" ]; then
    echo
    echo -e -n "${GREEN}Unable to get local ip, use 127.0.0.1${NC}"
    localFqdn="127.0.0.1"
404
    # Write the local FQDN to configuration file
405
    ${csudo}sed -i -r "s/#*\s*(fqdn\s*).*/\1$localFqdn/" ${cfg_install_dir}/${configFile}
H
Hui Li 已提交
406 407 408
    serverFqdn=$localFqdn
    echo
    return
409 410
  fi

H
Hui Li 已提交
411 412 413 414 415 416 417
  echo -e -n "${GREEN}Please choose an IP from local IP list${NC}:"
  echo
  echo -e -n "${GREEN}$iplist${NC}"
  echo
  echo
  echo -e -n "${GREEN}Notes: if IP is used as the node name, data can NOT be migrated to other machine directly${NC}:"
  read localFqdn
418 419 420 421 422 423
  while true; do
    if [ ! -z "$localFqdn" ]; then
      # Check if correct ip address
      is_correct_ipaddr $localFqdn
      retval=$(echo $?)
      if [[ $retval != 0 ]]; then
H
Hui Li 已提交
424
        read -p "Please choose an IP from local IP list:" localFqdn
425 426 427 428 429
      else
        # Write the local FQDN to configuration file
        ${csudo}sed -i -r "s/#*\s*(fqdn\s*).*/\1$localFqdn/" ${cfg_install_dir}/${configFile}
        serverFqdn=$localFqdn
        break
H
Hui Li 已提交
430
      fi
431 432 433 434
    else
      read -p "Please choose an IP from local IP list:" localFqdn
    fi
  done
H
Hui Li 已提交
435 436 437
}

function local_fqdn_check() {
H
[NONE]  
Hui Li 已提交
438
  #serverFqdn=$(hostname)
H
Hui Li 已提交
439 440 441
  echo
  echo -e -n "System hostname is: ${GREEN}$serverFqdn${NC}"
  echo
442
  if [[ "$serverFqdn" == "" ]] || [[ "$serverFqdn" == "localhost" ]]; then
H
Hui Li 已提交
443 444
    echo -e -n "${GREEN}It is strongly recommended to configure a hostname for this machine ${NC}"
    echo
445

446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467
    while true; do
      read -r -p "Set hostname now? [Y/n] " input
      if [ ! -n "$input" ]; then
        set_hostname
        break
      else
        case $input in
        [yY][eE][sS] | [yY])
          set_hostname
          break
          ;;

        [nN][oO] | [nN])
          set_ipAsFqdn
          break
          ;;

        *)
          echo "Invalid input..."
          ;;
        esac
      fi
H
Hui Li 已提交
468 469 470 471
    done
  fi
}

472 473
function install_adapter_config() {
  if [ ! -f "${cfg_install_dir}/${adapterName}.toml" ]; then
474
    ${csudo}mkdir -p ${cfg_install_dir}
475 476
    [ -f ${script_dir}/cfg/${adapterName}.toml ] && ${csudo}cp ${script_dir}/cfg/${adapterName}.toml ${cfg_install_dir}
    [ -f ${cfg_install_dir}/${adapterName}.toml ] && ${csudo}chmod 644 ${cfg_install_dir}/${adapterName}.toml
477
  fi
478

479 480
  [ -f ${script_dir}/cfg/${adapterName}.toml ] &&
    ${csudo}cp -f ${script_dir}/cfg/${adapterName}.toml ${cfg_install_dir}/${adapterName}.toml.new
481

482 483
  [ -f ${cfg_install_dir}/${adapterName}.toml ] &&
    ${csudo}ln -s ${cfg_install_dir}/${adapterName}.toml ${install_main_dir}/cfg/${adapterName}.toml
484

485
  [ ! -z $1 ] && return 0 || : # only install client
486 487 488

}

H
hzcheng 已提交
489
function install_config() {
490

491 492 493 494 495
  if [ ! -f "${cfg_install_dir}/${configFile}" ]; then
    ${csudo}mkdir -p ${cfg_install_dir}
    [ -f ${script_dir}/cfg/${configFile} ] && ${csudo}cp ${script_dir}/cfg/${configFile} ${cfg_install_dir}
    ${csudo}chmod 644 ${cfg_install_dir}/*
  fi
496

497 498
  ${csudo}cp -f ${script_dir}/cfg/${configFile} ${cfg_install_dir}/${configFile}.new
  ${csudo}ln -s ${cfg_install_dir}/${configFile} ${install_main_dir}/cfg
S
slguan 已提交
499

500
  [ ! -z $1 ] && return 0 || : # only install client
501

502 503 504
  if ((${update_flag} == 1)); then
    return 0
  fi
505

506 507 508
  if [ "$interactiveFqdn" == "no" ]; then
    return 0
  fi
509

510
  local_fqdn_check
S
slguan 已提交
511

512 513 514 515 516 517 518 519 520 521 522 523 524
  echo
  echo -e -n "${GREEN}Enter FQDN:port (like h1.${emailName}:6030) of an existing ${productName} cluster node to join${NC}"
  echo
  echo -e -n "${GREEN}OR leave it blank to build one${NC}:"
  read firstEp
  while true; do
    if [ ! -z "$firstEp" ]; then
      ${csudo}sed -i -r "s/#*\s*(firstEp\s*).*/\1$firstEp/" ${cfg_install_dir}/${configFile}
      break
    else
      break
    fi
  done
H
Hui Li 已提交
525

526 527 528 529 530 531 532 533 534 535 536 537
  echo
  echo -e -n "${GREEN}Enter your email address for priority support or enter empty to skip${NC}: "
  read emailAddr
  while true; do
    if [ ! -z "$emailAddr" ]; then
      email_file="${install_main_dir}/email"
      ${csudo}bash -c "echo $emailAddr > ${email_file}"
      break
    else
      break
    fi
  done
H
hzcheng 已提交
538 539 540
}

function install_log() {
541 542
  ${csudo}rm -rf ${log_dir} || :
  ${csudo}mkdir -p ${log_dir} && ${csudo}chmod 777 ${log_dir}
543

544
  ${csudo}ln -s ${log_dir} ${install_main_dir}/log
H
hzcheng 已提交
545 546 547
}

function install_data() {
548
  ${csudo}mkdir -p ${data_dir}
549

550
  ${csudo}ln -s ${data_dir} ${install_main_dir}/data
H
hzcheng 已提交
551 552 553
}

function install_connector() {
554
  [ -d "${script_dir}/connector/" ] && ${csudo}cp -rf ${script_dir}/connector/ ${install_main_dir}/
H
hzcheng 已提交
555 556 557
}

function install_examples() {
558 559 560
  if [ -d ${script_dir}/examples ]; then
    ${csudo}cp -rf ${script_dir}/examples/* ${install_main_dir}/examples
  fi
H
hzcheng 已提交
561 562 563
}

function clean_service_on_sysvinit() {
564 565 566
  if pidof ${serverName} &>/dev/null; then
    ${csudo}service ${serverName} stop || :
  fi
567

568 569 570
  if pidof tarbitrator &>/dev/null; then
    ${csudo}service tarbitratord stop || :
  fi
571

572 573 574
  if ((${initd_mod} == 1)); then
    if [ -e ${service_config_dir}/${serverName} ]; then
      ${csudo}chkconfig --del ${serverName} || :
H
Hui Li 已提交
575
    fi
L
lihui 已提交
576

577 578 579 580 581 582 583 584 585 586 587 588 589
    if [ -e ${service_config_dir}/tarbitratord ]; then
      ${csudo}chkconfig --del tarbitratord || :
    fi
  elif ((${initd_mod} == 2)); then
    if [ -e ${service_config_dir}/${serverName} ]; then
      ${csudo}insserv -r ${serverName} || :
    fi
    if [ -e ${service_config_dir}/tarbitratord ]; then
      ${csudo}insserv -r tarbitratord || :
    fi
  elif ((${initd_mod} == 3)); then
    if [ -e ${service_config_dir}/${serverName} ]; then
      ${csudo}update-rc.d -f ${serverName} remove || :
L
lihui 已提交
590
    fi
591 592 593 594
    if [ -e ${service_config_dir}/tarbitratord ]; then
      ${csudo}update-rc.d -f tarbitratord remove || :
    fi
  fi
595

596 597
  ${csudo}rm -f ${service_config_dir}/${serverName} || :
  ${csudo}rm -f ${service_config_dir}/tarbitratord || :
598

599 600 601
  if $(which init &>/dev/null); then
    ${csudo}init q || :
  fi
H
hzcheng 已提交
602 603 604
}

function install_service_on_sysvinit() {
605 606 607 608
  clean_service_on_sysvinit
  sleep 1

  if ((${os_type} == 1)); then
609
    #    ${csudo}cp -f ${script_dir}/init.d/${serverName}.deb ${install_main_dir}/init.d/${serverName}
610
    ${csudo}cp ${script_dir}/init.d/${serverName}.deb ${service_config_dir}/${serverName} && ${csudo}chmod a+x ${service_config_dir}/${serverName}
611
    #    ${csudo}cp -f ${script_dir}/init.d/tarbitratord.deb ${install_main_dir}/init.d/tarbitratord
612 613
    ${csudo}cp ${script_dir}/init.d/tarbitratord.deb ${service_config_dir}/tarbitratord && ${csudo}chmod a+x ${service_config_dir}/tarbitratord
  elif ((${os_type} == 2)); then
614
    #    ${csudo}cp -f ${script_dir}/init.d/${serverName}.rpm ${install_main_dir}/init.d/${serverName}
615
    ${csudo}cp ${script_dir}/init.d/${serverName}.rpm ${service_config_dir}/${serverName} && ${csudo}chmod a+x ${service_config_dir}/${serverName}
616
    #    ${csudo}cp -f ${script_dir}/init.d/tarbitratord.rpm ${install_main_dir}/init.d/tarbitratord
617 618
    ${csudo}cp ${script_dir}/init.d/tarbitratord.rpm ${service_config_dir}/tarbitratord && ${csudo}chmod a+x ${service_config_dir}/tarbitratord
  fi
619

620 621 622 623 624 625 626 627 628 629 630 631 632 633
  if ((${initd_mod} == 1)); then
    ${csudo}chkconfig --add ${serverName} || :
    ${csudo}chkconfig --level 2345 ${serverName} on || :
    ${csudo}chkconfig --add tarbitratord || :
    ${csudo}chkconfig --level 2345 tarbitratord on || :
  elif ((${initd_mod} == 2)); then
    ${csudo}insserv ${serverName} || :
    ${csudo}insserv -d ${serverName} || :
    ${csudo}insserv tarbitratord || :
    ${csudo}insserv -d tarbitratord || :
  elif ((${initd_mod} == 3)); then
    ${csudo}update-rc.d ${serverName} defaults || :
    ${csudo}update-rc.d tarbitratord defaults || :
  fi
H
hzcheng 已提交
634 635 636
}

function clean_service_on_systemd() {
637 638 639 640 641 642 643
  taosd_service_config="${service_config_dir}/${serverName}.service"
  if systemctl is-active --quiet ${serverName}; then
    echo "${productName} is running, stopping it..."
    ${csudo}systemctl stop ${serverName} &>/dev/null || echo &>/dev/null
  fi
  ${csudo}systemctl disable ${serverName} &>/dev/null || echo &>/dev/null
  ${csudo}rm -f ${taosd_service_config}
644

645 646 647 648 649 650 651
  tarbitratord_service_config="${service_config_dir}/tarbitratord.service"
  if systemctl is-active --quiet tarbitratord; then
    echo "tarbitrator is running, stopping it..."
    ${csudo}systemctl stop tarbitratord &>/dev/null || echo &>/dev/null
  fi
  ${csudo}systemctl disable tarbitratord &>/dev/null || echo &>/dev/null
  ${csudo}rm -f ${tarbitratord_service_config}
652

653 654 655 656 657
  if [ "$verMode" == "cluster" ]; then
    nginx_service_config="${service_config_dir}/nginxd.service"
    if systemctl is-active --quiet nginxd; then
      echo "Nginx for ${productName} is running, stopping it..."
      ${csudo}systemctl stop nginxd &>/dev/null || echo &>/dev/null
658
    fi
659 660 661
    ${csudo}systemctl disable nginxd &>/dev/null || echo &>/dev/null
    ${csudo}rm -f ${nginx_service_config}
  fi
S
slguan 已提交
662
}
H
hzcheng 已提交
663 664

function install_service_on_systemd() {
665
  clean_service_on_systemd
H
hzcheng 已提交
666

667 668 669 670
  [ -f ${script_dir}/cfg/${serverName}.service ] &&
    ${csudo}cp ${script_dir}/cfg/${serverName}.service \
      ${service_config_dir}/ || :
  ${csudo}systemctl daemon-reload
671

672
  ${csudo}systemctl enable ${serverName}
673

674 675 676 677
  [ -f ${script_dir}/cfg/tarbitratord.service ] &&
    ${csudo}cp ${script_dir}/cfg/tarbitratord.service \
      ${service_config_dir}/ || :
  ${csudo}systemctl daemon-reload
678

679 680 681 682 683
  if [ "$verMode" == "cluster" ]; then
    [ -f ${script_dir}/cfg/nginxd.service ] &&
      ${csudo}cp ${script_dir}/cfg/nginxd.service \
        ${service_config_dir}/ || :
    ${csudo}systemctl daemon-reload
684

685 686 687 688 689
    if ! ${csudo}systemctl enable nginxd &>/dev/null; then
      ${csudo}systemctl daemon-reexec
      ${csudo}systemctl enable nginxd
    fi
    ${csudo}systemctl start nginxd
690
  fi
H
hzcheng 已提交
691 692
}

693
function install_adapter_service() {
694
  if ((${service_mod} == 0)); then
695 696
    [ -f ${script_dir}/cfg/${adapterName}.service ] &&
      ${csudo}cp ${script_dir}/cfg/${adapterName}.service \
697 698 699
        ${service_config_dir}/ || :
    ${csudo}systemctl daemon-reload
  fi
700 701
}

H
hzcheng 已提交
702
function install_service() {
703 704 705 706 707 708 709
  if ((${service_mod} == 0)); then
    install_service_on_systemd
  elif ((${service_mod} == 1)); then
    install_service_on_sysvinit
  else
    kill_process ${serverName}
  fi
H
hzcheng 已提交
710 711
}

712 713
vercomp() {
  if [[ $1 == $2 ]]; then
H
hzcheng 已提交
714
    return 0
715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735
  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
      return 1
    fi
    if ((10#${ver1[i]} < 10#${ver2[i]})); then
      return 2
    fi
  done
  return 0
H
hzcheng 已提交
736 737 738 739
}

function is_version_compatible() {

740
  curr_version=$(ls ${script_dir}/driver/libtaos.so* | awk -F 'libtaos.so.' '{print $2}')
H
hzcheng 已提交
741

742 743 744 745 746
  if [ -f ${script_dir}/driver/vercomp.txt ]; then
    min_compatible_version=$(cat ${script_dir}/driver/vercomp.txt)
  else
    min_compatible_version=$(${script_dir}/bin/${serverName} -V | head -1 | cut -d ' ' -f 5)
  fi
H
hzcheng 已提交
747

748 749 750 751 752 753 754
  exist_version=$(${installDir}/bin/${serverName} -V | head -1 | cut -d ' ' -f 3)
  vercomp $exist_version "2.0.16.0"
  case $? in
  2)
    prompt_force=1
    ;;
  esac
755

756 757
  vercomp $curr_version $min_compatible_version
  echo "" # avoid $? value not update
758

759 760 761 762 763
  case $? in
  0) return 0 ;;
  1) return 0 ;;
  2) return 1 ;;
  esac
H
hzcheng 已提交
764 765
}

766
function updateProduct() {
767 768 769 770 771
  # Check if version compatible
  if ! is_version_compatible; then
    echo -e "${RED}Version incompatible${NC}"
    return 1
  fi
772

773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789
  # Start to update
  if [ ! -e ${tarName} ]; then
    echo "File ${tarName} does not exist"
    exit 1
  fi
  tar -zxf ${tarName}
  install_jemalloc

  echo -e "${GREEN}Start to update ${productName}...${NC}"
  # Stop the service if running
  if pidof ${serverName} &>/dev/null; then
    if ((${service_mod} == 0)); then
      ${csudo}systemctl stop ${serverName} || :
    elif ((${service_mod} == 1)); then
      ${csudo}service ${serverName} stop || :
    else
      kill_process ${serverName}
790
    fi
791 792
    sleep 1
  fi
793

794 795 796 797 798 799 800 801
  if [ "$verMode" == "cluster" ]; then
    if pidof nginx &>/dev/null; then
      if ((${service_mod} == 0)); then
        ${csudo}systemctl stop nginxd || :
      elif ((${service_mod} == 1)); then
        ${csudo}service nginxd stop || :
      else
        kill_process nginx
802
      fi
803
      sleep 1
H
hzcheng 已提交
804
    fi
805
  fi
806

807
  install_main_path
H
hzcheng 已提交
808

809 810 811
  install_log
  install_header
  install_lib
812 813 814 815 816

  if [ "$verMode" == "cluster" ]; then
      install_connector
  fi

817 818 819 820
  install_examples
  if [ -z $1 ]; then
    install_bin
    install_service
821
    install_adapter_service
822
    install_config
823
    install_adapter_config
824 825 826 827 828 829 830 831 832

    openresty_work=false
    if [ "$verMode" == "cluster" ]; then
      # Check if openresty is installed
      # Check if nginx is installed successfully
      if type curl &>/dev/null; then
        if curl -sSf http://127.0.0.1:${nginx_port} &>/dev/null; then
          echo -e "\033[44;32;1mNginx for ${productName} is updated successfully!${NC}"
          openresty_work=true
H
hzcheng 已提交
833
        else
834
          echo -e "\033[44;31;5mNginx for ${productName} does not work! Please try again!\033[0m"
H
hzcheng 已提交
835
        fi
836 837
      fi
    fi
H
hzcheng 已提交
838

839
    echo
840 841
    echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${cfg_install_dir}/${configFile}"
    echo -e "${GREEN_DARK}To configure Adapter (if has) ${NC}: edit ${cfg_install_dir}/${adapterName}.toml"
842 843 844 845 846
    if ((${service_mod} == 0)); then
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ${csudo}systemctl start ${serverName}${NC}"
    elif ((${service_mod} == 1)); then
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ${csudo}service ${serverName} start${NC}"
    else
847
      echo -e "${GREEN_DARK}To start Adapter (if has)${NC}: ${adapterName} &${NC}"
848 849
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ./${serverName}${NC}"
    fi
850

851 852
    if [ ${openresty_work} = 'true' ]; then
      echo -e "${GREEN_DARK}To access ${productName}    ${NC}: use ${GREEN_UNDERLINE}${clientName} -h $serverFqdn${NC} in shell OR from ${GREEN_UNDERLINE}http://127.0.0.1:${nginx_port}${NC}"
H
hzcheng 已提交
853
    else
854 855
      echo -e "${GREEN_DARK}To access ${productName}    ${NC}: use ${GREEN_UNDERLINE}${clientName} -h $serverFqdn${NC} in shell${NC}"
    fi
H
hzcheng 已提交
856

857 858 859
    if ((${prompt_force} == 1)); then
      echo ""
      echo -e "${RED}Please run '${serverName} --force-keep-file' at first time for the exist ${productName} $exist_version!${NC}"
H
hzcheng 已提交
860
    fi
861 862 863 864 865 866 867 868 869
    echo
    echo -e "\033[44;32;1m${productName} is updated successfully!${NC}"
  else
    install_bin
    install_config

    echo
    echo -e "\033[44;32;1m${productName} client is updated successfully!${NC}"
  fi
H
hzcheng 已提交
870

871
  rm -rf $(tar -tf ${tarName} | grep -v "^\./$")
H
hzcheng 已提交
872 873
}

874
function installProduct() {
875 876 877 878 879 880
  # Start to install
  if [ ! -e ${tarName} ]; then
    echo "File ${tarName} does not exist"
    exit 1
  fi
  tar -zxf ${tarName}
881

882
  echo -e "${GREEN}Start to install ${productName}...${NC}"
883

884
  install_main_path
885

886 887 888
  if [ -z $1 ]; then
    install_data
  fi
889

890 891 892 893 894 895 896
  install_log
  install_header
  install_lib
  install_jemalloc
  #install_avro lib
  #install_avro lib64

897 898 899
  if [ "$verMode" == "cluster" ]; then
      install_connector
  fi
900 901 902 903 904 905
  install_examples

  if [ -z $1 ]; then # install service and client
    # For installing new
    install_bin
    install_service
906 907
    install_adapter_service
    install_adapter_config
908 909 910 911 912 913 914 915

    openresty_work=false
    if [ "$verMode" == "cluster" ]; then
      # Check if nginx is installed successfully
      if type curl &>/dev/null; then
        if curl -sSf http://127.0.0.1:${nginx_port} &>/dev/null; then
          echo -e "\033[44;32;1mNginx for ${productName} is installed successfully!${NC}"
          openresty_work=true
H
hzcheng 已提交
916
        else
917
          echo -e "\033[44;31;5mNginx for ${productName} does not work! Please try again!\033[0m"
918
        fi
919 920
      fi
    fi
H
Hui Li 已提交
921

922
    install_config
923

924 925
    # Ask if to start the service
    echo
926 927
    echo -e "${GREEN_DARK}To configure ${productName} ${NC}: edit ${cfg_install_dir}/${configFile}"
    echo -e "${GREEN_DARK}To configure ${adapterName} (if has) ${NC}: edit ${cfg_install_dir}/${adapterName}.toml"
928 929 930 931 932
    if ((${service_mod} == 0)); then
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ${csudo}systemctl start ${serverName}${NC}"
    elif ((${service_mod} == 1)); then
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ${csudo}service ${serverName} start${NC}"
    else
933
      echo -e "${GREEN_DARK}To start Adapter (if has)${NC}: ${adapterName} &${NC}"
934
      echo -e "${GREEN_DARK}To start ${productName}     ${NC}: ${serverName}${NC}"
H
hzcheng 已提交
935
    fi
936

937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955
    if [ ! -z "$firstEp" ]; then
      tmpFqdn=${firstEp%%:*}
      substr=":"
      if [[ $firstEp =~ $substr ]]; then
        tmpPort=${firstEp#*:}
      else
        tmpPort=""
      fi
      if [[ "$tmpPort" != "" ]]; then
        echo -e "${GREEN_DARK}To access ${productName}    ${NC}: ${clientName} -h $tmpFqdn -P $tmpPort${GREEN_DARK} to login into cluster, then${NC}"
      else
        echo -e "${GREEN_DARK}To access ${productName}    ${NC}: ${clientName} -h $tmpFqdn${GREEN_DARK} to login into cluster, then${NC}"
      fi
      echo -e "${GREEN_DARK}execute ${NC}: create dnode 'newDnodeFQDN:port'; ${GREEN_DARK}to add this new node${NC}"
      echo
    elif [ ! -z "$serverFqdn" ]; then
      echo -e "${GREEN_DARK}To access ${productName}    ${NC}: ${clientName} -h $serverFqdn${GREEN_DARK} to login into ${productName} server${NC}"
      echo
    fi
H
hzcheng 已提交
956

957 958 959 960 961 962 963 964 965 966
    echo -e "\033[44;32;1m${productName} is installed successfully!${NC}"
    echo
  else # Only install client
    install_bin
    install_config
    echo
    echo -e "\033[44;32;1m${productName} client is installed successfully!${NC}"
  fi

  touch ~/.${historyFile}
967
  rm -rf $(tar -tf ${tarName} | grep -v "^\./$")
968
}
H
hzcheng 已提交
969 970

## ==============================Main program starts from here============================
H
[NONE]  
Hui Li 已提交
971
serverFqdn=$(hostname)
H
Hui Li 已提交
972
if [ "$verType" == "server" ]; then
973 974 975
  # Install server and client
  if [ -x ${bin_dir}/${serverName} ]; then
    update_flag=1
976
    updateProduct
977
  else
978
    installProduct
979
  fi
H
Hui Li 已提交
980
elif [ "$verType" == "client" ]; then
981 982 983 984
  interactiveFqdn=no
  # Only install client
  if [ -x ${bin_dir}/${clientName} ]; then
    update_flag=1
985
    updateProduct client
986
  else
987
    installProduct client
988
  fi
989
else
990
  echo "please input correct verType"
H
hzcheng 已提交
991
fi