Fedora下RPM包制作
RPM术语
RPM
RPM包管理器被Fedora,Red Hat Enterprise Linux,Mageia,OpenSUSE以及其他Linux发行版本使用.最初RPM代表”Red Hat Package Manager”,
然而现在它是一个递归的缩写”RPM Package Manager”.
规格文件
一个纯文本文件,包含了包的信息以及RPM用来编译包中软件的指令.使用包的名字+后缀”.spec”作为这个文件的名字.
标签
一个字符串,通常大写,后接一个冒号,位于规格文件的顶部,用来提供一些有关RPM包的重要数据,例如Name:,Version:,Summary:.
节
规格文件中的一段,告诉RPM如何执行包构造过程的某些部分.绝大部分节包含只传递给Shell的代码,虽然这一方面RPM极具灵活性,但超出本文的范围,不多阐述.
节头
一个短字符串,在行首以%开头,用于引入节.例如:%description,%prep,%files.
宏
一个短字符串,以’%’作为前缀,,通常以花括号包”{}”围起来,RPM将其转化为一个不同的,通常更长的字符串.有些宏可以接受参数,有些参数非常复杂.有些宏由RPM提供,有些是redhat-rpm-config以及fedora-rpm-macros包的一部分,其他的包也提供宏.你可以使用rpm –showrc 来查看当前系统中所有可用的宏,但是你不需要去运行绝不大部分你看到的宏.
模拟
用于在自己的Fedora安装中本地构建RPM的系统,这就避免需要在你的操作系统中安装构建所需的所有依赖,同时也允许你为不同版本的Fedora构建包.
koji
主要的Fedora构建系统.
准备你的系统进行RPM包创建
安装必要的构建工具
1
| sudo dnf install fedora-packager fedora-review
|
准备模拟环境
1 2 3
| sudo useradd packager sudo usermod -a -G mock packager su packager
|
准备源代码
1 2 3 4 5 6 7
| mkdir -p ~/workspaces/hello cd ~/workspaces/hello cat << EOF > hello.sh #!/bin/bash printf "Hello!\n" EOF chmod 644 hello.sh
|
准备规格文件hello.spec
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Name: hello Version: 1 Release: 1%{?dist} Summary: Say Hello, Texas style
License: Public Domain Source0: hello.sh BuildArch: noarch
%description A simple program to greet the user Texas style
%install mkdir -p %{buildroot}%{_bindir} install -p -m 755 %{SOURCE0} %{buildroot}%{_bindir}
%files %{_bindir}/hello.sh
%changelog
|
构建
1
| fedpkg --release f35 local
|
检查构建的RPM包
1
| fedpkg --release f35 lint
|
查看依赖列表
1 2 3 4 5 6
| rpm -qp --requires noarch/hello-1-1.fc35.noarch.rpm #/usr/bin/bash #rpmlib(CompressedFileNames) <= 3.0.4-1 #rpmlib(FileDigests) <= 4.6.0-1 #rpmlib(PayloadFilesHavePrefix) <= 4.0-1 #rpmlib(PayloadIsZstd) <= 5.4.18-1
|
查看提供列表
1 2
| [packager@fedora hello]$ rpm -qp --provides noarch/hello-1-1.fc35.noarch.rpm #hello = 1-1.fc35
|
安装运行
1 2 3
| sudo rmp -i x86_64/hello-1-1.fc35.x86_64.rpm hello.sh #Hello!
|
规格文件概述(部分)
- Name
包的名称,必须与规格文件保持一直,遵从包命名指南,使用小写字符命名文件.
- Version
上游版本号,如果版本中包含非数字字符,那么Release标签中也可能需要添加非数字字符.
- Release
版本发布,初始值设置为1%{?dist},增加其中的数字,当有同一个版本的新包发布时.当版本改变后,重置发布数字为1.参考版本指南.
- Summary
输入一行软件包的简短单行摘要,使用美式英语,不要以句号结束.
- Group
这个标签自Fedora 17被标记为抛弃,参考Spec File Reference Preamble
- License
开源软件许可证
- URL
有关此程序的详细信息,请参阅此URL.
- Source0
原始代码压缩归档文件的全路径,这个全路径的基本名称,将会被用于在SOURCES目录中搜索,如果有更多的源码,请使用Source1,Source2…
- Patch0
补丁文件路径
参考
- Creating RPM packages
- How to create a GNU Hello RPM package
- Package Naming Guidelines
- Versioning Guide