install.sh 26.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
hzcheng 已提交
12
# -----------------------Variables definition---------------------
F
Frozen 已提交
13
script_dir=$(dirname $(readlink -f "$0"))
H
hzcheng 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
# Dynamic directory
data_dir="/var/lib/taos"
log_dir="/var/log/taos"

data_link_dir="/usr/local/taos/data"
log_link_dir="/usr/local/taos/log"

cfg_install_dir="/etc/taos"

bin_link_dir="/usr/bin"
lib_link_dir="/usr/lib"
inc_link_dir="/usr/include"

#install main path
install_main_dir="/usr/local/taos"

# old bin dir
bin_dir="/usr/local/taos/bin"

S
slguan 已提交
33 34 35
# v1.5 jar dir
v15_java_app_dir="/usr/local/lib/taos"

H
hzcheng 已提交
36
service_config_dir="/etc/systemd/system"
S
slguan 已提交
37 38
nginx_port=6060
nginx_dir="/usr/local/nginxd"
H
hzcheng 已提交
39 40 41 42 43 44 45 46

# 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 已提交
47 48 49 50
csudo=""
if command -v sudo > /dev/null; then
    csudo="sudo"
fi
H
hzcheng 已提交
51

S
slguan 已提交
52 53
update_flag=0

L
lihui 已提交
54
initd_mod=0
P
plum-lihui 已提交
55 56 57
service_mod=2
if pidof systemd &> /dev/null; then
    service_mod=0
L
lihui 已提交
58
elif $(which service &> /dev/null); then    
P
plum-lihui 已提交
59
    service_mod=1
L
lihui 已提交
60 61 62 63 64 65 66 67 68 69
    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
        service_mod=2
    fi
P
plum-lihui 已提交
70 71
else 
    service_mod=2
H
hzcheng 已提交
72 73
fi

L
lihui 已提交
74 75 76 77 78 79 80 81

# 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)
osinfo=$(cat /etc/os-release | grep "NAME" | cut -d '"' -f2)
#echo "osinfo: ${osinfo}"
os_type=0
if echo $osinfo | grep -qwi "ubuntu" ; then
L
lihui 已提交
82
  echo "This is ubuntu system"
L
lihui 已提交
83 84
  os_type=1
elif echo $osinfo | grep -qwi "debian" ; then
L
lihui 已提交
85
  echo "This is debian system"
L
lihui 已提交
86 87
  os_type=1
elif echo $osinfo | grep -qwi "Kylin" ; then
L
lihui 已提交
88
  echo "This is Kylin system"
L
lihui 已提交
89 90
  os_type=1
elif  echo $osinfo | grep -qwi "centos" ; then
L
lihui 已提交
91
  echo "This is centos system"
L
lihui 已提交
92 93
  os_type=2
elif echo $osinfo | grep -qwi "fedora" ; then
L
lihui 已提交
94
  echo "This is fedora system"
L
lihui 已提交
95 96
  os_type=2
else
L
lihui 已提交
97 98 99
  echo "${osinfo}: This is an officially unverified linux system, If there are any problems with the installation and operation, "
  echo "please feel free to contact taosdata.com for support."
  os_type=1
L
lihui 已提交
100 101
fi

P
plum-lihui 已提交
102 103
function kill_taosd() {
  pid=$(ps -ef | grep "taosd" | grep -v "grep" | awk '{print $2}')
L
lihui 已提交
104 105 106
  if [ -n "$pid" ]; then
    ${csudo} kill -9 $pid   || :
  fi
P
plum-lihui 已提交
107 108
}

