Fedora下RPM包制作

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
    补丁文件路径

参考

  1. Creating RPM packages
  2. How to create a GNU Hello RPM package
  3. Package Naming Guidelines
  4. Versioning Guide