脚本环境

1.linux centos 7 系统
2.光盘镜像文件已挂载
3.系统可连接外网
4.软件包下载链接
lamp 链接:https://pan.baidu.com/s/1x6PTj_aUN2P1DfGGOKe90g
提取码:3w8g
lnmp 链接:https://pan.baidu.com/s/1lr4x1yUFVtDsUWDYJePIyw
提取码:8427

实验步骤

1.上传软件包到Linux系统/opt目录下

方法一:挂载 方法二:通过Xftp软件上传

2.编写脚本package.sh

vim package.sh

#!/bin/bash
# this is down package and tar shell!
#
cd /opt
echo -e "\e\t\t\t[34m mysql,php package downing 。。。\e[0m"
sleep 1
#下载mysql,php软件包(此处注释了,去#开启)
#wget http://dev.mysql.com/get/Downloads/MySQL-5.5.24/mysql-5.5.24.tar.gz &&wget http://php.net/distributions/php-5.6.11.tar.gz && echo "mysql,php package down finish!"
#下载编译工具包
yum -y install gcc gcc-c++ make cmake pcre perl bison gd libpng libpng-devel libaio-devel ncurses-devel libxml2-devel zlib-devel pcre-devel expat-devel openssl-devel libjpeg-devel fontconfig-devel bzip2-devel
bash=`rpm -q gcc gcc-c++ make cmake pcre perl bison gd libpng libaio-devel libpng-devel ncurses-devel libxml2-devel zlib-devel pcre-devel expat-devel openssl-devel | grep "未安装" | wc -l`
#判断编译工具是否下载完成
if [ $bash -eq 0 ];then
echo -e "\033\t\t\t[32m make tool down finish!\033[0m"
else
exit 0 && echo echo -e "\033\t\t\t[31m make tool down fail,check ! \033[0m"
fi
#
#人机交互输入脚本名称
read -p "please input script name (la/nmp): " install
echo -e "\e\t\t\t[32m installing $install ... \e[0m"
#延迟1秒,让用户看到自己输入的脚本
sleep 1
#
case $install in
#lamp软件包下载和解压
lamp)
#下载httpd相关软件包(此处注释了,去#开启)
#wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz &&wget http://archive.apache.org/dist/apr/apr-1.6.2.tar.gz &&wget http://archive.apache.org/dist/apr/apr-util-1.6.0.tar.gz
#解压所有.gz结尾的软件包
find -maxdepth 1 -name "*.gz"|xargs -i tar xvzf {}
#判断软件包解压状态,输出相关信息
[[ $? -eq 0 ]] && echo -e "\033[32m lamp package tar finish!\033[0m" || exit 0 && echo -e "\033[31m lamp down fail,check!\033[0m"
mv apr-1.6.2 httpd-2.4.29/srclib/apr && mv apr-util-1.6.0 httpd-2.4.29/srclib/apr-util
;;
#lnmp软件包下载和解压
lnmp)
#下载nginx相关软件包(此处注释了,去#开启)
#wget http://nginx.org/download/nginx-1.12.0.tar.gz &&
#wget http://downloads.zend.com/guard/7.0.0/zend-loader-php5.5-linux-x86_64_update1.tar.gz
find -maxdepth 1 -name "*.gz" | xargs -i tar xvzf {};
#解压所有.tar.gz 软件包\
[[ $? -eq 0 ]] && echo -e "\033[32m lnmp package tar success!\033[0m" || exit 0 && echo -e "\033[31m lnmp package tar fail,check! \033[0m"
;;
*)
echo "请输入:lamp | lnmp "
exit 0
esac
#将用户输入的脚本名导入e.sh文件
echo "$install" >>/root/e.sh

3.编写脚本lnmp.sh

vim lnmp.sh

#!/bin/bash
#this is auto install lamp or lnmp shell!

