RedHat系列RPM软件打包实例(一)

  对于Linux操作系统,由于软件大部分都是开源软件构成,所以软件打包算是维护一个发行版的绝大多数任务。在Linux那个远古的时代,大家告诉你软件的安装都是下载源码、配置、编译和安装。

  下面以Fedora 22为例子演示,CentOS可能会有一些差异,暂且不表。且是在本地进行打包的,没有用到Fedora的Koji系统。

1.配置环境

1.1 安装打包软件

1
user@localhost  ~ sudo dnf install fedora-packager @development-tools rpmdevtools

1.2 配置打包环境

  手册强烈建议不要使用root打包,以防破坏系统;也不要使用系统常用用户打包,以防上传一些用户的私密信息;所以建议建立一个专门打包的普通用户。

1
2
3
4
5
6
7
8
9
 user@localhost  ~ sudo useradd makerpm
user@localhost  ~ sudo usermod -a -G mock makerpm
user@localhost  ~ sudo passwd makerpm
user@localhost  ~ su makerpm
Password:
[makerpm@localhost ~]$ rpmdev-setuptree
[makerpm@localhost ~]$ ls
rpmbuild
[makerpm@localhost ~]$

然后打包环境就建立好了。

2.编写spec文件

2.1 参考已经打好的包

  Fedora发布的软件都是包含源代码的,所以可以借鉴这些包的打包脚本,先模仿再创作是最便捷的学习方式。

1
2
3
4
[makerpm@localhost dist]$  dnf download --source p7zip
[makerpm@localhost dist]$ mkdir p7zip-9.20.1-8.fc22
[makerpm@localhost dist]$ cd p7zip-9.20.1-8.fc22/
[makerpm@localhost p7zip-9.20.1-8.fc22]$ rpm2cpio ../p7zip-9.20.1-8.fc22.src.rpm | cpio -i

然后慢慢品味p7zip.spec吧!

2.2 准备打包的源代码包

  起始环境建立好之后,打包的过程,就是编写spec文件的过程。
  使用的材料是上一次的strtest工程进行打包,注意包的命名规范:name-version.tar.gz

1
2
3
4
5
user@localhost  ~/Study/project/to_linux  mv strtest strtest-1.0.1
user@localhost  ~/Study/project/to_linux  tar czvf strtest-1.0.1.tar.gz strtest-1.0.1
user@localhost  ~/Study/project/to_linux  sudo cp strtest-1.0.1.tar.gz /home/makerpm/rpmbuild/SOURCES/
user@localhost  ~/Study/project/to_linux  sudo chown makerpm:makerpm /home/makerpm/rpmbuild/SOURCES/strtest-1.0.1.tar.gz
user@localhost  ~/Study/project/to_linux 

2.3 使用默认模板,修改模板参数

1
2
3
4
[makerpm@localhost SPECS]$ cd ~/rpmbuild/SPECS
[makerpm@localhost SPECS]$ rpmdev-newspec strtest
strtest.spec created; type minimal, rpm version >= 4.12.
[makerpm@localhost SPECS]$

  工具会根据提供的程序的名字,来猜测最匹配的模板。
  然后就是修改strtest.spec,填充开始的项目相关资料,几个主要的地方也已经列出了,对于标准的软件包,其%prep %build %install等部分都不需要修改,保持默认就可以了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[makerpm@localhost SPECS]$ cat strtest.spec 
Name: strtest
Version: 1.0.1
Release: 1%{?dist}
Summary: "The strtest program from Nicol TAO"
Summary(zh_CN): "陶治江的strtest测试程序"

License: GPLv3+
URL: https://freesign.net
# 没有挂到网上的时候,就把软件包直接拷贝到~/rpmbuild/SOURCES/目录下面
Source0: https://freesign.net/pub//%{name}-%{version}.tar.gz

# Optional可选项,如果实在没有依赖部分,就将下面的注释掉
#BuildRequires:
#Requires:

%description
This is the strtest program written by Nicol Tao, used to test for
the system automake and the rpm format software package.

%description -l zh_CN
"strtest"程序,用来进行automake的测试,以及rpm系列的系统打包操作。

%prep
%setup -q


%build
%configure
make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
%make_install


%files
#此处需要添加的,安装的文件、文档列表
%defattr(-,root,root,-)
%{_bindir}/strtest
%doc INSTALL
%license COPYING


# 修改日志的格式要求还是蛮严格的哦!
%changelog
* Tue Sep 29 2015 Nicol TAO <taozhijiang@gmail.com> - 1.0.1-1
- First initial release

准备好之后,使用

1
[makerpm@localhost SPECS]$ rpmbuild -ba strtest.spec

执行打包,就会生成strtest-1.0.1-1.fc22.x86_64.rpm和对于的debug-info,src.rpm文件!

手册还建议用rpmlint检查打包是否符合规范,那么就跑一下吧!

1
[makerpm@localhost SPECS]$ rpmlint strtest.spec ../SRPMS/strtest* ../RPMS/*/strtest*

结果是3 packages and 1 specfiles checked; 0 errors, 13 warnings.我勒个去啊,不管了,检查的还是蛮细致的!

2.4 验证生成的rpm包

  检查某个包所打包包含的文件列表

1
2
3
4
5
6
7
[makerpm@localhost x86_64]$ rpm -qpl strtest-1.0.1-1.fc22.x86_64.rpm 
/usr/bin/strtest
/usr/share/doc/strtest
/usr/share/doc/strtest/INSTALL
/usr/share/licenses/strtest
/usr/share/licenses/strtest/COPYING
[makerpm@localhost x86_64]$

  使用rpm -ivh strtest-1.0.1-1.fc22.x86_64.rpm安装之后,可以查看软件的其他信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[makerpm@localhost x86_64]$ rpm -q --info strtest     
Name : strtest
Version : 1.0.1
Release : 1.fc22
Architecture: x86_64
Install Date: Tue 29 Sep 2015 04:45:43 PM CST
Group : Unspecified
Size : 7216
License : GPLv3+
Signature : (none)
Source RPM : strtest-1.0.1-1.fc22.src.rpm
Build Date : Tue 29 Sep 2015 04:44:44 PM CST
Build Host : localhost
Relocations : (not relocatable)
URL : https://freesign.net
Summary : "The strtest program from Nicol TAO"
Description :
This is the strtest program written by Nicol Tao, used to test for
the system automake and the rpm format software package.
[makerpm@localhost x86_64]$

  更多的特性请man rpm

  简单的打包过程就结束了。后面继续更新!

参考