文档章节

nginx+tomcat+resin+jdk一键自动化安装脚本(1--父shell安装脚本)

王九龙
 王九龙
发布于 2016/01/29 11:45
字数 1451
阅读 81
收藏 4
点赞 2
评论 0

思路:用户执行父shell,父shell匹配用户输入的信息,相应地去执行子shell。

    话不多说,直接看shell。

├── auto_install.sh                ----父shell
├── install_jdk.sh                 ----子shell--jdk安装   
├── install_mysql.sh               ----子shell--mysql安装
├── install_nginx.sh               ----子shell--nginx安装
├── install_resin.sh               ----子shell--resin安装
├── install_tomcat.sh              ----子shell--tomcat安装
├── log                     ----日志输出目录       
├── pkgs                    ----压缩包目录
├── replace_file            ----替换文件目录
└── tmp                     ----临时文本目录

以上是脚本的目录层级关系。下面我将逐一介绍。

首先,介绍父shell----auto_install.sh

#!/bin/bash
#this shell is used to automatically install software
#by wangjiulong
#自动安装程序

#global variables      -----全局变量
export pwd_dir=/data/scripts/auto_install_pkgs
export tar_dir=$pwd_dir/pkgs
export file_dir=$pwd_dir/replace_file
export log_dir=$pwd_dir/log
export log=$log_dir/log.log

export tmp_dir=$pwd_dir/tmp
export tmp_jdk=$tmp_dir/tmp_jdk.txt
export tmp_jdk_version=$tmp_dir/tmp_jdk_version.txt
export tmp_resin=$tmp_dir/tmp_resin.txt
export tmp_tomcat=$tmp_dir/tmp_tomcat.txt
export tmp_mysql=$tmp_dir/tmp_mysql.txt
export tmp_bak=$tmp_dir/tmp_bak.txt

export tmp_nginx_local=$tmp_dir/tmp_nginx_local.txt
export tmp_nginx_local_version=$tmp_dir/tmp_nginx_local_version.txt
export tmp_nginx_pkgtar=$tmp_dir/tmp_nginx_pkgtar.txt
export tmp_nginx_pkgtar_version=$tmp_dir/tmp_nginx_pkgtar_version.txt

#定义数组
declare -a rpm_var
declare -a install_var
declare -a tar_var
declare -a input_var
declare -a correct_var
declare -a wrong_var

#定义预安装的rpm包
rpm_var=(perl-Config-General pcre-devel zlib-devel ncurses-devel gcc-c++ gcc glibc glibc-devel glibc-headers libxml2-devel autoconf curl libcurl-devel krb5-devel e2fsprogs-devel libidn-devel openssl-devel)
#定义本机自动化安装的软件包
tar_var=(jdk-1.6.0_25.tar.gz jdk-1.7.0_17.tar.gz jdk-1.8.0_20.tar.gz mysql-5.5.11.tar.gz mysql-5.6.13.tar.gz nginx-1.9.1.tar.gz nginx-1.9.9.tar.gz resin-3.0.21.tar.gz resin-4.0.23.tar.gz tomcat-7.0.30.tar.gz  tomcat-8.0.30.tar.gz)

#定义日期
#define the time
datef() {
        date "+%Y-%m-%d %H:%M"
}

#定义日志输出函数
#custom log
print_log(){
        if [[ -d $log_dir  ]];then
                echo "[$(datef)]  $1" >> $log
        else
                echo "[$(datef)] log path does not exist,created first" >>$log
                mkdir -p $log_dir
                echo "[$(datef)]  $1" >> $log
        fi
}

