在Linux系统中,CentOS作为一款广泛使用的服务器操作系统,其软件包管理工具yum(Yellow dog Updater, Modified)为用户提供了便捷的软件安装、更新和卸载功能,默认情况下,yum通过配置的软件源仓库下载预编译的二进制包进行安装,但在某些场景下,如需要定制化编译、依赖特定版本或进行深度学习时,从yum源下载源码包就显得尤为重要,本文将详细介绍CentOS系统中通过yum下载源码的方法及相关注意事项。

yum源码下载的基本原理
yum在下载源码时,依赖于系统中配置的软件源仓库信息,这些信息通常存储在/etc/yum.repos.d/目录下的.repo文件中,标准的yum仓库主要提供二进制rpm包,但部分仓库(如EPEL、CentOS Plus等)会额外提供源码包,当用户执行yum下载源码的命令时,yum会根据软件包的元数据信息,定位到源码包的下载地址,并将其缓存到本地指定的目录中。
准备工作:确认yum源配置
在开始下载源码之前,需要确保系统已正确配置包含源码的yum仓库,以CentOS 7为例,可以通过以下步骤检查:
- 编辑/etc/yum.repos.d/CentOS-Base.repo文件,确保[base]、[updates]、[extras]等核心仓库中enabled=1(默认开启)。
- 对于需要额外源码包的情况,可启用EPEL(Extra Packages for Enterprise Linux)仓库,执行命令:
yum install epel-release。 - 部分仓库可能需要单独启用源码包支持,例如在CentOS-Base.repo中添加
reposource=1参数(具体取决于仓库配置)。
使用yum下载源码的核心方法
通过yumdownloader工具下载
yumdownloader是yum-utils工具包中的一个实用工具,专门用于下载rpm包及其源码,安装步骤如下:
yum install yum-utils
下载源码时,使用--source参数,例如下载nginx的源码包:
yumdownloader --source nginx
下载的源码包通常存放在当前目录下,文件名格式为nginx-版本号.src.rpm。

通过yum命令结合--enablerepo参数
如果源码包位于特定的仓库(如EPEL),可以使用yum命令的--enablerepo参数和--source选项:
yum --enablerepo=epel --source download nginx
此方法会自动解析依赖关系并下载对应的源码包。
解析源码包内容
下载的.src.rpm文件是源码包的压缩格式,需通过rpm命令进行解压和提取:
rpm -i nginx-1.18.0-1.el7.ngx.src.rpm
执行后,源码文件会默认存放在/usr/src/redhat/SOURCES/目录下(具体路径可能因系统配置而异),包含补丁文件、源码压缩包(如.tar.gz)等。
定制化编译与安装
提取源码后,用户可进行修改或定制,然后通过以下步骤编译安装:

- 进入源码目录,解压源码压缩包:
tar -xzf nginx-1.18.0.tar.gz cd nginx-1.18.0
- 配置编译选项(如指定安装路径、添加模块等):
./configure --prefix=/usr/local/nginx --with-http_ssl_module
- 编译并安装:
make && make install
注意事项
- 依赖管理:编译源码可能需要安装额外的开发工具和依赖库,可通过
yum groupinstall "Development Tools"安装基础编译环境。 - 版本匹配:确保下载的源码版本与系统环境兼容,避免因版本差异导致编译失败。
- 网络环境:部分仓库可能需要配置代理或镜像源,以确保下载速度和稳定性。
相关问答FAQs
Q1: 为什么使用yumdownloader下载源码时提示“package not found”?
A1: 这通常是因为该软件包在当前启用的yum仓库中未提供源码,可以尝试切换到其他仓库(如EPEL)或检查仓库是否正确配置,执行yum search --allmatches "软件包名"可查看所有可用仓库中的包信息。
Q2: 下载的源码包如何修改后重新打包?
A2: 修改源码后,需重新生成rpm包,步骤如下:
- 安装rpm-build工具:
yum install rpm-build。 - 进入
/usr/src/redhat/SPECS/目录,编辑对应的.spec文件(如nginx.spec)。 - 执行
rpmbuild -bb --clean nginx.spec重新编译二进制包,或rpmbuild -bs --clean nginx.spec生成源码包。 - 生成的包位于
/usr/src/redhat/RPMS/或/usr/src/redhat/SRPMS/目录下。