程序包编译安装步骤:
源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 --> 执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系。
项目官方自建站点:
apache.org (ASF: Apache Software Foundation)
mariadb.org
...
代码托管:
Github.com
gitee.com
SourceForge.net
code.google.com
C、C++ 源码编译:使用 make 项目管理器
configure 脚本 --> Makefile.in --> Makefile
相关开发工具:
autoconf:生成 configure 脚本
automake: 生成 Makefile.in
java 源码编译:使用 maven
利用编译工具,通常只需要三个步骤:
./configure [options] # 功能:自定义参数和环境检查
make # 进行编译,生成二进制。也会发现有些依赖包不存在而报错,需要第一步重做
根据 Makefile 文件,构建应用程序
make Install # 仅仅是复制文件到指定的位置而已
复制文件到相应的路径
注意:安装前可以查看源码包中的 README、install 帮助文件。
可以在 CentOS 8 中查看安装的日志:
/var/log/dnf.rpm.log # 记录安装过的日志
/var/log/dnf.log # 记录安装时出现的问题
]# dnf history # 可以查看历史
首先安装相应的包:
生产实践:基于最小化安装的系统建议安装下面相关包:
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
第一步:运行 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 的个数。
二进制程序目录导入至环境变量 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
。
如果在一台机器上进行了编译安装,则可以把安装目录全部拷贝到其他机器上即可。这里有个条件,那就是机器之间应该环境是一致的,否则,可能不能运行。
先安装一些工具
]# 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 # 查看进程