#预安装rpm包自动化安装函数。
#Detect dependencies are installed
detect_depend_rpm(){
        #declare -a rpm_var
        #declare -a install_var
        #rpm_var=(perl-Config-General pcre-devel zlib-devel ncurses-devel gcc-c++ gcc glibc glibc-devel glibc-headers libxml2-devel autoconf curl libcurl-devel krb5-devel e2fsprogs-devel libidn-devel openssl-devel)

        #这个for循环用来判断,机器中已经安装了那些rpm包。
        for (( i=0;i<${#rpm_var[@]};i++ ))
        do
                if ! rpm -qi ${rpm_var[$i]} > /dev/null 2>&1
                then
                        install_var[$i]="${rpm_var[$i]}"
                        continue
                fi

                #       echo ${install_var[*]}
                
        done

        #这个for循环,用来安装未安装的rpm包
        for (( j=0;j<${#install_var[@]};j++ ))
        do
        if [[ ! -z ${install_var[$j]} ]];then
                #printf "[$(datef)] ${install_var[j]} not installed!" >> $pwd_dir/log.log$(datef)
                print_log "${install_var[$j]} not installed! next will be installed"
        else
                print_log "Dependencies are installed"
        fi
        done
}

#显示并告知用户,本脚本中,有哪些程序tar包可以自动化安装。如果你需要填加,在这里做相应的修改即可。
#show tar package
show_tar(){

        declare -a tomcat_var   
        declare -a nginx_var
        declare -a resin_var
        declare -a jdk_var
        declare -a mysql_var

        for (( i=0;i<${#tar_var[@]};i++ ))
        do
                #echo "tar_var 下标 ${#tar_var[@]}"             
                tar_name=`echo ${tar_var[$i]} | awk -F.tar.gz '{print$1}' | awk -F- '{print$1}'`
                if [ $tar_name = "tomcat" ];then
                        #给数组赋值To array assignment
                        tomcat_var[$i]="${tar_var[$i]}"
                        continue
                elif [ $tar_name = "nginx" ];then
                        nginx_var[$i]="${tar_var[$i]}"
                        continue
                elif [ $tar_name = "resin" ];then
                        resin_var[$i]="${tar_var[$i]}"
                        continue
                elif [ $tar_name = "jdk" ];then
                        jdk_var[$i]="${tar_var[$i]}"
                        continue
                elif [ $tar_name = "mysql" ];then
                        mysql_var[$i]="${tar_var[$i]}"
                        continue
                else
                        print_log "该软件暂未集成在脚本中,敬请期待ing"
                fi
        done

        printf "脚本中有如下程序安装包\n"
        printf "jdk包\n"
        for m in ${jdk_var[*]} ;do echo $m;done
        printf "tomcat包\n"
        for j in ${tomcat_var[*]} ;do echo $j;done
        printf "nginx包\n"
        for k in ${nginx_var[*]} ;do echo $k;done
        printf "resin包\n"
        for l in ${resin_var[*]} ;do echo $l;done
        printf "mysql包\n"
        for n in ${mysql_var[*]} ;do echo $n;done

        #get user input information
        read -p "请输入要安装的软件,最多只能输入5个:" first second third fourth fifth
        input_var=($first $second $third $fourth $fifth)
        printf "核对信息,请稍后ing\n"
        for o in ${input_var[*]} ;do echo $o;done
        check_input_tar
}

#检查用户输入的tar包信息,用户只有输入正确的tar包后,脚本才会安装。否则提示用户,输入有误。
#check user input tar package
check_input_tar(){

        print_log "正在核对用户输入的tar包ing"
        #额,我承认,我这里的逻辑判断有问题,麻烦大神看下,帮我做相应的修改。这里出现的问题是,即使用户输入
        #正确的tar包,循环匹配,也还是报这个tar包,是错误的。我觉得应该等循环全部结束后,才判断。而不是每次都
        #判断。我还在修改调试中ing
        for (( n=0;n<${#input_var[@]};n++  ))
        do
                m=0
                while [ $m -le ${#tar_var[@]} ]
                do
                        if [ "${input_var[$n]}" = "${tar_var[m]}"  ];then
                                print_log "用户输入正确的tar包如下\n"
                                correct_var[$n]=${input_var[$n]}
                                print_log "${correct_var[$n]}\n"
                        else 
                                print_log "用户输入错误的tar包如下\n"
                                wrong_var[$n]=${input_var[$n]}
                                print_log "${wrong_var[$n]}"    
                       fi
                       let m+=1
                done
        done
        install_tar_package
}

#定义自动化安装函数
#install correct tar package
install_tar_package(){

        for (( i=0;i<${#correct_var[*]};i++ ))
        do
                install_tar_name=`echo "${correct_var[$i]}" | awk -F.tar.gz '{print$1}' | awk -F- '{print$1}'`
                case $install_tar_name in
                                jdk)
                                        print_log "开始安装jdk"
                                        cd $pwd_dir
                                        if [ ! -f install_jdk.sh ];then
                                                print_log "jdk安装脚本有误,请核对后再安装"
                                                exit
                                        else
                                                chmod 755 install_jdk.sh
                                                #performing sub-shell
                                                echo ${correct_var[$i]} > $tmp_jdk
                                                source ./install_jdk.sh
                                                source /etc/profile
                                        fi
                                ;;
                                nginx)
                                        print_log "开始安装nginx"
                                        cd $pwd_dir
                                        if [ ! -f install_nginx.sh ];then
                                                print_log "nginx安装脚本有误,请核对后再安装"
                                                exit
                                        else
                                                chmod 755 install_nginx.sh
                                                #performing sub-shell
                                                echo ${correct_var[$i]} > $tmp_nginx_pkgtar
                                                source ./install_nginx.sh
                                        fi
                                ;;
                                tomcat)
                                        print_log "开始安装tomcat"
                                        print_log "程序先安装jdk,其次再安装tomcat"
                                        cd $pwd_dir
                                        if [ ! -f install_tomcat.sh ];then
                                                print_log "tomcat安装脚本有误,请核对后再安装"
                                                exit
                                        else
                                                chmod 755 install_tomcat.sh
                                                #performing sub-shell
                                                echo ${correct_var[$i]} > $tmp_tomcat
                                                source ./install_tomcat.sh
                                        fi
                                ;;
                                    resin)
                                        print_log "开始安装resin"
                                        print_log "程序先安装jdk,其次再安装resin"
                                        cd $pwd_dir
                                        if [ ! -f install_resin.sh ];then
                                                print_log "resin安装脚本有误,请核对后再安装"
                                                exit
                                        else
                                                chmod 755 install_resin.sh
                                                #performing sub-shell
                                                echo ${correct_var[$i]} > $tmp_resin
                                                source ./install_resin.sh
                                        fi
                                        print_log "开始执行resin子shell了。"
                                ;;

                                *)
                                print_log "输入有误or无包可安装"
                                ;;
                esac
        done
}

show_tar

以上,就是父shell的全部内容,父shell主要的作用如下:

        1、为每台服务器预先安装rpm包。

        2、展示脚本中支持自动化安装的tar包

        3、判断用户输入信息,并与shell脚本中保存的信息匹配,然后调用匹配成功的tar包的安装shell脚本。















© 著作权归作者所有

共有 人打赏支持
王九龙
粉丝 7
博文 15
码字总数 16418
作品 0
广州
shell-菜单自动化软件部署

打印选择菜单,按照选择一键安装不同的Web服务。 示例菜单: [root@oldboy scripts]# shmenu.sh 1.[install lamp] 2.[install lnmp] 3.[exit] pls input the num you want: 要求: 1、当用户...

wangweihang ⋅ 2017/05/11 ⋅ 0

PHP 7.0.0 一键安装脚本

OSCM (Operation System Configure Management) 是我创建的一个自动化运维脚本的项目,旨在提供敏捷运维。传统自动化运维工具例如 ansible, saltstack,puppet 不够灵活,配置繁琐,很多限...

neo-chen ⋅ 2015/12/03 ⋅ 4

菜鸟正在用shell写一个一键安装软件的脚本

我是新手,现正用shell写一个一键安装软件的脚本,软件是公司自己的,安装时里面有几个要选择的项,(比如 安装中要输入 1 2 )等,我不知道怎么用shell去监听,在shell脚本里输入选项(比如...

ITzyy ⋅ 2014/08/31 ⋅ 9

Ubuntu下快速安装Nginx

前言 Linux操作系统有很多不同的发行版本,像Ubuntu、CentOS、RedHat等等,有些是收费的,有些是免费的。接触过Linux的人多少对这些信息有些了解。虽然版本不同,但大部分系统命令还是一致的...

chace0120 ⋅ 2016/06/30 ⋅ 0

LNMT一键安装包 beta 0.2 版本正式发布

LNMT一键安装包是一个用Linux Shell编写的可以为CentOS/RedHat VPS(VDS)或独立主机安装LNMT(Nginx、MySQL、JRE、Tomcat)生产环境的Shell程序。同时提供一些实用的辅助脚本如:可以帮助完成N...

蓝翔妓工 ⋅ 2015/02/27 ⋅ 8

学习Express之部署express-demo

一、服务器准备 服务器ip地址为:172.16.70.174 1.安装 Node.js 参考:http://my.oschina.net/songzhu/blog/608129 2.安装 PM2 PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。 全局安...

CavinTang ⋅ 2016/01/27 ⋅ 0

Fastlane自动提交合并代码

效果: 平常在公司用git提交代码好几行命令,敲都敲吐了,用sourceTree工具切换提交也点吐了.就随手用fastlane写了一个自动化脚本,在自己分支一键提交后将代码合并到远程仓库再切回自己分支. 执...

钟环 ⋅ 04/25 ⋅ 0

ltnmp 2.0.4 发布,一键安装包

ltnmp2.0.4发布,该版本更新了nginx1.9.4,php-5.6.12,推荐更新! 更新内容: 更新composer到最新版,添加完成后添加可执行权限 增加数据库innodb存储引擎默认采用独立表存储数据 去掉添加虚...

技安 ⋅ 2015/08/20 ⋅ 16

Linux系统的pxe自动化运维部署

一、配置虚拟机自动安装 1、根据yum源配置博客:http://13132323.blog.51cto.com/13122323/1951991 首先安装自动应答脚本制作工具yum install system-config-kickstart –y,然后关闭主机的防...

飞天喜欢yu ⋅ 2017/07/29 ⋅ 0

使用ruby的fpm模块实现对二进制MySQL的RPM包制作,实现一键安装

随着互联网的发展,一些互联网企业,甚至于传统企业的服务器也是越来越多。将面临的挑战其中之一就是自动化运维管理。假设我们需要自动化部署很多的应用,而这些应用又很复杂,过程多,需要源...

蓝色_风暴 ⋅ 2017/08/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 31分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 41分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 59分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部