Linux下制作RPM软件包

本文介绍如何使用SPEC文件创建RPM格式的软件包,并通过实例详细解析制作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着RedHat Linux的风靡全球,其软件包管理工具及格式RPM也得到推广。基于RPM源代码开放、安装卸载简单、升级维护方便及查询功能强大的特点,越来越多的开发者喜欢采用RPM格式来发布自己的软件包,更多的用户从中受益。那么,RPM软件包是怎样制作的呢?

其实,制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件。下面以我制作小赵编辑器LZE的软件包(lze-6.0-1.i386.rpm)为例,详细说明一下软件包的制作过程。


1.mkdir -p /usr/src/dist/{BUILD,RPMS/i386}

上述命令用于创建两个目录/usr/src/dist/BUILD/usr/src/dist/RPMS/i386,前一个目录是RPM建立软件包时用的目录,后一个是RPM输出软件包的目录,我的LZE软件包lze-6.0-1.i386.rpm就是在此目录下存放的。这两个目录不创建,运行rpm命令建包时将报错退出。


注意:输出目录名i386,意味着这是台X86的机器。如果你的机器与此体系不同,则目录名也要相应更换。


2.
编写软件包描述文件
lze-6.0-1.spec

要想制作一个软件包,就必须写一个软件包描述文件(SPEC)。这个文件中包含了软件包的诸多信息,如软件包的名字,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件列表等等。


LZE
软件包描述文件lze-6.0-1.spec比较简单,仅用于创建二进制程序包。其描述文件内容如下:(每行开头的数字为所在行在文件中的行号)


1 Summary
:小赵全屏幕中英文多窗口多功能编辑器(Linux/UNIX系统适用)


2 Name
lze

3 Version
6.0

4 Release
1

5 Vendor
:纵横软件制作中心(Emailzhsoft@etang.com


6 Copyright
Share

7 Group
Applications/Editors

8 Source
http
//zhsoft.myetang.com/lze-6.0.tar.gz

9 %description

10
小赵编辑器,是为使用SCO UNIXLinux多用户系统的广大用户专门设计的全屏幕多窗


11
口中英文多功能编辑器。


12
它主要有以下十大特点:1.全屏幕菜单操作。2.显示方式多样。3.块操作丰富。4.


13
字制表功能强大。5.多窗口操作灵活自如。6.文件操作功能齐全。7.解释输出功能独具特


14
色。8.自带中文输入法(增强五笔和增强拼音),实用方便。9.十六进制编辑功能,如虎


15
添翼。10.即时翻译,按到即译。


16
总之,小赵编辑器会成为您在UNIXLinux系统上编制程序和书写一般性文稿的好帮手。


17
它将在工作中助您一臂之力,轻松上阵,游刃有余!


18

19 %prep

20 # prep start.

21

22 %build

23 # build start.

24 cp /root/{
读我,版权声明
} .

25

26 %install

27 # install start.

28

29 %files

30 %defattr
-rootroot


31 %doc
读我


32 %doc
版权声明


33 %config /etc/funkey.def

34 %config /etc/inputme.def

35

36 /usr/bin/lze

37 /usr/bin/lzeime.py

38 /usr/bin/lzeime.wb

39

40 %changelog

41

42 * Fri May 1 1998
雨亦奇


43 -
增加多窗口操作


44

45 * Mon Mar 24 1997
雨亦奇


46 -
增加块操作命令


47

描述文件说明如下:


1)文件头


它包含以下几个域:


* Summary


软件包一句话说明,一行有效。


* Name


软件包的名字,RPM用该名字与版本号,释出号及体系号来命名软件包。如,本例输出的软件包名为lze-6.0-1.i386.rpm


* Version


软件版本号。仅当软件较以前有较大改变时才增加版本号。


* Release


软件释出号。若软件较以前改变较小,则仅增加释出号,不改变版本号。


* Vendor


软件开发者的名字。


* Copyright


软件包所采用的版权规则。具体有: GPL(自由软件),BSDMITPublic Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等。


* Group


软件包所属类别,具体类别有:


Amusements/Games
(娱乐/游戏)


Amusements/Graphics
(娱乐/图形)


Applications/Archiving
(应用/档案)


Applications/Communications
(应用/通讯)


Applications/Databases
(应用/数据库)


Applications/Editors
(应用/编辑器)


Applications/Emulators
(应用/仿真器)


Applications/Engineering
(应用/工程)


Applications/File
(应用/文件)


Applications/Internet
(应用/因特网)


Applications/Multimedia
(应用/多媒体)


Applications/Productivity
(应用/产品)


Applications/Publishing
(应用/印刷)


Applications/System
(应用/系统)


Applications/Text
(应用/文本)


Development/Debuggers
(开发/调试器)


Development/Languages
(开发/语言)


Development/Libraries
(开发/函数库)


Development/System
(开发/系统)


Development/Tools
(开发/工具)


Documentation
(文档)


System Environment/Base
(系统环境/基础)


System Environment/Daemons
(系统环境/守护)


System Environment/Kernel
(系统环境/内核)


System Environment/Libraries
(系统环境/函数库)


System Environment/Shells
(系统环境/接口)


User Interface/Desktops
(用户界面/桌面)


User Interface/X
(用户界面/X窗口)


User Interface/X Hardware Support
(用户界面/X硬件支持)


* Source


源程序软件包的名字。


* %description


软件包具体说明,可写在多个行上。示例中第10-18行均为说明。

2%prep


