🚨 RPM 打包通用规范。任何涉及 spec 文件编写/修改、rpmbuild、rpmlint、宏展开、依赖管理、构建系统模板(Autotools/CMake/Meson/Python)的场景,都必须读取此技能获取规范,绝不凭训练记忆编写 spec。适用于所有 RPM 发行版。
⚠️ 核心规则:
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。
构建系统PrepBuildInstallAutotools%autosetup -p1``%configure``%make_installCMake%autosetup -p1``%cmake``%cmake_installMeson%autosetup -p1``%meson``%ninja_installPython%autosetup -p1 -n %{name}-%{version}``%pyproject_build_wheel``%pyproject_make_binaryNode.js%autosetup -p1 -n package``npm install手动安装
rpmbuild -bamock --rebuildosc buildspec
Name: 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
bash
rpm -qa # 所有已安装包
rpm -qi package # 包信息
rpm -ql package # 文件列表
rpm -qR package # 依赖
rpm -qf /path/to/file # 文件归属
bash
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 构建
bash
rpmlint spec # 检查 spec 文件
rpmlint rpm # 检查 RPM
rpm -V package # 验证包
rpm -Va # 验证所有包
bash
rpm --showrc # 查看所有宏
rpm --eval '%{name}' # 展开宏
rpmspec -E spec # 检查 spec 宏
text
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 (如需要)
text
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-licenseLicense 不在标准列表参考 SPDX License Listno-description缺少 %description添加描述spurious-executable-permission文件有执行权限但不是脚本移除执行位或添加 %{_bindir}``summary-not-capitalizedSummary 首字母未大写大写首字母wrong-file-end-of-line-encoding文件编码问题用 UTF-8 保存
spec
BuildRequires: autoconf automake libtool
%prep: %autosetup -p1
%build: %configure && %make_build
%install: %make_install
spec
BuildRequires: cmake
%prep: %autosetup -p1
%build: %cmake && %cmake_build
%install: %cmake_install
spec
BuildRequires: meson ninja-build
%prep: %autosetup -p1
%build: %meson && %ninja_build
%install: %ninja_install
spec
BuildRequires: python3-devel python3-setuptools
%prep: %autosetup -p1 -n %{name}-%{version}
%build: %pyproject_build_wheel && %pyproject_install
%install: %pyproject_make_binary
spec
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-rpmopenEuler 专项打包规范kojiKoji 构建系统集成
版本: 4.0.0 | 作者: OS Build Agent