Shell脚本实现应用自动安装部署
该版本的安装程序采用了inno setup技术来打包应用和相关软件为.exe文件。
在那个版本中,我们将应用和软件交付给客户,并编写了详细的安装指南。然而客户对此并不满意,并希望像Windows版那样只需执行下一步即可完成应用程序和软件的安装。于是乎我编写了一个简短而有效的Shell脚本。
安装脚本所需文件 (与shell脚本文件在同一目录下)
medical.zip (应用)
Install.zdt(数据初始化文件,非必须)
medical.tar.gz (软件包)
medical.tar.gz包内包含:
apache-tomcat.tar.gz
MySQL-client-5.5.31-2.rhel5.i386.rpm
MySQL-server-5.5.31-2.rhel5.i386.rpm
jdk-6u29-linux-i586-rpm.bin
mysql.cnf
默认安装位置:
JDK默认安装路径为/usr/java/ 下
MySQL默认安装路径为/usr/share/mysql/ 下
Tomcat默认安装路径为/usr/tomcat-medical/ 下
#!/bin/bash //指定命令路径 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH //获取执行命令的结果码 ? 是用来获取执行命令的结果码的?通常正常情况下结果码应为0表示成功 if [ "?" -ne 0 ] ; then //请输出操作信息 echo "Please check your need software" //强制终止脚本运行 exit 0 fi //定义回滚功能函数(用于删除解压后的文件) rollback() { rm -rf apache-tomcat.tar.gz rm -rf MySQL-client-5.5.31-2.rhel5.i386.rpm rm -rf MySQL-server-5.5.31-2.rhel5.i386.rpm rm -rf jdk-6u29-linux-i586-rpm.bin rm -rf mysql.cnf } //请求用户确认操作并获取响应 read userinput //解析用户的确认信息 if [ "$userinput" == '1' ] ; then
//判断文件是否存在
if [ ! -e medical.tar.gz ] ; then
echo "I cann't find medical.tar.gz file."
exit 0
else //存在则赋权并解压
chmod 755 medical.tar.gz
tar zxvf medical.tar.gz
fi
################################### Verify #################################
//判断本机是否安装了jdk rpm -qa | grep jdk if [ "$?" == 0 ] ; then
echo "Already installed JDK, please uninstall!"
rollback;
exit 0
fi //判断8080端口是否被占用 netstat -apn | grep 8080 if [ "$?" == 0 ] ; then
echo "8080 port is occupied!"
rollback;
exit 0
fi //判断本机是否安装了mysql rpm -qa | grep -i mysql if [ "$?" == 0 ] ; then
echo "The system has been installed MySQL.Please run the uninstall!"
rollback;
exit 0
fi //判断目录是否已存在 if [ -d /usr/tomcat-medical ] ; then
echo "/usr/tomcat-medical Directory exists"
rollback;
exit 0
fi //判断3306端口是否被占用 netstat -apn | grep 3306 if [ "$?" == 0 ] ; then
echo "3306 port is occupied"
rollback;
exit 0
fi
##################################### JDK ############################## # #
//赋权并安装jdk
chmod +x jdk-6u29-linux-i586-rpm.bin
./sdk-6u29-linux-i586-rpm.bin
//安装jdk时需要回车确认一下 JDK的许可协议
//赋权并安装jdk
chmod +x jdk-6u29-linux-i586-rpm.bin
./sdk-6u29-linux-i586-rpm.bin
//安装jdk时需要回车确认一下 JDK的许可协议
######################################################################## #
当rpm包安装完成后会自动创建java/jdk**目录,并检测是否生成了java/jdk目录
echo "I cann't find JDK directory."
rollback;
exit 0
fi
############################## Environment Variables ######################## #
//将一段文本附加到指定文件尾部并将其内容写入环境变量
append_to_file << /etc/profile << EFF
set Java JDK安装路径为/usr/java/jdk1.6.0_29
set Java RuntimEnvironment安装路径为$JAVA_HOME/jre
拼接系统Java JDK和Java RuntimEnvironment类库路径至CLASSPATH环境变量
将系统Java JDK、/bin/以及Java RuntimEnvironment bin目录添加至PATH环境变量中
设置上述四个参数为可执行的环境变量
EFF
#########################################################################
//判断环境变量是否已经生效 java -version if [ "$?" != 0 ] ; then
echo "I cann't set java path."
rollback;
exit 0
fi
####################### Delete JDK Installation file ######################## # # # # #
rm -rf jdk-6u29-linux-i586.rpm rm -rf sun-javadb*
################################# MySQL ################################# #
// 赋予权限并安装MySQL服务
chmod 754 MySQL-server-4.x.x rpm.rpm
// 使用rpm命令以获取MySQL服务器所需的所有依赖项
rpm -ivh MySQL-server-4.x.x rpm.rpm
// 赋予权限并安装MySQL服务
chmod 740 MySQL-server-y.y.y rpm.rpm
// 使用rpm命令以获取MySQL服务器所需的所有依赖项
rpm -i –lock MySQL-server-y.y.y rpm.rpm
################### Copy MySQL configuration file ########################### # # #
// 备份MySQL主配置文件
chmod 755 mysql.conf
复制mysql.conf至/usr/share/mysql目录
复制mysql.conf至/etc目录
// 检查并重启MySQL服务
netstat -apn | grep 3306
if [ "$?" != 0 ]; then
service mysql start
else
service mysql restart
fi //判断mysql是否启动成功 netstat -apn | grep 3306 if [ "$?" != 0 ] ; then
echo "MySQL service failed to start!"
rollback;
exit 0
findinstall // 检查mysql用户安装情况
set mode=755 # 设置文件权限为755
rpm install -v # 安装mysql客户端程序
################################ Tomcat ##################################
// 舵权后解压tomcat
chmod 755 /usr/local/bin/apache-tomcat*.tar*
使用 tar 命令解压压缩过的 tar 文件
tar zxvf /usr/local/bin/apache-tomcat*.tar*
将解压后的tomcat程序移动到指定目录
mv apache-tomcat-6.0.32/ /usr/tomcat-medical/
################################ Medical ################################# #
//对medical.zip文件进行赋权压缩并解压至指定路径
chmod 755 medical.zip
unzip medical.zip -d /usr/tomcat-medical/webapps/
//检查当前目录中是否包含Instal zdt文件;如果存在,则复制至目标路径
if [ -e Install.zdt ] ; then
执行以下复制操作:将名为zdt的安装文件从当前位置复制到配置目录下的指定位置。
fi
########################### Change Password ############################### #
//等待五秒 sleep five seconds //MySQL默认密码为空,更改MySQL密码(该用户具有执行MySQL指令的权限) mysqladmin flush-privileges password ' ******'
########################## Environment Variables ######################### # # # #
//环境变量设置 通过管道将输出重定向至tedd日志文件并捕获错误信息 TOMCAST_Home位置配置为/usr/tomcat-medical路径 系统路径变量PATH被重新定义为当前工作目录下的bin目录以及Apache服务器相关目录 同时配置多个环境变量:JAVA_HOME JRE_Home CLASSPATH PATH以及TOMCAST_Home
source /etc/profile
#########################################################################
//启动tomcat sh /usr/tomcat-medical/bin/startup.sh //这里延迟5秒等待tomcat启动完成 sleep 5 //判断tomcat状态 curl 127.0.0.1:8080 | grep "Thanks for using Tomcat" if [ "$?" != 0 ] ; then
echo "I think install tomcat is unfinished ."
rollback;
exit 0
fi rollback;
######################## Auto Start Up Services ############################ # # #
在RC本地文件中添加Tomcat启动脚本以实现开机自动启动配置。 cat >> /etc/rc.local << ASU /usr/tomcat-medical/bin/startup.sh ASU 启动MySQL服务以实现开机自动重启配置。 chkconfig --add mysql
在RC本地文件中添加Tomcat启动脚本以实现开机自动启动配置。\n\n cat >> /etc/rc.local << ASU\n\n /usr/tomcat-medical/bin/startup.sh\n\n ASU\n\n 启动MySQL服务以实现开机自动重启配置。\n\n chkconfig --add mysql
########################################################################
//如果用户输入0的情况下执行卸载程序 elif [ "$userinput" == '0' ] ; then
echo "Uninstalling Tomcat......" netstat -apn | grep 8080 if [ "$?" == 0 ] ; then
sh /usr/tomcat-medical/bin/shutdown.sh
fi清除该目录位置
echo输出卸载JDK提示信息
rpm执行JDK版本号指定的卸载操作
echo输出卸载MySQL提示信息
netstat通过管道连接获取端口状态并检查是否已断开连接
if[$?等于零则继续运行后续代码]
service mysql stop
fi rpm -e MySQL-client-5.5.31-2.rhel5.i386 rpm -e MySQL-server-5.5.31-2.rhel5.i386 echo "Uninstall operation completed, please ensure that environment variables are updated."
//如果用户输入的不是1或0则执行这里 else
echo "You can only enter 1 or 0."
| fi |
|---|
