#!/bin/bash #################### init system env ################################################ ### 检测操作系统位数,如果非64位操作系统,则退出 SYSBIT=`getconf LONG_BIT` if [ X"${SYSBIT}" != X"64" ]; then echo "当前系统非x64,不能执行安装!" exit 1 fi ARM=`arch` #################### 安装OpenJDK ################################################ installJDK(){ echo "************[prepare to install OpenJDK]准备开始装OpenJDK >>>>>>>>>>>>>" echo "" JDK_HOME=${BASE_DIR}/jdk if [ ! -d ${JDK_HOME} ]; then tar -zxf package/jdk_x64_linux_8u392b08.tar.gz -C ${BASE_DIR} ln -s ${BASE_DIR}/jdk8u392-b08 ${BASE_DIR}/jdk echo ${JDK_HOME}" installed." if [ `grep -c JAVA_HOME=${JDK_HOME} /etc/profile` -eq '0' ]; then echo 'export JAVA_HOME='${JDK_HOME} >> /etc/profile echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile source /etc/profile fi else echo ${JDK_HOME}" found, 跳过JDK." fi JAVA_PATH=${JDK_HOME}/bin/java echo "" sleep 1 } #################### 安装Nginx ################################################ installNginx(){ echo "************[prepare to install Nginx]准备开始装Nginx >>>>>>>>>>>>>" echo "" NGX_HOME=${BASE_DIR}/nginx if [ ! -d ${NGX_HOME} ]; then tar -zxf package/nginx.tar.gz -C ${BASE_DIR} echo ${NGX_HOME}" installed." sed -i 's#/etc/nginx/conf.d#'${BASE_DIR}'/conf#g' ${NGX_HOME}/conf/nginx.conf echo ' echo "Starting nginx"' > ${BIN_DIR}/startNginx.sh echo ${NGX_HOME}'/sbin/nginx -p '${NGX_HOME}' -c '${NGX_HOME}'/conf/nginx.conf' >> ${BIN_DIR}/startNginx.sh echo ' echo "Stopping nginx"' > ${BIN_DIR}/stopNginx.sh echo ${NGX_HOME}'/sbin/nginx -s stop -p '${NGX_HOME} >> ${BIN_DIR}/stopNginx.sh chmod +x ${BIN_DIR}/startNginx.sh chmod +x ${BIN_DIR}/stopNginx.sh else echo ${NGX_HOME}" found, 跳过Nginx." fi echo "" sleep 1 } #################### 安装Redis ################################################ installRedis(){ echo "************[prepare to install Redis]准备开始安装Redis >>>>>>>>>>>>>" echo "" REDIS_HOME=${BASE_DIR}/redis if [ ! -d ${REDIS_HOME} ]; then tar -zxf package/redis-5.0.14-x86_64.tar.gz -C ${BASE_DIR} echo ${REDIS_HOME}" installed." sed -i 's/daemonize no/daemonize yes/' ${REDIS_HOME}/conf/redis.conf sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' ${REDIS_HOME}/conf/redis.conf sed -i 's/# requirepass foobared/requirepass '${REDIS_PASS}'/' ${REDIS_HOME}/conf/redis.conf echo "cd "${REDIS_HOME} > ${BIN_DIR}/startRedis.sh echo ${REDIS_HOME}/bin/redis-server ${REDIS_HOME}/conf/redis.conf >> ${BIN_DIR}/startRedis.sh echo 'if [ -n "$(ps -ef | grep redis-server | grep -v grep | awk '"'"'{print $2}'"'"')" ]; then' > ${BIN_DIR}/stopRedis.sh echo " rm -f ${BASE_DIR}/RUNNING.lock" >> ${BIN_DIR}/stopRedis.sh echo ' kill $(ps -ef | grep redis-server | grep -v grep | awk '"'"'{print $2}'"'"')' >> ${BIN_DIR}/stopRedis.sh echo ' echo "redis-server is stopping"' >> ${BIN_DIR}/stopRedis.sh echo 'else' >> ${BIN_DIR}/stopRedis.sh echo ' echo "redis-server is not running"' >> ${BIN_DIR}/stopRedis.sh echo 'fi' >> ${BIN_DIR}/stopRedis.sh chmod +x ${BIN_DIR}/startRedis.sh chmod +x ${BIN_DIR}/stopRedis.sh else echo ${REDIS_HOME}" found, 跳过Redis." fi echo "" sleep 1 } #################### 安装New CAC ################################################ installNewCAC(){ echo "************[installing New CAC]正在安装New CAC >>>>>>>>>>>>>" echo "" APP_NAME=cac-backend-0.0.1 rm -rf ${CAC_DIR}/* cp package/${APP_NAME}.jar ${CAC_DIR}/ unzip -q package/static.zip -d ${CAC_DIR}/ cp package/cac.conf ${BASE_DIR}/conf/ sed -i 's#static#'${CAC_DIR}'/static#g' ${BASE_DIR}/conf/cac.conf echo ${CAC_DIR}" installed." unzip -qj package/${APP_NAME}.jar BOOT-INF/classes/application-prod.yml -d ${CAC_DIR}/config sleep 1 sed -i 's/iec104/'${DB_INS}'/' ${CAC_DIR}/config/application-prod.yml sed -i 's/127.0.0.1:3306/'${DB_IP}':'${DB_PORT}'/' ${CAC_DIR}/config/application-prod.yml sed -i 's/username: iec/username: '${DB_USER}'/' ${CAC_DIR}/config/application-prod.yml sed -i 's/password: Iec@1043/password: '${DB_PASS}'/' ${CAC_DIR}/config/application-prod.yml echo '#!/bin/bash' > ${BIN_DIR}/startCac.sh echo 'if [ -n "$(ps -ef | grep '${APP_NAME}' | grep -v grep | awk '"'"'{print $2}'"'"')" ]; then' >> ${BIN_DIR}/startCac.sh echo ' echo "'${APP_NAME}' is running"' >> ${BIN_DIR}/startCac.sh echo 'else' >> ${BIN_DIR}/startCac.sh echo " cd "${CAC_DIR} >> ${BIN_DIR}/startCac.sh echo ' echo "Starting '${APP_NAME}'"' >> ${BIN_DIR}/startCac.sh echo " nohup ${JAVA_PATH} -jar ${APP_NAME}.jar --spring.profiles.active=prod >/dev/null 2>&1 &" >> ${BIN_DIR}/startCac.sh echo " rm -f ${CAC_DIR}/RUNNING.lock" >> ${BIN_DIR}/startCac.sh echo 'fi' >> ${BIN_DIR}/startCac.sh echo '#!/bin/bash' > ${BIN_DIR}/stopCac.sh echo 'if [ -n "$(ps -ef | grep '${APP_NAME}' | grep -v grep | awk '"'"'{print $2}'"'"')" ]; then' >> ${BIN_DIR}/stopCac.sh echo " rm -f ${CAC_DIR}/RUNNING.lock" >> ${BIN_DIR}/stopCac.sh echo ' kill -9 $(ps -ef | grep '${APP_NAME}' | grep -v grep | awk '"'"'{print $2}'"'"')' >> ${BIN_DIR}/stopCac.sh echo ' echo "Stopping '${APP_NAME}'"' >> ${BIN_DIR}/stopCac.sh echo 'else' >> ${BIN_DIR}/stopCac.sh echo ' echo "'${APP_NAME}' is not running"' >> ${BIN_DIR}/stopCac.sh echo 'fi' >> ${BIN_DIR}/stopCac.sh chmod +x ${BIN_DIR}/startCac.sh chmod +x ${BIN_DIR}/stopCac.sh echo "" if [ `grep -c ${BIN_DIR} /etc/profile` -eq '0' ]; then echo 'export PATH=$PATH:'${BIN_DIR} >> /etc/profile source /etc/profile fi sleep 1 } #################### 安装61850 ################################################ install61850(){ echo "************[installing 61850]正在安装61850 >>>>>>>>>>>>>" echo "" QTDIR=${BASE_DIR}/Qt-4.8.6 if [ ! -d ${QTDIR} ]; then tar -zxf package/Qt-4.8.6.tar.gz -C ${BASE_DIR} echo ${QTDIR}" installed." else echo ${QTDIR}" found, 跳过QT." fi echo "" sleep 1 GUI_DIR=${BASE_DIR}/61850_GUI rm -rf ${GUI_DIR} tar -zxf package/61850_GUI.tar.gz -C ${BASE_DIR} echo ${GUI_DIR}" installed." echo "" sleep 1 if [ `grep -c QTDIR=${QTDIR} /etc/profile` -eq '0' ]; then echo 'export QTDIR='${QTDIR} >> /etc/profile echo 'export QT_HOME='${QTDIR} >> /etc/profile echo 'export PATH=$PATH:'${QTDIR}'/bin:'${GUI_DIR} >> /etc/profile echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'${QTDIR}'/lib:'${QTDIR}'/plugins/sqldrivers:'${GUI_DIR} >> /etc/profile source /etc/profile fi sed -i 's/hostname=127.0.0.1/hostname='${DB_IP}'/' ${GUI_DIR}/syscfg.ini sed -i 's/port=3306/port='${DB_PORT}'/' ${GUI_DIR}/syscfg.ini sed -i 's/dbname=cacdb/dbname='${DB_INS}'/' ${GUI_DIR}/syscfg.ini sed -i 's/usrname=root/usrname='${DB_USER}'/' ${GUI_DIR}/syscfg.ini sed -i 's/psw=123456/psw='${DB_PASS}'/' ${GUI_DIR}/syscfg.ini sed -i 's#/home/xydl#'${BASE_DIR}'#g' ${GUI_DIR}/check61850.sh APP_NAME=61850Gui_Release_zhenan echo '#!/bin/bash' > ${BIN_DIR}/start61850.sh echo 'export QTDIR='${QTDIR} >> ${BIN_DIR}/start61850.sh echo 'export QT_HOME='${QTDIR} >> ${BIN_DIR}/start61850.sh echo 'export PATH=$PATH:'${QTDIR}'/bin:'${GUI_DIR} >> ${BIN_DIR}/start61850.sh echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:'${QTDIR}'/lib:'${QTDIR}'/plugins/sqldrivers:'${GUI_DIR} >> ${BIN_DIR}/start61850.sh echo 'export DISPLAY=:0' >> ${BIN_DIR}/start61850.sh echo 'if [ -n "$(ps -ef | grep '${APP_NAME}' | grep -v grep | awk '"'"'{print $2}'"'"')" ]; then' >> ${BIN_DIR}/start61850.sh echo ' echo "'${APP_NAME}' is running"' >> ${BIN_DIR}/start61850.sh echo 'else' >> ${BIN_DIR}/start61850.sh echo " cd "${GUI_DIR} >> ${BIN_DIR}/start61850.sh echo ' echo "Starting '${APP_NAME}'"' >> ${BIN_DIR}/start61850.sh echo " nohup ./${APP_NAME} >>out.log 2>&1 &" >> ${BIN_DIR}/start61850.sh echo " rm -f ${GUI_DIR}/RUNNING.lock" >> ${BIN_DIR}/start61850.sh echo 'fi' >> ${BIN_DIR}/start61850.sh mv ${GUI_DIR}/stop61850.sh ${BIN_DIR}/ mv ${GUI_DIR}/check61850.sh ${BIN_DIR}/ echo '#!/bin/bash' > ${BIN_DIR}/restart61850.sh echo 'cd '${BIN_DIR} >> ${BIN_DIR}/restart61850.sh echo "./stop61850.sh" >> ${BIN_DIR}/restart61850.sh echo "./start61850.sh" >> ${BIN_DIR}/restart61850.sh chmod +x ${BIN_DIR}/start61850.sh chmod +x ${BIN_DIR}/stop61850.sh chmod +x ${BIN_DIR}/restart61850.sh chmod +x ${BIN_DIR}/check61850.sh } #################### 加入开机启动 ################################################ setAutoStartCac(){ if [ `grep -c ${BIN_DIR}/startCac.sh /etc/rc.d/rc.local` -eq '0' ]; then echo '#NewCAC' >> /etc/rc.d/rc.local echo ${BIN_DIR}/startCac.sh >> /etc/rc.d/rc.local fi echo "CAC已加入开机启动." echo "" } setAutoStart61850(){ if [ `grep -c ${BIN_DIR}/start61850.sh /etc/rc.d/rc.local` -eq '0' ]; then echo '#61850' >> /etc/rc.d/rc.local echo ${BIN_DIR}/start61850.sh >> /etc/rc.d/rc.local fi echo "61850已加入开机启动." echo "" job="* * * * * ${BIN_DIR}/check61850.sh > /dev/null 2>&1 " crontab -l | grep -v "$job"; echo "$job" | crontab - echo "61850巡检任务已加入crontab." echo "" } setAutoStartRedis(){ if [ `grep -c ${BIN_DIR}/startRedis.sh /etc/rc.d/rc.local` -eq '0' ]; then echo '#Redis' >> /etc/rc.d/rc.local echo ${BIN_DIR}/startRedis.sh >> /etc/rc.d/rc.local echo "Redis已加入开机启动." echo "" fi } setAutoStartNginx(){ if [ `grep -c ${BIN_DIR}/startNginx.sh /etc/rc.d/rc.local` -eq '0' ]; then echo '#Nginx' >> /etc/rc.d/rc.local echo ${BIN_DIR}/startNginx.sh >> /etc/rc.d/rc.local echo "Nginx已加入开机启动." echo "" fi } sed -i 's/\r//g' setup.ini source setup.ini if [ $JDK_INS == 0 ]; then JAVA_PATH=$(which java) if [ -z $JAVA_PATH ]; then JDK_INS=1 fi fi BASE_DIR=${BASE_DIR%*/} BIN_DIR=${BASE_DIR}/bin CAC_DIR=${BASE_DIR}/ncac ### 创建默认的目录 mkdir -p ${BIN_DIR} mkdir -p ${CAC_DIR} mkdir -p ${BASE_DIR}/conf touch /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local if [ $JDK_INS == 1 ]; then installJDK else echo ${JAVA_PATH}" found, 跳过JDK." echo "" fi if [ $REDIS_INS == 1 ]; then installRedis setAutoStartRedis fi installNewCAC if [ $AUTO_START == 1 ]; then setAutoStartCac fi if [ $GUI_INS == 1 ]; then install61850 if [ $AUTO_START == 1 ]; then setAutoStart61850 fi fi if [ $NGINX_INS == 1 ]; then installNginx setAutoStartNginx fi echo "************[install finished.]安装完成. >>>>>>>>>>>>>" echo "" sleep 1 echo "tips: 记得运行 source /etc/profile 使配置生效,之后可以使用${BIN_DIR}目录下的下列脚本" cd ${BIN_DIR} ls echo ""