我们的业务使用了nginx、MySQL、php、和tomcat,写了一个自动化安装这些软件的脚本,虽然网上类似的自动安装脚本很多,但这个是自己写的,特此mark一下,希望能给别人一些参考,同时也灰常欢迎看到的朋友们提些改进意见。话不多说,直接上脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 | #!/bin/sh alias echo = 'echo -e' ###判断系统,此脚本只适用于64位系统 machine=` uname -m` if [ $machine != x86_64 ] ; then echo "\e[1;31m \nyour system is 32bit,but this script is only run on 64bit !\n \e[0m" exit -1 fi ###创建保存下载文件的目录 mkdir /usr/local/src/auto_install &> /dev/null source_dir= /usr/local/src/auto_install ###定义一个交互式的选择提示 function interact { echo "Please input \"yes\" or \"no\"" read choice case "$choice" in no) exit 0;; yes ) echo ;; *) echo "\e[1;31mInput Errot! \e[0m" exit -1;; esac } ### 定义一个函数检查上一条命令的执行状态 function check { if [ $? - ne 0 ]; then echo "\e[1;31m\n the last commond exec failed,please check it !\e[0m \n" sleep 1 exit -1 fi } ### 定义下载各软件的函数(此处我隐藏了我们的下载地址,需各位自行设置下载地址) function download_install_epel { cd $source_dir rm -f epel* &> /dev/null echo "\e[1;32m ---yum install epel repo--- \e[0m \n" sys_version=` uname -r| cut -d '.' -f 4` if [ $sys_version = el7 ]; then rpm -qa| grep -i epel > /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /epel-release-7-2 .noarch.rpm rpm -ivh $source_dir /epel-release-7-1 .noarch.rpm check; fi elif [ $sys_version = el6 ]; then rpm -qa| grep -i epel > /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /epel-release-6-8 .noarch.rpm rpm -ivh $source_dir /epel-release-6-8 .noarch.rpm check; fi fi } function download_nginx { cd $source_dir echo "\e[1;32m\n ---download nginx-1.4.7---\e[0m \n" ls nginx-1.4.7. tar .gz &> /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /nginx-1 .4.7. tar .gz check; fi } function download_mysql { cd $source_dir echo "\e[1;32m\n ---download MySQL-5.5.39---\e[0m \n" ls mysql-5.5.39-linux2.6-x86_64. tar .gz &> /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /mysql-5 .5.39-linux2.6-x86_64. tar .gz check; fi } function download_php { cd $source_dir echo "\e[1;32m\n ---download php-5.3.28---\e[0m \n" ls php-5.3.28. tar .gz &> /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /php-5 .3.28. tar .gz check; fi } function download_jre { cd $source_dir echo "\e[1;32m ---download jre-6u33-linux-x64.bin---\e[0m" sleep 1 ls jre-6u33-linux-x64.bin &> /dev/null if [ $? - ne 0 ]; then wget -nv http: //www .example.com /jre-6u33-linux-x64 .bin check; fi } ###定义依赖包安装函数 function dependence_install { download_install_epel; echo "\e[1;32m ---yum install the Dependencies software--- \e[0m \n" sleep 1 pgrep yum| xargs kill -9 > /dev/null rm -f /var/run/yum .pid > /dev/null echo "yum install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2 -devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libm crypt-devel freetype pcre-devel openssl openssl-devel libaio*" yum -y install gcc zlib cmake libxml2 libxml2-devel bzip2 bzip2 -devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel pspell-devel libmcrypt libmcry pt-devel freetype pcre-devel openssl openssl-devel libaio* > /dev/null 2>&1 check; } ### 定义mysql安装函数### function mysql_install { ###判断本机是否已在运行mysql,或者开机启动项有没有mysql### ###判断机器上是否以运行mysql实例 echo "\e[1;32m \n ---check if there is already installed mysql instence---\e[0m\n" ps -ef| grep -w mysqld| grep - v "grep" &> /dev/null if [ $? - eq 0 ]; then mysqlbasedir=` ps -ef| grep -w "mysqld" | grep - v "grep" | awk '{print $9}' | tr -d '\-\-' ` mysqldatadir=` ps -ef| grep -w "mysqld" | grep - v "grep" | awk '{print $10}' | tr -d '\-\-' ` echo "\e[1;32m your system has run a mysql instance already \n mysqlbasedir is: " $mysqlbasedir "\n mysqldatadir is: " $mysqldatadir "\n do you still want to install a new mysql-server? \e[0m\n" interact; fi ###判断系统是否已经有rpm方式安装的mysql echo "MySQL-server-5.5.39-2.el6.x86_64.rpm" | while read line do prefix=` echo "$line" | awk -F "-" '{print $1"-"$2}' ` ##to get like "MySQL-server" rpm -qa| grep -i "$prefix" &> /tmp/check_mysql .log if [ $? - eq 0 ]; then already_install=` cat /tmp/check_mysql .log| awk -F "-" '{print $1"-"$2"-"$3}' ` ##to get the already installed mysql version echo "\e[1;31m ---the $already_install is already installed by rpm!--- \n ---Do you really want to install a new mysql?--- \e[0m\n" interact; fi done ###判断chkconfig里面是否有mysql启动脚本并且为开机启动 chkconfig | grep mysql| awk '{print $5" "$7}' | grep -e "启用" -e "on" &> /dev/null if [ $? - eq 0 ]; then echo " there is a bootstart mysql script in the chkconfig,please check" exit 0 fi ###判断/etc/rc.local文件里是否有mysql启动命令 cat /etc/rc . local | grep "mysqld" &> /dev/null if [ $? - eq 0 ]; then echo " there is a bootstart mysql commond in the /etc/rc.local,please check it" exit 0 fi ######判断结束###### ###检查是否有系统自带的mysql-lib-5.1,有则删除 rpm -qa| grep -i -e "mysql.*5\.1.*" | xargs rpm -e --nodeps 2> /dev/null ###交互式选择mysql安装路径 echo "\e[1;31m where do you want to install mysql(default is /usr/local/mysql)\e[0m" read mybasedir if [ "$mybasedir" = "" ]; then mybasedir= /usr/local/mysql fi ###选择data目录 echo "\e[1;31m where do you want to storage mysql data(default is /usr/local/mysql/data)\e[0m" read mydatadir if [ "$mydatadir" = "" ]; then mydatadir= /usr/local/mysql/data fi ###开始安装mysql echo "\e[1;32m ---now start to install mysql---\e[0m\n" sleep 1 #dependence_install; echo "\e[1;32m ---add user mysql---\e[0m" useradd mysql -s /sbin/nologin echo "\e[1;32m\n ---unpack mysql-5.5.39-linux2.6-x86_64.tar.gz---\e[0m" cd $source_dir tar zxf mysql-5.5.39-linux2.6-x86_64. tar .gz check; rm -rf $mybasedir mv mysql-5.5.39-linux2.6-x86_64 $mybasedir ###判断/etc下是否有my.cnf,若有,重命名为my.cnf.bak ls /etc/my .cnf &> /dev/null if [ $? = 0 ]; then \ mv /etc/my .cnf /etc/my .cnf.bak echo "\e[1;32m\n ---detected /etc/my.cnf is already exit,rename it to /etc/my.cnf.bak--- \e[0m \n" fi cp $mybasedir /support-files/my-huge .cnf /etc/my .cnf ###拷贝开机启动脚本到/etc/init.d/ ls /etc/init .d /mysql &> /dev/null if [ $? = 0 ]; then \ mv /etc/init .d /mysql /etc/init .d /mysql .bak echo "\e[1;32m ---detected /etc/init.d/mysql is already exit,rename it to /etc/init.d/mysql.bak---\e[0m" fi cp $mybasedir /support-files/mysql .server /etc/init .d /mysql ###修改/etc/init.d/mysql脚本里面basedir和datadir sed -i -e "/^basedir*=$/i\basedir=$mybasedir" -e "/^datadir*=$/i\datadir=$mydatadir" /etc/init .d /mysql sed -i -e '/^basedir*=$/d' -e '/^datadir*=$/d' /etc/init .d /mysql ###初始化数据库 echo "\e[1;32m\n ---initialize mysql database---\e[0m" sleep 1 chown -R mysql $mydatadir $mybasedir > /dev/null 2>&1 $mybasedir /scripts/mysql_install_db --defaults- file = /etc/my .cnf --user=mysql --basedir=$mybasedir --datadir=$mydatadir check; ###将basedir/bin/添加到PATH echo "PATH=$PATH:$mybasedir/bin" >> /etc/profile export PATH=$PATH:$mybasedir /bin echo "\e[1;32m install mysql success,you can run \"service mysql start\" to start the mysql \n do not forget to set a password for mysql \e[0m" ###至此mysql安装完毕 } ### 定义nginx安装函数 function nginx_install { echo echo "\e[1;32m ---start installing nginx,it's basedir is /usr/local/nginx--- \e[0m \n" sleep 1 cd $source_dir ls -l | grep "^d" | grep nginx| xargs rm -rf &> /dev/null tar zxf nginx-1.4.7. tar .gz check; cd nginx-1.4.7 echo "\e[1;32m ---configure: configure information in /tmp/configure_nginx.log--- \e[0m \n" sleep 1 . /configure --with-http_stub_status_module --prefix= /usr/local/nginx &> /tmp/configure_nginx .log check; echo "\e[1;32m ---make: make information in /tmp/make_nginx.log--- \e[0m \n" sleep 1 make &> /tmp/configure_nginx .log check; echo "\e[1;32m ---make install: install into /usr/local/nginx--- \e[0m \n" sleep 1 make install &> /tmp/make_install .log check; echo "\e[1;32m nginx is installed successfully \e[0m \n" } ### 定义php安装函数 function php_install { dependence_install; cd $source_dir ls -l | grep "^d" | grep php| xargs rm -rf &> /dev/null tar zxvf php-5.3.28. tar .gz &> /dev/null check; cd php-5.3.28 echo echo "\e[1;32m ---configure php: information in /tmp/php_configure.log--- \e[0m \n" echo "./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql --with-mysqli --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-iconv-dir=/usr/local --with-zlib --enable-zip --with-curl" . /configure --prefix= /usr/local/php --with-config- file -path= /usr/local/php/etc --with-mysql --with-mysqli --with-freetype- dir --with-jpeg- dir --with-png- dir --with-zlib --with-libxml- dir = /usr -- enable -xml --disable-rpath -- enable -discard-path -- enable -safe-mode -- enable -bcmath -- enable -shmop -- enable -sysvsem -- enable -inline-optimization --with-curlwrappers -- enable -mbregex -- enable -fastcgi -- enable -fpm -- enable -force-cgi-redirect -- enable -mbstring --with-mcrypt --with-gd -- enable -gd-native-ttf --with-openssl --with-mhash -- enable -pcntl -- enable -sockets --with-iconv- dir = /usr/local --with-zlib -- enable -zip --with-curl &> /tmp/php_configure .log check; ###make echo "\e[1;32m ---make php: information in /tmp/php_make.log--- \e[0m \n" make &> /tmp/php_make .log check; ###make install echo "\e[1;32m ---make install php: install into /usr/local/php--- \n ---php cofigure file in the /usr/local/php/etc--- \e[0m \n" make install > /tmp/make_install_php .log check; echo "\e[1;32m ---prepare php configure files--- \e[0m \n" echo "cp $source_dir/php-5.3.28/php.ini-production /usr/local/php/etc/php.ini" cp php.ini-production /usr/local/php/etc/php .ini echo "cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf" cp /usr/local/php/etc/php-fpm .conf.default /usr/local/php/etc/php-fpm .conf echo "\e[1;32m\n php is installed successfully!\n now,please start php and modification the php.ini \e[0m" } ###安装jre function jre_install { ###删除系统自带的java rpm -qa| grep java| xargs rpm -e --nodeps cd $source_dir rm -rf jre1.6.0_33 &> /dev/null chmod +x jre-6u33-linux-x64.bin &> /dev/null . /jre-6u33-linux-x64 .bin > /dev/null 2>&1 check; ls -d /usr/java if [ $? - ne 0 ]; then mkdir /usr/java &> /dev/null else echo echo "\e[1;31m /usr/java has already exits,move to /usr/java_bak !\e[0m" mkdir /usr/java_bak &> /dev/null mv /usr/java/ * /usr/java_bak/ fi mv jre1.6.0_33 /usr/java/ echo "\e[1;32m\n ---add java path to /etc/profile---\e[0m" sleep 1 echo >> /etc/profile echo 'JAVA_HOME=/usr/java/jre1.6.0_33' >> /etc/profile echo 'CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar' >> /etc/profile echo 'PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$JAVA_HOME/jre/bin' >> /etc/profile echo 'export PATH JAVA_HOME' >> /etc/profile source /etc/profile echo "\e[1;32m\n JRE is installed success !\e[0m" echo "\e[1;32m\n ---install cronolog---\e[0m" wget -nv http: //www .example.com /cronolog-1 .6.2. tar .gz dependence_install; tar zxf cronolog-1.6.2. tar .gz cd cronolog-1.6.2 . /configure &> /tmp/cronolog_configure .log && make > /dev/null && make install > /dev/null check; echo "\e[1;32m cronolog is installed success\e[0m\n" } ###下面开始选择那些软件需要安装 echo "\e[1;31m\n ---选择哪些软件需要安装--- \e[0m \n" echo "\e[1;32m \"Nginx\" INPUT \"1\" \e[0m \n" echo "\e[1;32m \"Mysql\" INPUT \"2\" \e[0m \n" echo "\e[1;32m \"Php\" INPUT \"3\" \e[0m \n" echo "\e[1;32m \"JRE\" INPUT \"4\" \e[0m \n" #echo "\e[1;32m \"Tomcat\" INPUT \"5\" \e[0m \n" read -p "please choice which software do you want to install ?" input if [ $input = 1 ]; then download_nginx; dependence_install; nginx_install; elif [ $input = 2 ]; then download_mysql; mysql_install; elif [ $input = 3 ]; then echo "\e[1;32m\n php needs mysqlclient \e[0m" echo "\e[1;32m so if you had already install a mysqlclient\n please make a softlink for all \"libmysqlclient.so.*\" file to both /var/lib64 and /var/lib \e[0m\n" echo "\e[1;31m Please input your choice\n\e[0m \e[1;32m1: go on by default\(install mysql-client-5.5.39\)\n 2: I will check my \"libmysqlclient.so.*\" file and redo this script later\n 3: I had make the softlinks and I want to going on \e[0m" read choice case "$choice" in 1) cd $sourcedir echo "\e[1;32m ---download mysql-client rpm files---\e[0m" wget -nv http: //www .example.com /MySQL-client-5 .5.39-2.el6.x86_64.rpm wget -nv http: //www .example.com /MySQL-devel-5 .5.39-2.el6.x86_64.rpm wget -nv http: //www .example.com /MySQL-shared-5 .5.39-2.el6.x86_64.rpm echo "\e[1;32m\n ---install mysql-client in the way of rpm---\e[0m" sleep 1 rpm -ivh MySQL-client-5.5.39-2.el6.x86_64.rpm MySQL-devel-5.5.39-2.el6.x86_64.rpm MySQL-shared-5.5.39-2.el6.x86_64.rpm download_php; ###make soft link from /usr/lib64/libmysqlclient* to /usr/lib/ ls -l /usr/lib64/libmysqlclient *| grep - v "^l" | awk '{print $NF}' | while read line do usrlib_fulldir=` ls -l /usr/lib64/libmysqlclient *| grep - v "^l" | awk '{print $NF}' | sed 's/lib64/lib/' ` ln -s $line $usrlib_fulldir done php_install; ;; 2) exit 0;; 3) download_php; php_install; ;; *) echo "Input Errot!" && exit -1;; esac elif [ $input = 4 ]; then download_jre; jre_install; else echo "\e[1;31m your input is worng!\e[0m" sleep 1 exit -1 fi |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。