源码包管理
字数: 2768 字 时长: 11 分钟
源码包指的是包含了软件最原始的代码内容的压缩包,通常用于自行编译安装软件。这些源码包通常以 .tar.gz
或 .tar.bz2
为文件后缀,提供了软件的源代码,需要用户自行编译安装。源码包中一般包含有程序源代码文件、配置文件(如 configure)、安装使用说明(如 INSTALL、HOWTO、README)等。源码包的安装需要将源代码通过编译转换为计算机可以识别的机器语言,然后才可以安装。
编译安装准备
在 Linux 系统中,当从源代码包安装软件时,通常需要使用 GCC 编译器来编译那些用 C 语言编写的代码。除了编译器本身,可能还需要安装和配置一些其他的依赖库和工具,以确保编译过程能够顺利进行(例如 g++ 等)。这些依赖项可能包括库文件、头文件、构建工具等,它们对于构建软件至关重要。因此,在开始编译之前,确保这些依赖项已经正确安装和配置,是成功编译和安装软件的关键步骤。
GCC
GCC 是 GNU 编译器集合(GNU Compiler Collection)的缩写,它是自由软件基金会(FSF)开发的一个编译器。GCC 最初是为 C 语言设计的,但后来扩展支持了多种编程语言,包括 C++、Objective-C、Fortran、Ada、Go 和 D 等。
除了安装编译器,还需要安装 make
编译命令。在 Linux 系统中,编译单个源代码文件(如 hello.c)确实相对简单,但编译一个包含多个源代码文件和复杂依赖关系的源码包则需要更自动化的工具。make
工具就是这样一个自动化构建工具,它通过读取名为 Makefile 的文件来理解项目中文件的依赖关系和编译顺序,从而自动化整个编译过程。
Makefile 中定义了如何编译源代码文件、链接生成可执行文件以及安装软件的步骤。使用 make
命令时,它会根据 Makefile 中的指令自动执行必要的编译和链接操作,极大地简化了从源码包编译软件的过程。因此,除了编译器,make
也是编译源码包时常用的一个工具。
所以,在编译安装软件之前,需要先安装 GCC 编译器和 Make 工具:
dnf -y install gcc make
编译安装步骤
源码编译安装步骤通常涉及以下环节:
- 准备环境:确保系统已安装必要的编译器(如 GCC)和构建工具(如 make)。安装所有必需的依赖库和工具,这些信息通常可以在软件的文档或 README 文件中找到。
- 获取源代码:从官方网站或其他可信来源下载软件的源代码包。解压缩源代码包,通常使用
tar
、unzip
等命令。 - 配置构建:进入源代码目录。运行
./configure
脚本,它会自动检测系统环境并准备 Makefile。这一步可能需要指定一些参数,如安装路径等。 - 编译源代码:运行
make
命令来编译源代码。这一步会根据 Makefile 中的指令编译源文件。 - 测试(可选):运行
make check
或make test
来执行软件自带的测试,确保编译后的程序按预期工作。 - 安装软件:运行
make install
命令将编译好的程序安装到系统上。 - 清理构建文件(可选):运行 make clean 来清理编译过程中产生的临时文件,释放空间。
- 配置系统(如果需要):根据需要配置系统环境变量、启动脚本等,以确保软件能够正常运行。
在编译安装软件时,./configure
脚本和 make
命令支持多种参数来自定义编译过程。
./configure
脚本常用参数:
参数 | 作用 |
---|---|
--prefix=PATH | 用于指定软件安装的基本目录。在 Unix 和类 Unix 系统中,软件默认安装在 /usr/local 目录下,但 --prefix 参数允许改变这个默认设置。例如,如果想要将软件安装到 /opt 目录下,可以使用 ./configure --prefix=/opt 。这个参数影响了许多其他目录的设置,包括 bindir、libdir、includedir 等,它们都会相对于 --prefix 设置。 |
--bindir=DIR | 用于指定可执行文件的安装目录。默认情况下,./configure 脚本会将可执行文件安装到 --prefix 下的 bin 目录中。如果使用 --bindir 参数,可以改变这个位置。例如,./configure --bindir=/usr/local/bin 会将所有可执行文件安装到 /usr/local/bin 目录下。这对于系统路径中已有特定结构或需要特定权限的可执行文件非常有用。 |
--enable-feature | 用于启用软件中的特定特性或模块。这些特性可能因为许可证问题、依赖问题或性能考虑而在默认情况下被禁用。例如,如果正在编译一个支持 SSL 的软件,并且想要启用 SSL 支持,可以使用 --enable-feature=ssl 。这个参数的具体名称会根据软件的不同而不同,需要查看软件的文档或 ./configure --help 的输出来获取可用的特性列表。块。 |
--disable-feature | 与 --enable-feature 相反,这个参数用于禁用软件中的特定特性或模块。这可能是因为不使用这些特性,或者它们与系统不兼容。例如,如果不需要软件的 GUI 支持,可以使用 --disable-feature 参数来禁用它,如 ./configure --disable-gui 。同样,需要查看软件的文档或 ./configure --help 的输出来获取可用的特性列表。 |
make
命令常用参数:
参数 | 作用 |
---|---|
all | 这是一个常用的默认目标,当执行 make 命令时,如果没有指定目标,make 将寻找名为 all 的目标并执行。通常在 Makefile 中,all 目标会依赖于所有需要编译的源文件,确保所有必要的文件都被编译。 |
install | 用于将编译好的程序安装到系统上。它通常依赖于 all 目标,确保在安装之前所有文件都已编译。install 目标会根据 Makefile 中的规则将可执行文件、库文件、头文件等复制到系统的标准安装位置。 |
clean | 用于删除所有由编译过程生成的文件,但不包括 Makefile 和配置脚本生成的文件。这通常包括 .o 目标文件、可执行文件等。使用 make clean 可以快速清理工作目录,为下一次构建做准备。 |
distclean | 用于删除所有由配置脚本生成的文件,包括 Makefile 和其他由 ./configure 脚本生成的文件。这使得源代码目录恢复到原始的、未配置的状态,适合于准备软件的发布版本。 |
maintainer-clean | 比 distclean 更彻底,除了删除 distclean 清理的文件外,还会删除那些可能需要重新配置或重新生成的文件,如文档、语言文件等。这是为了确保维护者在发布软件时有一个完全干净的构建环境。 |
check 、test | 用于运行软件的测试套件。check 和 test 目标通常依赖于 all 目标,确保在测试之前所有文件都已编译。这些目标会执行软件自带的测试程序,以验证软件的功能是否按预期工作。 |
-jN | 用于指定并行编译的作业数。N 是一个数字,表示同时运行的编译作业的数量。例如,make -j4 会同时运行四个编译作业。这可以显著加快编译速度,特别是在多核处理器上。需要注意的是,并行编译可能会增加内存使用量,如果设置的作业数过多,可能会导致系统资源不足。 |
编译安装软件
以 Nginx 为例,用来展示从源代码编译安装软件的整个过程。
安装依赖
在编译 Nginx 之前,需要确保系统已经安装了编译工具和一些必要的库文件。对于 Nginx,需要安装如下依赖:
shell[root@localhost ~]# dnf -y install gcc make openssl-devel pcre zlib pcre-devel zlib-devel
gcc
:GNU 编译器集合,用于编译源代码。make
:命令工具,主要用于程序编译。openssl-devel
:在编译 Nginx 时,如果打算使用 Nginx 的 SSL 模块,那么需要安装openssl-devel
。这是因为 SSL 模块需要用到 OpenSSL 库来处理 SSL 加密和解密。pcre
:PCRE 库支持正则表达式。Nginx 的 HTTP 模块需要用到 PCRE 来解析正则表达式。zlib
:用于对 HTTP 包的内容做 gzip 格式的压缩,Nginx 启动压缩功能的时候需要使用该库。pcre-devel
、zlib-devel
:这两个是开发库,包括头文件等,这也是编译 Nginx 所必须使用的。
从官网获取 Nginx 最新源码
shell[root@localhost ~]# wget https://nginx.org/download/nginx-1.27.2.tar.gz
然后将获取的压缩包进行解压:
bash[root@localhost ~]# tar -zxvf nginx-1.27.2.tar.gz
配置构建
首先生成 Makefile 文件:
shell[root@localhost ~]# cd nginx-1.27.2 [root@localhost nginx-1.27.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
--prefix=/usr/local/nginx
:这个参数指定了 Nginx 安装后的目录。--user=nginx --group=nginx
:这两个参数指定了运行 Nginx 服务的用户和组。
编译源代码
然后开始编译,根据 Makefile 文件生成相应模块:
shell[root@localhost nginx-1.27.2]# make
安装软件
最后,安装 Nginx,根据 Makefile 文件中的指令,将编译好的程序文件(如可执行文件、库文件等)复制到系统的相应目录中,完成软件的安装。
shell[root@localhost nginx-1.27.2]# make install
测试
安装完成后,可以查看 Nginx 的版本,对于 Nginx 来说,可执行文件通常位于 sbin 目录下的 nginx:
shell[root@localhost ~]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.27.2
源码编译卸载
编译安装的软件通常不会分散到系统中的多个目录。在编译安装过程中,通过了 --prefix
参数指定一个安装前缀,软件及其所有相关文件(包括可执行文件、库文件、配置文件等)将被安装到这个前缀指定的目录下。因此,可以通过删除这个目录来卸载软件。
例如,如果使用 --prefix=/usr/local/nginx
编译安装 Nginx,那么所有相关的文件都会被安装到 /usr/local/nginx
目录下。卸载时,可以直接删除这个目录:
[root@localhost ~]# rm -rf /usr/local/nginx
WARNING
即使软件的所有文件都被安装到一个目录下,也可能有配置文件和日志文件被创建在其他位置(如 /etc
和 /var
目录)。在卸载软件时,需要手动检查并删除这些文件。