这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面%build%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行。示例中,本段只有第20行一行注释语句(以#开头),不执行任何操作。


3build


本段是建立段,所执行的命令为生成软件包服务。


本段第23行是注释行,第24行执行的是拷贝命令,将/root目录下的两个文件(读我,版权声明)拷贝到软件包建立目录(/usr/src/dist/BUILD)。


4%install


本段是安装段,其中的命令在安装软件包时将执行。示例中,本段只有第27行一行注释语句(以#开头),不执行任何操作。


5%files


本段是文件段,用于定义软件包所包含的文件,分为三类--说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。本段中:


30行-%defattr宏:定义文件存取权限为默认值(用-表示默认值,也可选择八进制数值,如0777等),定义拥有者为root,定义组别为root


3132行-%doc宏:用该宏定义软件包所含的说明文档,若没有指定目录,则目录为/usr/src/dist/BUILD。每个宏只能定义一个说明文档。说明文档一般安装在“/usr/doc/软件包名-版本号-释出号目录下。


3334行-%config宏:定义软件包应用的配置文件,象sendmail.cfpasswd等。当卸载含有配置文件的软件包时,任何未作改动的配置文件将被删除,改动过的配置文件将自动改名,后缀加上.rpmsave,以便再度安装这个软件包时可以迅速恢复使用。


36-38行-为软件包所包含的文件名列表,可以写许多行。如果文件名指示的是一个目录,则该目录下的所有文件将被包含在软件包中,注意不要弄错了。


6%changelog


本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中,以便查询之用。


每一个修改日志都有这样一种格式:第一行是:* 星期 修改人 电子信箱。


其中:星期、月份均用英文形式,用中文会出错。


接下来的行写的应是修改了什么地方,可写多行。一般以减号起始,便于查阅。


3.rpm -bb lze-6.0-1.spec

用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)


1 Executing
%prep

2 + umask 022

3 + cd /usr/src/dist/BUILD

4 + exit 0

5 Executing
%build

6 + umask 022

7 + cd /usr/src/dist/BUILD

8 + cp /root/
读我 /root/版权声明
.

9 + exit 0

10 Executing
%install

11 + umask 022

12 + cd /usr/src/dist/BUILD

13 + exit 0

14 Processing files
lze

15 Executing
%doc

16 + umask 022

17 + cd /usr/src/dist/BUILD

18 + DOCDIR=/usr/doc/lze-6.0

19 + export DOCDIR

20 + rm -rf /usr/doc/lze-6.0

21 + /bin/mkdir -p /usr/doc/lze-6.0

22 + cp -pr
读我
/usr/doc/lze-6.0

23 + cp -pr
版权声明
/usr/doc/lze-6.0

24 + exit 0

25 Finding Provides
using /usr/lib/rpm/find-provides
...

26 Finding Requires
using /usr/lib/rpm/find-requires
...

27 Requires
ld-Linux.so.2 libc.so.6 libc.so.6GLIBC_2.0 libc.so.6GLIBC_2.1


28 Wrote
/usr/src/dist/RPMS/i386/lze-6.0-1.i386.rpm

28行显示: 制作完成软件包,名字为lze-6.0-1.i386.rpm,在/usr/src/dist/RPMS/i386目录下。


4.
软件包制作完成后,可用以下命令查询一下,看看效果。如果不满意的话,可以再次修改软件包描述文件,重新运行上一步命令,产生新的RPM软件包。


转到/usr/src/dist/RPMS/i386目录,执行以下命令:


1
rpm -qpi lze-6.0-1.i386.rpm

此命令用于查询指定软件包的头部信息,结果如下:(以行号开头)


1 Name
lze Relocations not relocateable


2 Version
6.0 Vendor 纵横软件制作中心(Emailzhsoft@etang.com


3 Release
1 Build Date 20010712 星期四 133321


4 Install date
not installed Build Host 纵横软件制作中心


5 Group
Applications/Editors Source RPM
lze-6.0-1.src.rpm

6 Size
532081 License
Share

7 Summary
小赵全屏幕中英文多窗口多功能编辑器(Linux/UNIX系统适用)


8 Description


9
小赵编辑器,是为使用SCO UNIXLinux多用户系统的广大用户专门设计的全屏幕多窗


10
口中英文多功能编辑器。


11
它主要有以下十大特点:1.全屏幕菜单操作。2.显示方式多样。3.块操作丰富。4.


12
字制表功能强大。5.多窗口操作灵活自如。6.文件操作功能齐全。7.解释输出功能独具特


13
色。8.自带中文输入法(增强五笔和增强拼音),实用方便。9.十六进制编辑功能,如虎


14
添翼。10.即时翻译,按到即译。


15
总之,小赵编辑器会成为您在UNIXLinux系统上编制程序和书写一般性文稿的好帮手。


16
它将在工作中助您一臂之力,轻松上阵,游刃有余!


2
rpm -qpl lze-6.0-1.i386.rpm

此命令用于查询指定软件包的全部文件列表,将命令中的-qpl换作-qpd,将显示文档文件列表,换作-qpc将显示配置文件列表。


命令执行结果如下:(行号开头)


1 /etc/funkey.def

2 /etc/inputme.def

3 /usr/bin/lze

4 /usr/bin/lzeime.py

5 /usr/bin/lzeime.wb

6 /usr/doc/lze-6.0

7 /usr/doc/lze-6.0/
版权声明


8 /usr/doc/lze-6.0/
读我


查询结果一切正常,软件包制作到此结束。


小结


Linux下制作RPM软件包关键在描述文件,写起来着实简单,根据上述步骤生成软件包后,就可以对外发布了。在其它机器上用安装命令(rpm -i 包名)可安装这个软件包,若想卸载,可用命令(rpm -e 包名)来卸载这个包,非常方便。

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值