apr: https://dlcdn.apache.org/apr/apr-1.7.0.tar.gz
apr-uilt: https://dlcdn.apache.org/apr/apr-util-1.6.1.tar.gz
httpd: https://dlcdn.apache.org/httpd/httpd-2.4.48.tar.bz2
先创建一个名为Apache目录,在目录中在创建一个名为apache.sh 的脚本和lost的目录,然后把刚刚下载的三个包移动到lost这个目录中。
编写开始:
#!/bin/bash install_httpd=/usr/local/httpd //设置一个变量,改变量是http编译安装的位置 //下载所需的软件包 yum groups mark install 'Development Tools' yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ make //创建apache用户 id apache &> /dev/null //把id apache的返回值放到回收站中 if [ $? -ne 0 ];then //根据上个命令的返回值来和0比较,判断是否和0相等,如果不相等则表示没有这个用户,需要创建。 如果相等表示有这个用户直接掉过。 useradd -r -M -s /sbin/nologin apache //创建apache用户,-r: 建立系统用户 -M: 不要自动建立用户的登入目录 -s: 指定登陆shellhe fi //切换到放置压缩包的位置 cd /root/install/lost tar xf apr-util-1.6.1.tar.gz -C /usr/src //把解压后的文件放到 /usr/src下 tar xf httpd-2.4.48.tar.gz -C /usr/src tar xf lost/apr-1.7.0.tar.gz -C /usr/src cd /usr/src/apr-1.7.0 sed -i '/$RM "$cfgfile"/d' configure //删除configure文件中的“$RM "$cfgfile"” ,d表示删除 -i:直接修改文件内容 cd /usr/src/apr-1.7.0 if [ ! -d /usr/local/apr ];then //取反判断是否没有这个目录,没有则执行下面的编译,如果有则跳过 ./configure --prefix=/usr/local/apr && make && make install fi cd /usr/src/apr-util-1.6.1 if [ ! -d /usr/local/apr-util ];then //取反判断是否没有这个目录,没有则执行下面的编译,如果有则跳过 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install fi //http的编译安装 cd /usr/src/httpd-2.4.48 if [ ! -d $install_httpd ];then ./configure --prefix=$install_httpd \ --enable-so \ --enable-ssl \ --enable-cgi \ --enable-rewrite \ --with-zlib \ --with-pcre \ --with-apr=/usr/local/apr \ --with-apr-util=/usr/local/apr-util/ \ --enable-modules=most \ --enable-mpms-shared=all \ --with-mpm=prefork && \ make && make install fi //修改httpd的配置文件,把文件中的#号删掉或者注释 sed -i "/#ServerName/s/#//" $install_httpd/conf/httpd.conf //添加环境变量 echo "export PATH=$install_httpd/bin:\$PATH" > /etc/profile.d/httpd.sh //配置httpd.service配置文件,这个就可以用户systemctl控制了。 所有源码安装的服务都不能用systemctl控制,所以需要写一个配置文件。 这个配置文件模板默认是在/usr/lib/systemd/system/sshd.service,直接复制过来修改即可。 cat > /usr/lib/systemd/system/httpd.service <<EOF [Unit] Description=httpd server daemon //描述信息 这是httpd服务的守护进程 After=network.target //网卡开启时启动 [Service] Type=forking ExecStart=$install_httpd/bin/apachectl start //启动 ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target EOF systemctl daemon-reload //重新加载配置 systemctl enable --now httpd //设置httpd服务开机自启和启动
[root@localhost ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* [root@localhost ~]# systemctl status httpd.service //查看Apache状态 ● httpd.service - httpd server daemon Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-09-14 18:41:01 CST; 42s ago //running(运行) Process: 1369771 ExecStart=/usr/local/httpd/bin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 1369774 (httpd) Tasks: 6 (limit: 11300) Memory: 5.0M CGroup: /system.slice/httpd.service ├─1369774 /usr/local/httpd/bin/httpd -k start ├─1369775 /usr/local/httpd/bin/httpd -k start ├─1369776 /usr/local/httpd/bin/httpd -k start ├─1369777 /usr/local/httpd/bin/httpd -k start ├─1369778 /usr/local/httpd/bin/httpd -k start └─1369779 /usr/local/httpd/bin/httpd -k start 9月 14 18:41:01 localhost.localdomain systemd[1]: Starting httpd server daemon... 9月 14 18:41:01 localhost.localdomain systemd[1]: Started httpd server daemon. //此时Apache已经启动并且是开机自启