> ⚠️ 核心规则:
>
> RPM 打包规范非常细致且经常更新。你的训练记忆中的 spec 格式、宏用法、构建指令可能过时或不完整。
>
> 因此:任何涉及 RPM 打包的场景,都必须读取此技能获取最新规范。绝不凭记忆编写。
| 如果你要做… | 你应该… | 禁止行为 |
|---|---|---|
| --- | --- | --- |
| 编写/修改 spec 文件 | ✅ 读取此技能 | ❌ 凭记忆写 spec 模板 |
| 检查 spec 文件问题 | ✅ 读取此技能 | ❌ 自己判断格式是否正确 |
| 使用 rpmbuild/mock 构建 | ✅ 读取此技能 | ❌ 凭记忆写构建命令 |
| 处理依赖关系 | ✅ 读取此技能 | ❌ 凭记忆写 Requires/BuildRequires |
| 展开/调试 RPM 宏 | ✅ 读取此技能 | ❌ 凭记忆猜测宏展开结果 |
| 选择构建系统指令 | ✅ 读取此技能 | ❌ 凭记忆写 %build/%install 指令 |
| 运行 rpmlint 检查 | ✅ 读取此技能 | ❌ 自己判断 lint 错误 |
| 包升级/更新版本 | ✅ 读取此技能 | ❌ 凭记忆写升级流程 |
| openEuler 专项打包 | ✅ 同时读取 openeuler-rpm | ❌ 只用此技能(openEuler 有特殊规则) |
当你要编写或修改任何 spec 文件、执行 RPM 构建命令、处理 RPM 依赖时,问自己:
> "我确定这个 spec 格式/宏/构建指令是正确的吗?还是我在凭记忆猜?"
如果不确定 → 读取此技能。如果是 openEuler 打包 → 同时读取 openeuler-rpm。
| 构建系统 | Prep | Build | Install |
|---|---|---|---|
| --------- | ------ | ------- | --------- |
| Autotools | %autosetup -p1 | %configure | %make_install |
| CMake | %autosetup -p1 | %cmake | %cmake_install |
| Meson | %autosetup -p1 | %meson | %ninja_install |
| Python | %autosetup -p1 -n %{name}-%{version} | %pyproject_build_wheel | %pyproject_make_binary |
| Node.js | %autosetup -p1 -n package | npm install | 手动安装 |
rpmbuild -bamock --rebuildosc buildName: mypackage
Version: 1.0.0
Release: 0%{?dist}
Summary: Package summary
License: MIT
URL: https://example.com
Source0: https://github.com/%{url}/releases/download/%{version}/%{name}-%{version}.tar.gz
BuildRequires: gcc
BuildRequires: make
Requires: glibc >= 2.17
%description
Detailed package description.
%prep
%autosetup -p1
%build
%configure
%make_build
%install
%make_install
%check
make test
%files
%license LICENSE
%doc README.md
%{_bindir}/%{name}
%changelog
* Thu Apr 16 2026 Your Name <your@email.com> - 1.0.0-1
- Update to 1.0.0
- Fix build issues
rpm -qa # 所有已安装包
rpm -qi package # 包信息
rpm -ql package # 文件列表
rpm -qR package # 依赖
rpm -qf /path/to/file # 文件归属
rpmbuild -ba spec # 构建 SRPM+RPM
rpmbuild -bs spec # 仅构建 SRPM
rpmbuild -bb spec # 仅构建 RPM
mock -r fedora-39-x86_64 --rebuild src.rpm
osc build # OBS 构建
rpmlint spec # 检查 spec 文件
rpmlint rpm # 检查 RPM
rpm -V package # 验证包
rpm -Va # 验证所有包
rpm --showrc # 查看所有宏
rpm --eval '%{name}' # 展开宏
rpmspec -E spec # 检查 spec 宏
1. 创建 spec → rpmdev-newspec -o mypackage.spec
2. 编辑 spec → 填写元数据、依赖、构建指令
3. 本地构建 → rpmbuild -ba mypackage.spec
4. 质量检查 → rpmlint mypackage.spec
5. 修正问题 → 根据 RPMLint 报告修改
6. Mock 构建 → mock --rebuild src.rpm (可选)
7. OBS 构建 → osc build (如需要)
1. 检查新版本 → curl -s https://example.com/releases | grep mypackage
2. 更新 Source0 → %update_source_url mypackage.spec
3. 更新 Version → sed -i "s/^Version:.*/Version:/new/" mypackage.spec
4. 更新 Release → Release: 1%{?dist}
5. 更新 changelog → 添加新条目
6. 重建构建 → rpmbuild -ba mypackage.spec
7. 验证功能 → rpm -e && rpm -ivh package.rpm
| 错误 | 说明 | 修复方法 |
|---|---|---|
| ------ | ------ | ---------- |
invalid-license | License 不在标准列表 | 参考 SPDX License List |
no-description | 缺少 %description | 添加描述 |
spurious-executable-permission | 文件有执行权限但不是脚本 | 移除执行位或添加 %{_bindir} |
summary-not-capitalized | Summary 首字母未大写 | 大写首字母 |
wrong-file-end-of-line-encoding | 文件编码问题 | 用 UTF-8 保存 |
BuildRequires: autoconf automake libtool
%prep: %autosetup -p1
%build: %configure && %make_build
%install: %make_install
BuildRequires: cmake
%prep: %autosetup -p1
%build: %cmake && %cmake_build
%install: %cmake_install
BuildRequires: meson ninja-build
%prep: %autosetup -p1
%build: %meson && %ninja_build
%install: %ninja_install
BuildRequires: python3-devel python3-setuptools
%prep: %autosetup -p1 -n %{name}-%{version}
%build: %pyproject_build_wheel && %pyproject_install
%install: %pyproject_make_binary
BuildRequires: nodejs npm
%prep: %autosetup -p1 -n package
%build: npm install --production=false && npm run build
%install: mkdir -p %{buildroot}%{_datadir}/%{name} && cp -r . %{buildroot}%{_datadir}/%{name}/
| 宏 | 路径 |
|---|---|
| --- | ------ |
%{_bindir} | /usr/bin |
%{_libdir} | /usr/lib[64] |
%{_datadir} | /usr/share |
%{_sysconfdir} | /etc |
%{_docdir} | /usr/share/doc |
%{_mandir} | /usr/share/man |
%{_topdir} | ~/rpmbuild |
%autosetup 而非手动 %setup%{_bindir} 等标准宏rpmlint 检查make %{?_smp_mflags}%{?dist} 区分发行版AutoReq: norpmlint 检查 spec本技能可与以下技能配合使用:
| 技能 | 用途 |
|---|---|
| ------ | ------ |
openeuler-rpm | openEuler 专项打包规范 |
koji | Koji 构建系统集成 |
_版本: 4.0.0 | 作者: OS Build Agent_
共 1 个版本