Shell腳本實現應用自動安裝部署

Windows版本的安裝包直接使用了inno setup將應用及所需軟件壓成exe文件。
      Linux版本當時是把應用及軟件交給了客戶,並寫了安裝步驟文檔,但是客戶不滿意,希望做成類似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,錯誤爲1
if [ "$?" != 0 ] ;
then
 //echo 爲輸出到屏幕
 echo "Please check your need software"
 //exit 0 爲強制終止腳本
 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
}
 
echo "Please choose to install or uninstall? (Installation: 1 / Uninstall: 0)"
 
//接收鍵盤輸入,並把輸入的值存放在userinput變量中
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 755 jdk-6u29-linux-i586-rpm.bin 

 

./jdk-6u29-linux-i586-rpm.bin
//安裝jdk的時候需要回車確認一下jdk的許可協議
 
#########################################################################
 
//rpm包的jdk安裝完成會自動生成 java/jdk**** 的文件夾,判斷是否生成了jdk文件夾
if [ ! -d java/jdk1.6* ] ;
then
echo "I cann't find JDK directory."
rollback;
exit 0
fi
 
############################## Environment Variables #########################
 
//將一段文本追加到指定文件尾部(寫入環境變量)
cat >> /etc/profile << EFF
 
JAVA_HOME=/usr/java/jdk1.6.0_29
JRE_HOME=\$JAVA_HOME/jre
CLASSPATH=:\$JAVA_HOME/lib:\$JRE_HOME/lib
PATH=\$JAVA_HOME:/bin:\$JRE_HOME/bin:\$PATH
export JAVA_HOME JRE_HOME CLASSPATH PATH
 
EFF
 //使環境變量立即生效
 source /etc/profile
 
#########################################################################
 
//判斷環境變量是否已經生效
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 755 MySQL-server-5.5.31-2.rhel5.i386.rpm
rpm -ivh MySQL-server-5.5.31-2.rhel5.i386.rpm
 
################### Copy MySQL configuration file ##############################
 
 //將一份已經準備好的配置文件替換mysql現有配置文件
 chmod 755 mysql.cnf
 cp mysql.cnf /usr/share/mysql/my-medium.cnf
 cp mysql.cnf /etc/my.cnf
 
 //啓動或重啓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
 fi
 
 //安裝mysql用戶端
 chmod 755 MySQL-client-5.5.31-2.rhel5.i386.rpm
 rpm -ivh MySQL-client-5.5.31-2.rhel5.i386.rpm
 
################################ Tomcat ##################################
 
 
 //賦權並解壓tomcat
 chmod 755 apache-tomcat*.tar*
 tar zxvf apache-tomcat*.tar*
 mv apache-tomcat-6.0.32/ /usr/tomcat-medical/
       
################################ Medical ##################################
 
 //賦權並解壓應用到tomcat/webapps目錄下
 chmod 755 medical.zip
 unzip medical.zip -d /usr/tomcat-medical/webapps/
 
 //判斷當前目錄下是否存在Install.zdt文件,存在則copy文件到指定目錄下
 if [ -e Install.zdt ] ;
 then
   cp Install.zdt /usr/tomcat-medical/webapps/medical/WEB-INF/data/installer/
 fi
 
########################### Change Password ################################
 
 //等待5秒
 sleep 5
 //mysql默認密碼爲空,修改mysql密碼(需要當前用戶有mysql執行權限)
 mysqladmin flush-privileges password '******'
 
########################## Environment Variables #############################
 
//環境變量

  cat >> /etc/profile << TTD 

  TOMCAT_HOME=/usr/tomcat-medical/ 

  PATH=\$PATH:\$TOMCAT_HOME/bin/:/usr/local/apache2/bin: 

  export JAVA_HOME JRE_HOME CLASSPATH PATH TOMCAT_HOME 

  TTD 

 

 
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 ###############################
 
//把tomcat啓動腳本加入rc.local文件中實現開機自動啓動
cat >> /etc/rc.local << ASU
 
/usr/tomcat-medical/bin/startup.sh
 
ASU
 
 //設置mysql服務開機自動啓動
 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
 
 rm -rf /usr/tomcat-medical/
 
 echo "Uninstalling JDK......"
 rpm -e jdk-1.6.0_29-fcs.i586
 
 echo "Uninstalling MySQL......"
 
 netstat -apn | grep 3306
 if [ "$?" == 0 ] ;
 then
  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 is complete please modify environment variables."
 
//如果用戶輸入的不是1或0則執行這裏
else
 echo "You can only enter 1 or 0."
 
fi 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章