centos7一键编译安装Apache2.4.46脚本

#!/bin/sh
. /etc/init.d/functions
#相关软件包
PACKAGE="
deltarpm
gcc
make
pcre-devel
openssl-devel
expat-devel
bzip2
wget
"
#安装目录
FILE=/apps/httpd

#当前目录
ML=`pwd`

#相关软件安装
for PACK in $PACKAGE;do
    rpm -q $PACK &> /dev/null || yum -y -q install $PACK
done

#下载相关源码包
wget https://downloads.apache.org//apr/apr-1.7.0.tar.bz2 &> /dev/null
wget https://downloads.apache.org//apr/apr-util-1.6.1.tar.bz2 &> /dev/null
wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.bz2 &> /dev/null

#解压相关源码包
tar xf httpd-2.4.46.tar.bz2
tar xf apr-1.7.0.tar.bz2 && mv apr-1.7.0 ${ML}/httpd-2.4.46/srclib/apr
tar xf apr-util-1.6.1.tar.bz2 && mv ${ML}/apr-util-1.6.1 httpd-2.4.46/srclib/apr-util

#编译
[ -d $FILE ] || mkdir -p $FILE
cd ${ML}/httpd-2.4.46/
./configure --prefix=$FILE --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork  &> /dev/null && action "编译完成" || { action "编译失败" false; exit; }

#安装
make &> /dev/null  && { make install &> /dev/null; action "httpd安装完成"; }

#创建用户
id apache &> /dev/null || useradd -s /sbin/nologin -r apache

#修改配置文件中的启动用户
sed -i 's/^User.*/User apache/' ${FILE}/conf/httpd.conf
sed -i 's/^Group.*/Group apache/' ${FILE}/conf/httpd.conf

#配置环境变量
echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh

#配置man帮助
echo 'MANDATORY_MANPATH          /apps/httpd/man' >> /etc/man_db.conf

#创建服务启动文件
cat > /usr/lib/systemd/system/httpd.service <<EOF
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/apps/httpd/bin/apachectl start
#ExecStart=/apps/httpd/bin/httpd $OPTIONS -k start
ExecReload=/apps/httpd/bin/apachectl graceful
#ExecReload=/apps/httpd/bin/httpd $OPTIONS -k graceful
ExecStop=/apps/httpd/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

#启动服务
systemctl daemon-reload
systemctl enable --now httpd.service &> /dev/null && action "httpd服务启动成功" || action "httpd服务启动失败,请检查配置文件" false
原文地址:https://www.cnblogs.com/nj-duzi/p/13885132.html