目录
CentOS 8 编译安装程序包(httpd)
1. 源码编译介绍
程序包编译安装步骤:
源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 --> 执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系。
2. 开源代码的获取
项目官方自建站点:
apache.org (ASF: Apache Software Foundation)
mariadb.org
...
代码托管:
Github.com
gitee.com
SourceForge.net
code.google.com
3. 编译源代码工具
-
C、C++ 源码编译:使用 make 项目管理器
configure 脚本 --> Makefile.in --> Makefile
相关开发工具:
autoconf:生成 configure 脚本
automake: 生成 Makefile.in -
java 源码编译:使用 maven
4. C 语言源码编译安装过程
利用编译工具,通常只需要三个步骤:
-
./configure [options] # 功能:自定义参数和环境检查
- 通过选项传递参数来指定安装路径(默认在 /usr/local/)、启用特性等,根据用户的指定及 Makefile.in (这是一个模板)文件生产 Makefile 文件。
- 检查依赖到的外部环境,例如依赖的软件包等。
-
make # 进行编译,生成二进制。也会发现有些依赖包不存在而报错,需要第一步重做
根据 Makefile 文件,构建应用程序
-
make Install # 仅仅是复制文件到指定的位置而已
复制文件到相应的路径
注意:安装前可以查看源码包中的 README、install 帮助文件。
可以在 CentOS 8 中查看安装的日志:
/var/log/dnf.rpm.log # 记录安装过的日志
/var/log/dnf.log # 记录安装时出现的问题
]# dnf history # 可以查看历史
4.1 编译安装准备
首先安装相应的包:
- 开发工具:make、gcc(C/C++ 编译器的 GNU C Complier)
- 开发环境:开发库(glibc,标准库)、头文件、可以安装开发包组(Development Tools)
- 软件所需的相关依赖包
生产实践:基于最小化安装的系统建议安装下面相关包:
dnf install gcc make gcc-c++ glibc-devel pcre pcre-devel openssl openssl-devel \
systemd-devel zlib-devel autoconf vim lrzrz tree tmux lsof tcpdump wget \
net-tools iotop bc bzip2 zip unzip nfs-utils man-pages bash-completion
4.2 编译安装
第一步:运行 configure 脚步,生成 Makefile 文件。
一般可以查看源软件包中的 README 和 INSTALL 内容,而获取支持使用的选项:
]# ./configure --help
选项分类:
-
安装路径设定
–prefix=/PATH:指定默认安装路径,默认为 /usr/local/
–sysconfdir=/PATH:配置文件安装位置
system types:支持交叉编译 -
软件特性和相关指定
optional features:可选特性
–disable-FEATURE
–enable-FEATURE[=ARG]
optional Packages:可选包
–with-PACKAGE[=ARG]
–without-PACKAGE[=ARG]
注意:通常被编译操作依赖的程序包,需要安装此包的开发组件,其包名一般类似于 name-devel-version。
第二步:make
第三步:make install
示例:手动编译安装 tree 最新版。
-
如果已经安装了软件包,则可以使用 rpm 查询的办法得到官网地址:
]# rpm -qi tree Name : tree Version : 1.7.0 ... Vendor : CentOS URL : http://mama.indstate.edu/users/ice/tree/ Summary : File system tree viewer ...
-
到网上下载最新的 tree 版本的源码,并编译安装:
]# cd /usr/local/src ]# wget http://mama.indstate.edu/users/ice/tree/src/tree-2.0.4.tgz ]# cd tree-2.0.4 # 如果需要修改相关的内容 ]# vim INSTALL ]# make ]# make install ]# tree --Version tree v2.0.4 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
可以查看 make 帮助:
]# man make
其中有一个选项 -j [N], --jobs[=N]
可以指定同时执行 N 个作业,N 的值建议使用 CPU 的个数。
4.3 安装后的配置
-
二进制程序目录导入至环境变量 PATH 中
编辑文件 /etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
当然也可以使用符号链接,把命令连接到 PATH 环境变量中的某个目录中。
]# ln -sv /path/to/BIN /usr/local/bin/
-
相关用户及文件
有些开源软件编译后,还需要创建相应的用户和文件。
-
导入帮助手册
编辑文件 /etc/man.config/man_db.conf 文件,添加一个 MANPATH。
加入的格式为:MANDATORY_MANPATH /path/to/man
。
如果在一台机器上进行了编译安装,则可以把安装目录全部拷贝到其他机器上即可。这里有个条件,那就是机器之间应该环境是一致的,否则,可能不能运行。
4.4 示例:编译安装最新版 httpd-2.4.54:
-
先安装一些工具
]# dnf -y install gcc make apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config
-
下载源码 Apache HTTP Server:https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.bz2
]# wget https://dlcdn.apache.org/httpd/httpd-2.4.54.tar.bz2
-
简单编译安装
在 make 编译时,出现错误,缺乏 ‘redhat-hardened-ld’,以下命令可以查出所需的包:
]# dnf provides *redhat-hardened-ld* Last metadata expiration check: 1 day, 1:00:23 ago on Wed 23 Nov 2022 07:47:29 PM CST. redhat-rpm-config-125-1.el8.noarch : Red Hat specific rpm configuration files Repo : @System Matched from: Filename : /usr/lib/rpm/redhat/redhat-hardened-ld
]# cd httpd-2.4.54 ]# ./configure --prefix=/apps/httpd24 --enable-ssl ]# make -j 2 ]# make install ]# cd /apps/httpd24/bin/apachectrl start ]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 *:80 *:* LISTEN 0 128 [::]:22 [::]:* # 注意,防火墙和 SELinux要关闭或设置好 ]# curl localhost <html><body><h1>It works!</h1></body></html>
-
配置相关文件
]# echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh ]# . /etc/profile.d/httpd24.sh
-
指定使用 apache 用户运行
]# useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache # 修改其中成 User apache , Group apache ]# vim /apps/httpd24/etc/httpd.conf ]# echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd.sh
-
启动服务
]# apachectrl restart ]# ps aux # 查看进程