#apache安装
apache()
{
#apache编译安装
cd /opt/httpd-2.4.29 &&./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&make && make install &&cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
#
#修改配置文件
#在/etc/init.d/httpd文件中第二行插入2段
sed -i "2i#chkconfig: 35 85 21 \n\
#description: Apache is a World Wide Web server." /etc/init.d/httpd
#将Listen 80 替换成 Listen $ip:80 ,$ip为变量,是本机ip地址(特别注意变量的替换方法)
sed -i "s/^Listen 80/Listen $ip:80/g" /usr/local/httpd/conf/httpd.conf
#
#优化服务
ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd ;ln -s /usr/local/httpd/bin/* /usr/local/bin/
chkconfig --add httpd
systemctl daemon-reload
systemctl start httpd
#
#检查端口和网页测试
port=`netstat -anpt | grep httpd | wc -l`
if [ $? -eq 0 ] && [ $port -ne 0 ]; then
echo -e "\033\t\t\t[44;32m test http://$ip \033[0m"
read -p "input result:(y/n) " u
if [ $u == "y" ]; then
echo -e "\033\t\t\t[32m apache install success!\033[0m"
else
echo -e "\033\t\t\t[5;31m apache install fail!\033[0m"
fi
else
#"-e" 为转义,\033为固定格式(同 \e),"/t"为制表位,同tab键,"5"为闪烁,31m为字体颜色,此处红色,"\033[0m "为固定结束格式
echo -e "\033\t\t\t[5;31m apache install fail,check!!\033[0m"
exit 0
fi
}
#
#安装nginx
nginxt()
{
#编译安装
useradd -M -s /sbin/nologin nginx
cd /opt/nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ;nginx &&nginx -t;
#检查服务启动
stat=`netstat -ntap | grep "80" | wc -l`
if [ $? -eq 0 ]&&[ $stat -ne 0 ] ;then
echo -e "\033\t\t\t[32m nginx install success!!\033[0m"
else
echo -e "\033\t\t\t[5;31m nginx install fail!!\033[0m"
exit 0
fi
}
#
#mysql安装
mysql_con()
{
#编译安装
#判断有无/usr/local/mysql目录,没有就创建
[ ! -d /usr/local/mysql ] && mkdir -p /usr/local/mysql
/usr/sbin/useradd -s /sbin/nologin mysql
cd /opt/mysql-5.5.24
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
if [ $? -eq 0 ];then
make && make install
#
#修改配置文件
echo "export PATH=$PATH:/usr/local/mysql/bin/ " >> /etc/profile
source /etc/profile && chown -R mysql:mysql /usr/local/mysql &&cd /usr/local/mysql/support-files &&cp my-medium.cnf /etc/my.cnf &&cp mysql.server /etc/init.d/mysqld &&chmod 755 /etc/init.d/mysqld &&chkconfig --add /etc/init.d/mysqld ;
chkconfig mysqld --level 35 on
else
echo -e "\e\t\t\t[5;31m set error,check ![0m"
exit 1
fi
#初始化数据库
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
ln -s /usr/local/mysql/bin/ /usr/local/bin/
#
#搜索basedir=,datadir=,并替换
sed -i 's#^basedir=.
$#basedir=/usr/local/mysql#' /etc/init.d/mysqld
sed -i 's#^datadir=.*$#datadir=/home/mysql#' /etc/init.d/mysqld
#mysql启动和检查
systemctl daemon-reload && systemctl start mysqld
port=`netstat -ntap | grep mysql |wc -l`
if [ $? -eq 0 ]&&[ $port -ne 0 ];then
echo -e "\033\t\t\t[32m mysql install success!! \033[0m"
else
echo -e "\033\t\t\t[5;31m mysql install fail,check!! \033[0m"
exit 0
fi
}
#
#apache-php安装
apa_php()
{
#php编译安装
cd /opt/php-5.6.11
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring
make && make install &&cp php.ini-development /usr/local/php5/php.ini && ln -s /usr/local/php5/bin/ /usr/local/bin/ ; ln -s /usr/local/php5/sbin/ /usr/local/sbin/ ;
useradd -M -s /sbin/nologin php

#检查httpd.conf文件中是否有php5_module,并统计
num=`cat /usr/local/httpd/conf/httpd.conf | grep "php5_module" | wc -l`
#判断是否有php5_module
if [ $num -eq 0 ] ;then
echo -e "\e\t\t\t[5;31m no php5_module, check! \e[0m"
exit 0
else
echo -e "\e\t\t\t[32m php5_module is exist! \e[0m"
fi
#
#修改httpd配置,测试php
#在第258行行尾加index.php
sed -i '258s/$/ index.php/' /usr/local/httpd/conf/httpd.conf
#在383行插入相关文件
sed -i "383iAddType application/x-httpd-php .php\n\
AddType application/x-httpd-php-source .phps" /usr/local/httpd/conf/httpd.conf
systemctl restart httpd
#
#echo文件到index.php里面
echo -e "<?php\nphpinfo();\n?>" >>/usr/local/httpd/htdocs/index.php
#输出用户测试网页链接
echo -e "\e\t\t\t[5;34m test http://$ip/index.php \e[0m"
#php连接mysql测试
read -p "if connect mysql? (y/n)? " an
if [ $an == "y" ];then
#echo文件到index.php中,注意单引号中不识别$ip
echo -e '<?php\n$link=mysql_connect(localhost);\nif($link) echo "Success!!";\nelse echo "Fail!!";\nmysql_close();\n?>' >>/usr/local/httpd/htdocs/index1.php
#将localhost替换成 $ip','root' ,注意双引号中不识别$link(要特别注意单引号和双引号之间的区别!)
sed -i "s/localhost/'$ip','root'/g" /usr/local/httpd/htdocs/index1.php
echo -e "\e\t\t\t[32m http://$ip/index.php \e[0m"
else
echo -e "\e\t\t\t[32m lamp install finish!\e[0m"
exit 0
fi
}
#
#nginx-php安装
nginx_php()
{
useradd -M -s /sbin/nologin php
cd /opt/php-5.6.11
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring \
--with-jpeg-dir \
--with-openssl \
--disable-ipv6 \
--enable-fpm
make && make install
#安装gd和修改php配置文件
cd /opt/zend-loader-php5.5-linux-x86_64/ && cp ZendGuardLoader.so /usr/local/php5/lib/php
#
echo -e "[Zend Guard Loader]\nzend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so\nzend_loader.enable=1" >>/usr/local/php5/php.ini
cd /usr/local/php5/etc/ && cp php-fpm.conf.default php-fpm.conf
#替换文件
sed -i 's#^user = .$#user = php#' php-fpm.conf
sed -i 's#^group = .
$#group = php#' php-fpm.conf
sed -i 's#^pm.max_children = .$#pm.max_children = 50#' php-fpm.conf
sed -i 's#^pm.max_spare_server = .
$#pm.max_children = 35#' php-fpm.conf
sed -i 's#^pm.min_spare_server = .$#pm.min_children = 5#' php-fpm.conf
sed -i 's#^pm.start_server = .
$#pm.min_children = 20#' php-fpm.conf
#php服务启动和检查
/usr/local/php5/sbin/php-fpm
port=`netstat -ntap | grep ":9000" | wc -l`
if [ $? -eq 0 ]&&[ $port -ne 0 ];then
echo -e "\033\t\t\t[32m php install success! \033[0m"
else
echo -e "\033\t\t\t[5;31m php install fail! \033[0m"
exit 0
fi
}
#
#nginx和php结合
ngin_vim()
{
#修改nginx配置
mkdir -p /var/www/html/btcom
#将45行 ; 替换成index.php; (或者在 ; 前面加 index.php,这个命令不好写)
sed -i '45s/;/ index.php;/g' /usr/local/nginx/conf/nginx.conf
#在64行插入
sed -i "64ilocation ~ .php$ {\n\
root /var/www/html/btcom;\n\
fastcgi_pass 127.0.0.1:9000;\n\
fastcgi_index index.php;\n\
fastcgi_param SCRIPT_FILENAME;\n\
include fastcgi_params;\n\
}" /usr/local/nginx/conf/nginx.conf
#在68行;后插入语句,注意双引号不识别$document_root$fastcgi_script_name,才用单引号重新插入
sed -i '68s/;/ $document_root$fastcgi_script_name;/g' /usr/local/nginx/conf/nginx.conf
echo -e "<?php\nphpinfo();\n?>" >>/var/www/html/btcom/index.php
nginx -s reload
echo -e "\e[32m test http://$ip/index.php \e[0m"
#
#php连接mysql
read -p "php connect mysql (y/n)? " answer
if [ $answer == "y" ];then
#echo文件,注意单,双引号,原因同上
echo -e '<?php\n$link=mysql_connect(localhost);\nif($link) echo "Success!!";\nelse echo "Fail!!";\nmysql_close();\n?>' >>/var/www/html/btcom/index1.php
sed -i "s/localhost/'$ip','root'/g" /var/www/html/btcom/index1.php
echo -e "\e\t\t\t[32m test http://$ip/index.php \e[0m"
else
echo -e "\e\t\t\t[32m lnmp install finish!\e[0m"
exit 0
fi
}
#
#执行package.sh脚本
./package.sh
#关闭防火墙,增强性
systemctl stop firewalld.service
setenforce 0
#过滤出本机ip
ip=`ifconfig ens33 | grep "netmask" | awk '{print $2}'`
#查看e.sh,将2个脚本连接起来
num=`cat /root/e.sh`
#2脚本已经建立连接,删除e.sh,防止占用空间
rm -rf e.sh
#lamp脚本安装
if [ $num == "lamp" ]
then
#apache 安装
apache
#mysql 安装
mysql_con
#apache和php连接
apa_php
#lnmp脚本安装
elif [ $num == "lnmp" ]
then
#nginx.mysql,php安装
nginxt &&mysql_con &&nginx_php
#修改nginx配置文件
ngin_vim
else
echo -e "\e\t\t\t[5;31m input error,check! \e[0m"
exit 1
fi

4.赋予脚本权限

chmod +x *.sh

5.执行脚本

./lnmp.sh

6.验证脚本


温馨提示:

1.在上面提供了所有软件安装包,可以直接使用。也可以使用脚本中链接下载,脚本中为节约时间已经注释点了,去#号即可(不推荐联网下载,下载慢还容易出错)!
2.此脚本只是为了给大家学习参考,不建议直接拷贝使用,容易出错。想要的,可以去我上传资料中下载,解压直接使用。(http://down.51cto.com/data/2458725)
3.此脚本不推荐工作时使用,太繁琐了,可作为新手练习写shell 脚本的一个项目。我相信,通过此脚本练习,对大家的shell脚本编写能力会大大提高!
4.为避免一个脚本内容过长,编写起来不方便,采用了2个脚本。package.sh脚本是软件包下载和解压,lnmp.sh脚本是在执行package.sh脚本后安装配置服务。(难点是学习2个脚本的结合点)
5.此脚本重难点:(1) 2个脚本结合部分
(2) 修改配置文件要对sed,awk熟练运用
(3) 所有服务安装与配置之间的检查,顺序整理
(4) 对 echo " , ' , -e, 知识掌握与区别

转载于:https://blog.51cto.com/13760351/2352154

Shell脚本自动源码包安装LA/NMP架构详解(赠软件包+脚本)相关推荐

  1. Linux程序源码编译安装的configure配置详解

    Linux环境下,如果通过源代码编译安装程序的简单过程可以描述为:./configure–>make–>make install.其中./configure配置脚本功能就是对你的系统做很多 ...

  2. linux 编译配置文件,Linux程序源码编译安装的configure配置详解

    Linux环境下,如果通过源代码编译安装程序的简单过程可以 描述为:./configure-->make-->make install.其中./configure配置脚本功能就是对你的系统 ...

  3. Linux系统中软件的“四”种安装原理详解:源码包安装、RPM二进制安装、YUM在线安装、脚本安装包...

    一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可以自由选择所需的功能: 软件是编译安装,所以更加适合自己的系统,更加稳定.效率更高: 卸载方便: 缺点: ...

  4. Centos6.5 LAMP环境源码包安装与配置,附安装包百度网盘地址

    Centos6.5 LAMP环境源码包安装与配置 http://pan.baidu.com/s/1nvNruzv 安装包百度网盘地址 LAMP是一种web网络应用和开发环境,是linux,Apache ...

  5. linux系统源码安装教程,linux之源码包安装步骤

    源码:程序代码,人类可看懂的代码 编译程序:将程序代码编译成机器看懂的代码 二进制文件:经过编译程序变为二进制程序后,机器可执行的文件 make和configure: make是一支程序,会自动寻找M ...

  6. 7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装

    2019独角兽企业重金招聘Python工程师标准>>> 7.6.yum更换国内源 自定义yum源: [root@bogon ~]# cd /etc/yum.repos.d [root ...

  7. RedHat系列软件管理(第二版) --源码包安装

    RedHat系列软件管理 --源码包安装 源码包特点: 拥有广泛的平台支持性,可以装在所有的类UNIX操作系统上,不用考虑CPU架构. 灵活性,可以在安装过程中指定特有的选项. 定制度非常高,可以自己 ...

  8. 如何从源码包安装软件?

    从源码包安装软件最重要的就是仔细阅读README INSTALL等说明文件 它会告诉你怎样才能成功安装 通常从源码包安装软件的步骤是:  tar jxvf gtk+-2.4.13.tar.bz2 解开 ...

  9. mysql国内源码安装,mysql 源码包安装

    mysql 源码包安装 #downloads 不同的mysql rpm包介绍: MySQL-devel:mysql开发包.针对mysql进行二次开发使用 MySQL-embedded:嵌入式环境使用的 ...

最新文章

  1. 更轻量的 View Controllers
  2. iOS 使用Quartz 2D画虚线 .
  3. 2021年Python十佳ML库大盘点,国产选手GitHub半年获5k+star,第一名是升级版NumPy
  4. hyperf自定义注解类_swoole学习六hyperf注解的使用
  5. 连载:阿里巴巴大数据实践—数据开发平台
  6. Python笔记-使用cython生成dll,C++进行调用
  7. 百度云部署SSL证书
  8. 告知书页面html样式,纯CSS实现的三种通知栏滚动效果
  9. laravel--模型中各种属性详解
  10. openai-gpt_GPT-3 101:简介
  11. Spark大数据-TMDB电影数据分析(spark-scala版)
  12. SAS硬盘与SATA硬盘的功能对比-SATA硬盘
  13. 网易2019实习生招聘编程题集合 - 题解
  14. 计算机设备管理器里面没有图像,设备管理器里没有图像设备怎么办?
  15. Maxwell-学习笔记
  16. matlab中if语句的分号,matlab if语句
  17. 苹果youtube无法连接网络_苹果再度“翻车”!这次AppleStore无法下载软件:遇网络故障...
  18. 慕课Python机器学习应用-代码实现(详细注释+数据集)
  19. u盘显示请插磁盘f_为什么总是认不到U盘,打开显示成“请插入磁盘驱动器F”.
  20. 棋盘问题(多少正方形长方形)

热门文章

  1. Oracle sql 对多个sql count的值再求和
  2. e与phi不互素 --- 五道题详记
  3. 华容道源代码android,基于Android的华容道游戏的源代码
  4. 运维工程师手把手教你提高网站的安全性
  5. 电脑wps可以语音录入吗_懒人用技巧—使用Word录音实现语音录入文字(口读文字,Word为您写文字)...
  6. 联想拯救者Y9000P和华硕ROG幻16哪个好
  7. 什么是链路层发现协议LLDP和LLDP-MED
  8. laravel 微信授权登录
  9. 帮你早点下班~基于飞书API实现next.js网站内容自动生成实践
  10. Axure RP 9.0.0.3727 授权码