H
hzcheng 已提交
109 110
function install_main_path() {
    #create install main dir and all sub dir
P
plum-lihui 已提交
111 112 113 114 115 116 117 118 119
    ${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    
    ${csudo} mkdir -p ${install_main_dir}/connector
    ${csudo} mkdir -p ${install_main_dir}/driver
    ${csudo} mkdir -p ${install_main_dir}/examples
    ${csudo} mkdir -p ${install_main_dir}/include
    ${csudo} mkdir -p ${install_main_dir}/init.d
S
slguan 已提交
120 121 122
    if [ "$verMode" == "cluster" ]; then
        ${csudo} mkdir -p ${nginx_dir}
    fi
H
hzcheng 已提交
123 124 125 126
}

function install_bin() {
    # Remove links
P
plum-lihui 已提交
127 128
    ${csudo} rm -f ${bin_link_dir}/taos     || :
    ${csudo} rm -f ${bin_link_dir}/taosd    || :
S
slguan 已提交
129
    ${csudo} rm -f ${bin_link_dir}/taosdemo || :
P
plum-lihui 已提交
130 131
    ${csudo} rm -f ${bin_link_dir}/taosdump || :
    ${csudo} rm -f ${bin_link_dir}/rmtaos   || :
H
Hui Li 已提交
132
    ${csudo} rm -f ${bin_link_dir}/tarbitrator   || :
H
hzcheng 已提交
133

P
plum-lihui 已提交
134
    ${csudo} cp -r ${script_dir}/bin/* ${install_main_dir}/bin && ${csudo} chmod 0555 ${install_main_dir}/bin/*
H
hzcheng 已提交
135 136

    #Make link
H
Hui Li 已提交
137 138 139 140 141 142
    [ -x ${install_main_dir}/bin/taos ] && ${csudo} ln -s ${install_main_dir}/bin/taos ${bin_link_dir}/taos                      || :
    [ -x ${install_main_dir}/bin/taosd ] && ${csudo} ln -s ${install_main_dir}/bin/taosd ${bin_link_dir}/taosd                   || :
    [ -x ${install_main_dir}/bin/taosdump ] && ${csudo} ln -s ${install_main_dir}/bin/taosdump ${bin_link_dir}/taosdump          || :
    [ -x ${install_main_dir}/bin/taosdemo ] && ${csudo} ln -s ${install_main_dir}/bin/taosdemo ${bin_link_dir}/taosdemo          || :
    [ -x ${install_main_dir}/bin/remove.sh ] && ${csudo} ln -s ${install_main_dir}/bin/remove.sh ${bin_link_dir}/rmtaos          || :
    [ -x ${install_main_dir}/bin/tarbitrator ] && ${csudo} ln -s ${install_main_dir}/bin/tarbitrator ${bin_link_dir}/tarbitrator || :
S
slguan 已提交
143 144 145 146 147 148

    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 已提交
149 150 151 152
}

function install_lib() {
    # Remove links
L
lihui 已提交
153
    ${csudo} rm -f ${lib_link_dir}/libtaos.*         || :
S
slguan 已提交
154
    ${csudo} rm -rf ${v15_java_app_dir}              || :
H
hzcheng 已提交
155

P
plum-lihui 已提交
156
    ${csudo} cp -rf ${script_dir}/driver/* ${install_main_dir}/driver && ${csudo} chmod 777 ${install_main_dir}/driver/*  
H
hzcheng 已提交
157
    
P
plum-lihui 已提交
158 159
    ${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
S
slguan 已提交
160 161 162 163 164 165 166
    
	if [ "$verMode" == "cluster" ]; then
        # Compatible with version 1.5
        ${csudo} mkdir -p ${v15_java_app_dir}
        ${csudo} ln -s ${install_main_dir}/connector/taos-jdbcdriver-1.0.2-dist.jar ${v15_java_app_dir}/JDBCDriver-1.0.2-dist.jar
        ${csudo} chmod 777 ${v15_java_app_dir} || :
    fi
H
hzcheng 已提交
167 168 169
}

function install_header() {
L
lihui 已提交
170
    ${csudo} rm -f ${inc_link_dir}/taos.h ${inc_link_dir}/taoserror.h    || :
P
plum-lihui 已提交
171 172
    ${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
L
lihui 已提交
173
    ${csudo} ln -s ${install_main_dir}/include/taoserror.h ${inc_link_dir}/taoserror.h
H
hzcheng 已提交
174 175 176
}

function install_config() {
P
plum-lihui 已提交
177
    #${csudo} rm -f ${install_main_dir}/cfg/taos.cfg     || :
H
hzcheng 已提交
178
    
L
lihui 已提交
179
    if [ ! -f ${cfg_install_dir}/taos.cfg ]; then
P
plum-lihui 已提交
180 181 182
        ${csudo} mkdir -p ${cfg_install_dir}
        [ -f ${script_dir}/cfg/taos.cfg ] && ${csudo} cp ${script_dir}/cfg/taos.cfg ${cfg_install_dir}
        ${csudo} chmod 644 ${cfg_install_dir}/*
H
hzcheng 已提交
183 184
    fi 
    
P
plum-lihui 已提交
185
    ${csudo} cp -f ${script_dir}/cfg/taos.cfg ${install_main_dir}/cfg/taos.cfg.org
L
lihui 已提交
186
    ${csudo} ln -s ${cfg_install_dir}/taos.cfg ${install_main_dir}/cfg
S
slguan 已提交
187 188 189 190 191 192 193 194

    if [ "$verMode" == "cluster" ]; then
        [ ! -z $1 ] && return 0 || : # only install client
    
        if ((${update_flag}==1)); then
            return 0
        fi

H
Hui Li 已提交
195 196 197 198
        #FQDN_FORMAT="(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
        #FQDN_FORMAT="(:[1-6][0-9][0-9][0-9][0-9]$)"
        #PORT_FORMAT="(/[1-6][0-9][0-9][0-9][0-9]?/)"
        #FQDN_PATTERN=":[0-9]{1,5}$"
S
slguan 已提交
199

H
Hui Li 已提交
200
        # first full-qualified domain name (FQDN) for TDengine cluster system
S
slguan 已提交
201
        echo
H
Hui Li 已提交
202 203
        echo -e -n "${GREEN}Enter the FQDN of an existing TDengine cluster node to join${NC} OR ${GREEN}leave it blank to build one${NC} :"
        read firstFqdn
S
slguan 已提交
204
        while true; do
H
Hui Li 已提交
205 206 207 208 209
            if [ ! -z "$firstFqdn" ]; then
                # check the format of the firstFqdn
                #if [[ $firstFqdn == $FQDN_PATTERN ]]; then
                    # Write the first FQDN to configuration file
                    ${csudo} sed -i -r "s/#*\s*(first\s*).*/\1$firstFqdn/" ${cfg_install_dir}/taos.cfg
S
slguan 已提交
210

H
Hui Li 已提交
211
                    # Get the second FQDN
S
slguan 已提交
212
                    echo
H
Hui Li 已提交
213 214
                    echo -e -n "${GREEN}Enter the FQDN of another node in cluster${NC} OR ${GREEN}leave it blank to skip${NC}: "
                    read secondFqdn
S
slguan 已提交
215
                    while true; do
H
Hui Li 已提交
216 217 218 219
                        if [ ! -z "$secondFqdn" ]; then
                            #if [[ $secondFqdn == $FQDN_PATTERN ]]; then
                                # Write the second FQDN to configuration file
                                ${csudo} sed -i -r "s/#*\s*(second\s*).*/\1$secondFqdn/" ${cfg_install_dir}/taos.cfg
S
slguan 已提交
220
                                break
H
Hui Li 已提交
221 222 223
                            #else
                            #    read -p "Please enter the correct FQDN: " secondFqdn
                            #fi
S
slguan 已提交
224 225 226 227 228 229
                        else
                            break
                        fi
                    done
    
                    break
H
Hui Li 已提交
230 231 232
                #else
                #    read -p "Please enter the correct FQDN: " firstFqdn
                #fi
S
slguan 已提交
233 234 235 236 237
            else
                break
            fi
        done
	
H
Hui Li 已提交
238
	  fi
H
hzcheng 已提交
239 240
}

L
lihui 已提交
241

H
hzcheng 已提交
242
function install_log() {
P
plum-lihui 已提交
243 244
    ${csudo} rm -rf ${log_dir}  || :
    ${csudo} mkdir -p ${log_dir} && ${csudo} chmod 777 ${log_dir}
H
hzcheng 已提交
245
    
P
plum-lihui 已提交
246
    ${csudo} ln -s ${log_dir} ${install_main_dir}/log
H
hzcheng 已提交
247 248 249
}

function install_data() {
P
plum-lihui 已提交
250
    ${csudo} mkdir -p ${data_dir}
H
hzcheng 已提交
251
    
P
plum-lihui 已提交
252
    ${csudo} ln -s ${data_dir} ${install_main_dir}/data    
H
hzcheng 已提交
253 254 255
}

function install_connector() {
P
plum-lihui 已提交
256
    ${csudo} cp -rf ${script_dir}/connector/* ${install_main_dir}/connector
H
hzcheng 已提交
257 258 259
}

function install_examples() {
S
slguan 已提交
260 261 262
    if [ -d ${script_dir}/examples ]; then
        ${csudo} cp -rf ${script_dir}/examples/* ${install_main_dir}/examples
    fi
H
hzcheng 已提交
263 264 265
}

function clean_service_on_sysvinit() {
L
lihui 已提交
266 267 268
    #restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
    #${csudo} sed -i "\|${restart_config_str}|d" /etc/inittab || :    
    
H
hzcheng 已提交
269
    if pidof taosd &> /dev/null; then
P
plum-lihui 已提交
270
        ${csudo} service taosd stop || :
H
hzcheng 已提交
271
    fi
H
Hui Li 已提交
272 273 274 275
    
    if pidof tarbitrator &> /dev/null; then
        ${csudo} service tarbitratord stop || :
    fi
L
lihui 已提交
276 277 278

    if ((${initd_mod}==1)); then
        ${csudo} chkconfig --del taosd || :
H
Hui Li 已提交
279
        ${csudo} chkconfig --del tarbitratord || :
L
lihui 已提交
280 281
    elif ((${initd_mod}==2)); then
        ${csudo} insserv -r taosd || :
H
Hui Li 已提交
282
        ${csudo} insserv -r tarbitratord || :
L
lihui 已提交
283 284
    elif ((${initd_mod}==3)); then
        ${csudo} update-rc.d -f taosd remove || :
H
Hui Li 已提交
285
        ${csudo} update-rc.d -f tarbitratord remove || :
L
lihui 已提交
286 287
    fi
    
P
plum-lihui 已提交
288
    ${csudo} rm -f ${service_config_dir}/taosd || :
H
Hui Li 已提交
289
    ${csudo} rm -f ${service_config_dir}/tarbitratord || :
L
lihui 已提交
290 291 292 293
    
    if $(which init &> /dev/null); then
        ${csudo} init q || :
    fi
H
hzcheng 已提交
294 295 296 297 298 299 300 301
}

function install_service_on_sysvinit() {
    clean_service_on_sysvinit

    sleep 1

    # Install taosd service
L
lihui 已提交
302 303 304 305

    if ((${os_type}==1)); then
        ${csudo} cp -f ${script_dir}/init.d/taosd.deb ${install_main_dir}/init.d/taosd
        ${csudo} cp    ${script_dir}/init.d/taosd.deb ${service_config_dir}/taosd && ${csudo} chmod a+x ${service_config_dir}/taosd
H
Hui Li 已提交
306 307
        ${csudo} cp -f ${script_dir}/init.d/tarbitratord.deb ${install_main_dir}/init.d/tarbitratord
        ${csudo} cp    ${script_dir}/init.d/tarbitratord.deb ${service_config_dir}/tarbitratord && ${csudo} chmod a+x ${service_config_dir}/tarbitratord
L
lihui 已提交
308 309 310
    elif ((${os_type}==2)); then
        ${csudo} cp -f ${script_dir}/init.d/taosd.rpm ${install_main_dir}/init.d/taosd
        ${csudo} cp    ${script_dir}/init.d/taosd.rpm ${service_config_dir}/taosd && ${csudo} chmod a+x ${service_config_dir}/taosd
H
Hui Li 已提交
311 312
        ${csudo} cp -f ${script_dir}/init.d/tarbitratord.rpm ${install_main_dir}/init.d/tarbitratord
        ${csudo} cp    ${script_dir}/init.d/tarbitratord.rpm ${service_config_dir}/tarbitratord && ${csudo} chmod a+x ${service_config_dir}/tarbitratord
L
lihui 已提交
313 314 315 316 317 318 319 320
    fi
    
    #restart_config_str="taos:2345:respawn:${service_config_dir}/taosd start"
    #${csudo} grep -q -F "$restart_config_str" /etc/inittab || ${csudo} bash -c "echo '${restart_config_str}' >> /etc/inittab"
    
    if ((${initd_mod}==1)); then
        ${csudo} chkconfig --add taosd || :
        ${csudo} chkconfig --level 2345 taosd on || :
H
Hui Li 已提交
321 322
        ${csudo} chkconfig --add tarbitratord || :
        ${csudo} chkconfig --level 2345 tarbitratord on || :
L
lihui 已提交
323 324 325
    elif ((${initd_mod}==2)); then
        ${csudo} insserv taosd || :
        ${csudo} insserv -d taosd || :
H
Hui Li 已提交
326 327
        ${csudo} insserv tarbitratord || :
        ${csudo} insserv -d tarbitratord || :
L
lihui 已提交
328 329
    elif ((${initd_mod}==3)); then
        ${csudo} update-rc.d taosd defaults || :
H
Hui Li 已提交
330
        ${csudo} update-rc.d tarbitratord defaults || :
L
lihui 已提交
331
    fi
H
hzcheng 已提交
332 333 334 335 336 337 338
}

function clean_service_on_systemd() {
    taosd_service_config="${service_config_dir}/taosd.service"

    if systemctl is-active --quiet taosd; then
        echo "TDengine is running, stopping it..."
P
plum-lihui 已提交
339
        ${csudo} systemctl stop taosd &> /dev/null || echo &> /dev/null
H
hzcheng 已提交
340
    fi
P
plum-lihui 已提交
341
    ${csudo} systemctl disable taosd &> /dev/null || echo &> /dev/null
H
hzcheng 已提交
342

P
plum-lihui 已提交
343
    ${csudo} rm -f ${taosd_service_config}
S
slguan 已提交
344 345 346 347 348 349 350 351 352 353

    if [ "$verMode" == "cluster" ]; then
        nginx_service_config="${service_config_dir}/nginxd.service"
	
        if systemctl is-active --quiet nginxd; then
            echo "Nginx for TDengine is running, stopping it..."
            ${csudo} systemctl stop nginxd &> /dev/null || echo &> /dev/null
        fi
        ${csudo} systemctl disable nginxd &> /dev/null || echo &> /dev/null
	
H
Hui Li 已提交
354 355 356 357 358 359 360 361 362 363 364
        ${csudo} rm -f ${nginx_service_config}              

        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}
	  fi
S
slguan 已提交
365
}
H
hzcheng 已提交
366 367 368 369 370 371 372 373

# taos:2345:respawn:/etc/init.d/taosd start

function install_service_on_systemd() {
    clean_service_on_systemd

    taosd_service_config="${service_config_dir}/taosd.service"

P
plum-lihui 已提交
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
    ${csudo} bash -c "echo '[Unit]'                             >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'Description=TDengine server service' >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'After=network-online.target'        >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'Wants=network-online.target'        >> ${taosd_service_config}"
    ${csudo} bash -c "echo                                      >> ${taosd_service_config}"
    ${csudo} bash -c "echo '[Service]'                          >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'Type=simple'                        >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'ExecStart=/usr/bin/taosd'           >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'LimitNOFILE=infinity'               >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'LimitNPROC=infinity'                >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'LimitCORE=infinity'                 >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'TimeoutStartSec=0'                  >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'StandardOutput=null'                >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'Restart=always'                     >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'StartLimitBurst=3'                  >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'StartLimitInterval=60s'             >> ${taosd_service_config}"
    ${csudo} bash -c "echo                                      >> ${taosd_service_config}"
    ${csudo} bash -c "echo '[Install]'                          >> ${taosd_service_config}"
    ${csudo} bash -c "echo 'WantedBy=multi-user.target'         >> ${taosd_service_config}"
    ${csudo} systemctl enable taosd
S
slguan 已提交
394 395

    if [ "$verMode" == "cluster" ]; then		
H
Hui Li 已提交
396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
    
        tarbitratord_service_config="${service_config_dir}/tarbitratord.service"

        ${csudo} bash -c "echo '[Unit]'                                  >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'Description=TDengine arbitrator service' >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'After=network-online.target'             >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'Wants=network-online.target'             >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo                                           >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo '[Service]'                               >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'Type=simple'                             >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'ExecStart=/usr/bin/tarbitrator'          >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'LimitNOFILE=infinity'                    >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'LimitNPROC=infinity'                     >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'LimitCORE=infinity'                      >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'TimeoutStartSec=0'                       >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'StandardOutput=null'                     >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'Restart=always'                          >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'StartLimitBurst=3'                       >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'StartLimitInterval=60s'                  >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo                                           >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo '[Install]'                               >> ${tarbitratord_service_config}"
        ${csudo} bash -c "echo 'WantedBy=multi-user.target'              >> ${tarbitratord_service_config}"
        ${csudo} systemctl enable tarbitratord  
    
S
slguan 已提交
420
        nginx_service_config="${service_config_dir}/nginxd.service"
H
Hui Li 已提交
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441
        ${csudo} bash -c "echo '[Unit]'                                             >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'Description=Nginx For TDengine Service'             >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'After=network-online.target'                        >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'Wants=network-online.target'                        >> ${nginx_service_config}"
        ${csudo} bash -c "echo                                                      >> ${nginx_service_config}"
        ${csudo} bash -c "echo '[Service]'                                          >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'Type=forking'                                       >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'PIDFile=/usr/local/nginxd/logs/nginx.pid'           >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'ExecStart=/usr/local/nginxd/sbin/nginx'             >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'ExecStop=/usr/local/nginxd/sbin/nginx -s stop'      >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'LimitNOFILE=infinity'                               >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'LimitNPROC=infinity'                                >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'LimitCORE=infinity'                                 >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'TimeoutStartSec=0'                                  >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'StandardOutput=null'                                >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'Restart=always'                                     >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'StartLimitBurst=3'                                  >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'StartLimitInterval=60s'                             >> ${nginx_service_config}"
        ${csudo} bash -c "echo                                                      >> ${nginx_service_config}"
        ${csudo} bash -c "echo '[Install]'                                          >> ${nginx_service_config}"
        ${csudo} bash -c "echo 'WantedBy=multi-user.target'                         >> ${nginx_service_config}"
S
slguan 已提交
442 443 444 445 446 447
        if ! ${csudo} systemctl enable nginxd &> /dev/null; then
            ${csudo} systemctl daemon-reexec
            ${csudo} systemctl enable nginxd
        fi
        ${csudo} systemctl start nginxd
	fi
H
hzcheng 已提交
448 449 450
}

function install_service() {
P
plum-lihui 已提交
451
    if ((${service_mod}==0)); then
H
hzcheng 已提交
452
        install_service_on_systemd
P
plum-lihui 已提交
453
    elif ((${service_mod}==1)); then
H
hzcheng 已提交
454
        install_service_on_sysvinit
P
plum-lihui 已提交
455
    else
L
lihui 已提交
456
        # must manual stop taosd
P
plum-lihui 已提交
457
        kill_taosd
H
hzcheng 已提交
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491
    fi
}

vercomp () {
    if [[ $1 == $2 ]]; then
        return 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
            return 1
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            return 2
        fi
    done
    return 0
}

function is_version_compatible() {

L
lihui 已提交
492
    curr_version=$(${bin_dir}/taosd -V | head -1 | cut -d ' ' -f 3)
H
hzcheng 已提交
493

L
lihui 已提交
494
    min_compatible_version=$(${script_dir}/bin/taosd -V | head -1 | cut -d ' ' -f 5)
H
hzcheng 已提交
495 496 497 498 499 500 501 502 503 504 505 506 507 508 509

    vercomp $curr_version $min_compatible_version
    case $? in
        0) return 0;;
        1) return 0;;
        2) return 1;;
    esac
}

function update_TDengine() {
    # Start to update
    if [ ! -e taos.tar.gz ]; then
        echo "File taos.tar.gz does not exist"
        exit 1
    fi
L
lihui 已提交
510
    tar -zxf taos.tar.gz
H
hzcheng 已提交
511 512 513 514 515 516 517

    # Check if version compatible
    if ! is_version_compatible; then
        echo -e "${RED}Version incompatible${NC}"
        return 1
    fi

L
lihui 已提交
518
    echo -e "${GREEN}Start to update TDengine...${NC}"
H
hzcheng 已提交
519 520
    # Stop the service if running
    if pidof taosd &> /dev/null; then
P
plum-lihui 已提交
521 522 523 524
        if ((${service_mod}==0)); then
            ${csudo} systemctl stop taosd || :
        elif ((${service_mod}==1)); then
            ${csudo} service taosd stop || :
H
hzcheng 已提交
525
        else
P
plum-lihui 已提交
526
            kill_taosd
H
hzcheng 已提交
527 528 529 530 531 532 533 534 535
        fi
        sleep 1
    fi
    
    install_main_path

    install_log
    install_header
    install_lib
L
lihui 已提交
536 537 538
    if [ "$pagMode" != "lite" ]; then
      install_connector
    fi
H
hzcheng 已提交
539 540 541 542 543
    install_examples
    if [ -z $1 ]; then
        install_bin
        install_service
        install_config
S
slguan 已提交
544 545 546 547 548 549 550 551 552 553 554 555 556 557 558
		
		if [ "$verMode" == "cluster" ]; then    
            # Check if openresty is installed
            openresty_work=false

            # 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 TDengine is updated successfully!${NC}"
                    openresty_work=true
                else
                    echo -e "\033[44;31;5mNginx for TDengine does not work! Please try again!\033[0m"
                fi
            fi
		fi 
H
hzcheng 已提交
559 560 561 562 563

        echo
        echo -e "\033[44;32;1mTDengine is updated successfully!${NC}"
        echo
        echo -e "${GREEN_DARK}To configure TDengine ${NC}: edit /etc/taos/taos.cfg"
P
plum-lihui 已提交
564 565 566
        if ((${service_mod}==0)); then
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: ${csudo} systemctl start taosd${NC}"
        elif ((${service_mod}==1)); then
L
lihui 已提交
567
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: ${csudo} service taosd start${NC}"
H
hzcheng 已提交
568
        else
P
plum-lihui 已提交
569
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: ./taosd${NC}"
H
hzcheng 已提交
570 571
        fi

S
slguan 已提交
572 573 574 575 576 577 578 579 580
        if [ "$verMode" == "cluster" ]; then  
            if [ ${openresty_work} = 'true' ]; then
                echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell OR from ${GREEN_UNDERLINE}http://127.0.0.1:${nginx_port}${NC}"
            else
                echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell${NC}"
            fi
        else
		    echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell${NC}"
        fi
H
hzcheng 已提交
581 582 583
        echo
        echo -e "\033[44;32;1mTDengine is updated successfully!${NC}"
    else
L
lihui 已提交
584
        install_bin
H
hzcheng 已提交
585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
        install_config

        echo
        echo -e "\033[44;32;1mTDengine client is updated successfully!${NC}"
    fi

    rm -rf $(tar -tf taos.tar.gz)
}

function install_TDengine() {
    # Start to install
    if [ ! -e taos.tar.gz ]; then
        echo "File taos.tar.gz does not exist"
        exit 1
    fi
L
lihui 已提交
600
    tar -zxf taos.tar.gz
H
hzcheng 已提交
601

L
lihui 已提交
602
    echo -e "${GREEN}Start to install TDengine...${NC}"
H
hzcheng 已提交
603 604 605 606 607 608 609 610 611 612
    
	  install_main_path
	   
    if [ -z $1 ]; then
        install_data
    fi 
    
    install_log 
    install_header
    install_lib
L
lihui 已提交
613 614 615
    if [ "$pagMode" != "lite" ]; then
      install_connector
    fi
H
hzcheng 已提交
616 617 618 619 620 621
    install_examples

    if [ -z $1 ]; then # install service and client
        # For installing new
        install_bin
        install_service
S
slguan 已提交
622 623 624 625 626 627 628 629 630 631 632 633 634 635

        if [ "$verMode" == "cluster" ]; then  
            openresty_work=false
            # 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 TDengine is installed successfully!${NC}"
                    openresty_work=true
                else
                    echo -e "\033[44;31;5mNginx for TDengine does not work! Please try again!\033[0m"
                fi
            fi
        fi
		
H
hzcheng 已提交
636 637 638 639 640 641 642
        install_config	

        # Ask if to start the service
        echo
        echo -e "\033[44;32;1mTDengine is installed successfully!${NC}"
        echo
        echo -e "${GREEN_DARK}To configure TDengine ${NC}: edit /etc/taos/taos.cfg"
P
plum-lihui 已提交
643 644 645
        if ((${service_mod}==0)); then
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: ${csudo} systemctl start taosd${NC}"
        elif ((${service_mod}==1)); then
L
lihui 已提交
646
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: ${csudo} service taosd start${NC}"
H
hzcheng 已提交
647
        else
L
lihui 已提交
648
            echo -e "${GREEN_DARK}To start TDengine     ${NC}: taosd${NC}"
H
hzcheng 已提交
649
        fi
S
slguan 已提交
650 651 652 653 654 655 656 657 658 659 660
		
        if [ "$verMode" == "cluster" ]; then  
           if [ ${openresty_work} = 'true' ]; then
                echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell OR from ${GREEN_UNDERLINE}http://127.0.0.1:${nginx_port}${NC}"
           else
                echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell${NC}"
            fi
		else
            echo -e "${GREEN_DARK}To access TDengine    ${NC}: use ${GREEN_UNDERLINE}taos${NC} in shell${NC}"
        fi
		
H
hzcheng 已提交
661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678
        echo
        echo -e "\033[44;32;1mTDengine is installed successfully!${NC}"
    else # Only install client
        install_bin
        install_config

        echo
        echo -e "\033[44;32;1mTDengine client is installed successfully!${NC}"
    fi

    rm -rf $(tar -tf taos.tar.gz)
}


## ==============================Main program starts from here============================
if [ -z $1 ]; then
    # Install server and client
    if [ -x ${bin_dir}/taosd ]; then
S
slguan 已提交
679
        update_flag=1
H
hzcheng 已提交
680 681 682 683 684 685 686
        update_TDengine
    else
        install_TDengine
    fi
else
    # Only install client
    if [ -x ${bin_dir}/taos ]; then
S
slguan 已提交
687
        update_flag=1
H
hzcheng 已提交
688 689 690 691 692
        update_TDengine client
    else
        install_TDengine client
    fi
fi