)
从源码到可执行文件手把手教你用rpmbuild编译自己的RPM包以Git为例在Linux生态中软件包管理是系统维护的核心技能之一。对于需要定制软件功能、优化性能或适配特殊硬件平台的中高级用户而言掌握从源码构建RPM包的能力尤为重要。本文将带你深入RPM构建工具链通过Git这一典型示例完整演示从.src.rpm源码包到可执行二进制RPM包的编译过程涵盖环境准备、依赖处理、spec文件修改等关键环节并分享解决常见编译问题的实战经验。1. 环境准备与基础概念1.1 RPM构建工具链安装在CentOS/RHEL系统上构建RPM包需要安装必要的开发工具和rpmbuild环境sudo yum groupinstall Development Tools sudo yum install rpm-build redhat-rpm-config验证安装是否成功rpmbuild --version1.2 理解RPM包类型差异Linux系统中的RPM包主要分为三类类型文件后缀内容描述典型用途二进制RPM.rpm已编译的可执行文件直接安装使用源码RPM.src.rpm源代码构建规范(spec文件)自定义修改后重新编译平台无关包.noarch.rpm不依赖特定CPU架构的脚本或文档跨平台部署以Git为例常见的包形式包括git-2.9.5-3.fc25.src.rpm源码包git-2.9.5-3.fc25.x86_64.rpmx86架构二进制包git-doc-2.9.5-3.fc25.noarch.rpm文档包2. 获取与解压源码包2.1 安装源码RPM下载Git的源码包后使用以下命令安装到本地构建环境rpm -ivh git-2.9.5-3.fc25.src.rpm安装完成后源码和spec文件会被自动解压到~/rpmbuild目录结构如下~/rpmbuild/ ├── SOURCES/ # 存放源码压缩包和补丁文件 ├── SPECS/ # 包含git.spec构建规范文件 ├── BUILD/ # 编译过程中临时目录 ├── RPMS/ # 最终生成的二进制RPM包 └── SRPMS/ # 生成的源码RPM包2.2 解读spec文件关键内容使用文本编辑器打开SPECS/git.spec重点关注以下部分Name: git Version: 2.9.5 Release: 3%{?dist} Summary: Fast Version Control System # 构建依赖 BuildRequires: zlib-devel, openssl-devel, curl-devel # 安装依赖 Requires: perl 5.8.8, rsync %prep %setup -q -n git-%{version} %build make %{?_smp_mflags} all %install make install DESTDIR%{buildroot} %files %doc README INSTALL /usr/bin/git提示修改spec文件前建议备份原文件每次修改Version或Release时需要同步更新changelog3. 自定义编译与问题解决3.1 典型定制场景示例场景一添加编译选项在%build段添加自定义配置参数%build ./configure --prefix/usr \ --with-openssl \ --with-curl \ --with-expat make %{?_smp_mflags}场景二打补丁修改源码将补丁文件放入SOURCES/目录在spec文件中添加补丁声明和应用Patch0: git-fix-security.patch %prep %patch0 -p13.2 常见编译错误处理问题1缺失构建依赖错误信息示例error: Failed build dependencies: openssl-devel is needed by git-2.9.5-3.el7.x86_64解决方案sudo yum-builddep ~/rpmbuild/SPECS/git.spec问题2架构相关编译失败当为ARM平台交叉编译时可能需要调整编译器标志%global _target_cpu aarch64 %global _target_os linux4. 构建与验证RPM包4.1 完整构建流程执行构建命令生成二进制RPMrpmbuild -ba ~/rpmbuild/SPECS/git.spec成功构建后产物位于二进制RPM~/rpmbuild/RPMS/架构/源码RPM~/rpmbuild/SRPMS/4.2 质量验证步骤检查RPM元数据rpm -qpi ~/rpmbuild/RPMS/x86_64/git-*.rpm验证文件列表rpm -qpl ~/rpmbuild/RPMS/x86_64/git-*.rpm测试安装sudo yum localinstall ~/rpmbuild/RPMS/x86_64/git-*.rpm5. 高级技巧与自动化5.1 构建目录自定义修改~/.rpmmacros文件可更改默认构建路径%_topdir /opt/build/rpm %_tmppath %{_topdir}/tmp5.2 多版本并行构建使用mock工具创建隔离构建环境sudo yum install mock mock -r epel-7-x86_64 rebuild git-2.9.5-3.fc25.src.rpm5.3 自动化构建脚本示例创建build_git.sh自动化脚本#!/bin/bash VERSION2.9.5 RELEASE3 # 下载源码 wget http://example.com/git-${VERSION}-${RELEASE}.src.rpm # 安装依赖 sudo yum-builddep -y git-${VERSION}-${RELEASE}.src.rpm # 构建RPM rpmbuild --rebuild git-${VERSION}-${RELEASE}.src.rpm # 生成校验和 sha256sum ~/rpmbuild/RPMS/*/git-*.rpm checksums.txt