Rpm打包原理详解

合集下载

RPM详解——精选推荐

RPM详解——精选推荐

RPM详解概述RPM⽂件结构RPM包⽂件⼀般包含4部分:Lead、Signature、Header、Payloadlead----开头的标识部分,⽤于标识此份⽂件为⼀个RPM包Signature-----数字签名,通常包括针对头部的签名和针对载荷的签名Header--------头部,通常包括版权信息,版本号,包描述等信息;有时还包含⼀些特定的标签(Tag),⽐如PRE Tag就包含了rpm包在安装前需要执⾏的预安装脚本。

Payload-------载荷,包含实际安装的⽂件RPM命令安装及升级安装的⼀般步骤install a package, it goes through a number of steps:1.Checking the package and the files it wants to install2.Performing preinstallation tasks3.Uncompressing the files and placing them in the proper locations4.Performing post-processing tasks5.Updating the RPM DatabaseRPM数据库的相关⽂件位于/var/lib/rpm/⽬录下。

新安装@前⾯为⽤户名及密码,⽤户名uncljoe ,密码workers升级rpm -Uvh ⽆论软件包存在与否都执⾏升级或rpm -Fvh仅针对已安装的软件包进⾏升级升级时,RPM会对每个⽂件,⽐对三个版本的MD5校验值(old package file,current file,new package file)。

如果old package file与new package file的MD5校验值⼀样,但current file 不同,说明新⽼版本的⽂件是⼀样的,但管理员编辑过该⽂件(通常是⼀些配置⽂件),rpm 会保留current file(保留管理员的所做的配置),⽽不会⽤新包中的⽂件覆盖。

RPM打包技术和典型SPEC文件分析

RPM打包技术和典型SPEC文件分析
6 + umask 022
7 + cd /usr/src/dist/BUILD
生成的文件会在刚才建立的RPM目录下存在。
2)只生成src格式的rpm包
rpmbuild -bs xxx.spec
生成的文件会在刚才建立的SRPM目录下存在。
3) 只需要生成完整的源文件
rpmbuild -bp xxx.spec
二.典型spec文件分析
通过第一部分的介绍,我们对软件包的管理及spec文件的一些细节应该掌控的差不多了,接下来通过分析kaffeine.spec(kaffeine是linux平台下的媒体播放器)文件来让读者朋友实践一回spec文件的规范和书写。
Kaffeine.spec文件内容如下:
%define debug_package %
1) 只生成二进制格式的rpm包
rpmbuild -bb xxx.spec
用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)
1 Executing: %prep
2 + umask 022
3 + cd /usr/src/dist/BUILD
4 + exit 0
5 Executing: %build
(3)build段
本段是建立段,所要执行的命令为生成软件包服务,如make 命令。
(4)%install段
本段是安装段,其中的命令在安装软件包时将执行,如make install命令。
(5)%files段
本段是文件段,用于定义软件包所包含的文件,分为三类--说明文件(doc),设置文件(config)及执行程式,还可定义文件存取权限,拥有者及组别。

5、RPM包及打包和压缩命令

5、RPM包及打包和压缩命令

第五讲 RPM管理及文件打包和压缩一、rpm包1、rpm=redhat package managment 红帽子包管理器,已成为整个linux行业的包管理的标准;2、linux下的软件安装方式<1>源代码安装<2>rpm包安装3、rpm包安装的特点<1>优点:简单,方便,快捷<2>缺点:包的安装有依赖性4.rpm包的安装:<1>rpm包名的命名规则:xsnow-1.42-10.i386.rpm软件名-主版本号.次版本号-补丁次数.机型.rpm包补丁次数中:奇数表示测试版,偶数表示正式版;<2>安装rpm包:#rpm -ivh 包名.rpm升级安装:#rpm -Uvh 包名.rpm-U:表示如未安装就安装,已安装则升级;#rpm -Fvh 包名.rpm-F:表示只做升级,不做新装;可支持通配符安装:#rpm -ivh dhcp*<3>查看已安装的RPM包:#rpm -qa 包名*#rpm -qa |grep 包名参数:-q:query 查询 -a:all 所有<4>查看已经安装的RPM包产生的文件及存放路径#rpm -ql 已安装的包名<5>通过文件查询来源的包名#rpm -qf 文件名<6>查看RPM包的详细信息#rpm -qi xsnow-1.42-10<7>卸载已安装的rpm包#rpm -e 已安装的RPM包名注意:不支持通配符卸载;<8> --force 即使覆盖属于其它包的文件也强迫安装--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。

二、打包、查看、解包、压缩文件和目录命令:tar1、对文件和目录的打包和压缩2、查看归档和压缩文件3、恢复归档文件和压缩文件三、压缩命令: gzip (gzip的压缩率高于bzip2)功能:用于压缩文件,不能压目录,先把目录打包,再压缩。

rpm包 二进制 结构体

rpm包 二进制 结构体

rpm包二进制结构体摘要:1.RPM 包的概述2.RPM 包的二进制结构3.结构体的概念和应用4.RPM 包与结构体的关系正文:1.RPM 包的概述RPM(Remote Package Manager)包是一种用于在Linux 系统上进行软件安装、升级和卸载的打包管理工具。

它通过将软件及其依赖关系打包成一个或多个文件,实现了对软件的便捷管理。

RPM 包通常包含软件的源代码、编译选项、安装脚本等,使得用户可以方便地安装和使用软件。

2.RPM 包的二进制结构RPM 包的二进制结构是指RPM 包内部所包含的文件格式。

RPM 包中的文件通常分为两种类型:数据文件和控制文件。

数据文件包含了软件的实际内容,如源代码、可执行文件等;而控制文件则包含了关于这个软件包的元数据信息,如版本号、依赖关系等。

RPM 包的二进制结构遵循一定的规范,通常包含以下几个部分:- 头部信息:包括RPM 包的版本号、名称、大小等基本信息。

- 控制文件:包含软件的元数据信息,如版本号、描述、依赖关系等。

- 数据文件:包含软件的实际内容,如源代码、可执行文件等。

- 差分数据:记录RPM 包的更新历史,用于计算软件包的更新差异。

3.结构体的概念和应用结构体是一种复合数据类型,用于将不同类型的数据组合在一起。

结构体在C 语言和C++语言中广泛应用,可以用来表示复杂的数据结构,如链表、树等。

结构体的定义通常包含以下部分:- 结构体名:表示这个结构体的名称。

- 成员列表:列出结构体中包含的各个成员变量及其类型。

例如,定义一个表示学生的结构体:```cstruct Student {char name[20];int age;float score;};```4.RPM 包与结构体的关系RPM 包的二进制结构与结构体在概念上有相似之处,它们都是将不同类型的数据组合在一起。

然而,RPM 包的二进制结构更多地涉及到软件包的管理和安装,而结构体在编程语言中用于表示复杂的数据结构。

rpm详解

rpm详解

1)RPM(Redhat Package Management)是由RedHat研发的,在Linux 系统下的系统包管理工具。

RPM包的产生目的:使包的安装和卸载过程更容易,他能够证实一个包是否已正确安装了,能简化包的建立过程,能从原始码建立整个包,他能用于不同的体系结构。

RPM系统已成为目前Linux系统下包管理工具事实上的标准,并且他也移植到非常多商业的unix系统之下。

RPM包组成:由包标签对他标识,包标签包含软件名,软件版本,包的发行版本几部分。

在包的内部还包含包的建立时间,包的内容描述,安装包的所有文件的大小,数字签名以证实包的完整性等信息。

RMP包还包含包内的文件信息,其中包括:每个文件的文件名,每个文件的权限,文件的属组和拥有者,每个文件的md5校验和,文件的内容等。

RPM包名的组成:rpm包的名字都包含一个后缀“arch.rpm”,arch 指的是体系结构,对于Intel平台的有i386、i586、i686等,你所安装的包必须要和机器上的共享库的版本相匹配。

如果你发现某个RPM包没有安装,你能自己安装。

所有时候,你都能(必须是root用户)安装RPM包。

RPM包管理系统提供的功能:安装新的包,卸载旧的包,将一个旧包升级为新的包,获得已安装包的信息等。

周详讲述RPM源码包的构成:RPM需要一系列目录完成建立的工作。

正常的目录结构通常由一个顶级目录/usr/src/redhat/和五个子目录构成。

这五个子目录分别是:SOURCES------包含原始的源文件和补丁文件。

SPECS--------包含控制RPM包建立过程的spec文件。

BUILD--------包含源码解包和软件建立的目录。

RPMS---------包含建立过程创建的二进制包文件。

SRPMS--------包含建立过程创建的源码包文件。

(在RPMS或SRPMS目录下通常还会有关于RPM包目标平台的目录。

例如,i386、i586、i686等代表和Intel兼容cpu的平台,noarch目录下的RPM 包代表能在所有平台下执行。

自动化利器-RPM自定义打包

自动化利器-RPM自定义打包

⾃动化利器-RPM⾃定义打包1.Rpm打包程序1.1为什么要使⽤rpm打包1、编译安装软件,优点是可以定制化安装⽬录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。

2、yum安装软件,优点是全⾃动化安装,不需要为依赖问题发愁了,缺点是⾃主性太差,软件的功能、存放位置都已经固定好了,不易变更。

===>如果你现在还为是使⽤编译安装软件还是使⽤yum安装软件发愁,那你就out了。

3、编译源码,根据⾃⼰的需求做成定制RPM包-->搭建内⽹yum仓库--yum安装。

结合前两者的优点,暂未发现什么缺点。

可能的缺点就是RPM包的通⽤性差,只能适⽤于本公司的环境。

另外⼀般⼈不会定制RPM包。

这是中⼤型互联⽹企业运维⾃动化的必要技能。

2 fpm⼯具打包详解FPM的作者是jordansisselFPM功能简单说就是将⼀种类型的包转换成另⼀种类型。

2.1 ⽀持的源类型包dir #将⽬录打包成所需要的类型,可以⽤于源码编译安装的软件包rpm #对rpm进⾏转换gem #对rubygem包进⾏转换python #将python模块打包成相应的类型2.2⽀持的⽬标类型包rpm #转换为rpm包deb #转换为deb包solaris #转换为solaris包puppet #转换为puppet模块2.3 fpm安装[root@student ~]# yum -y install ruby rubygems ruby-devel ß安装ruby模块[root@student ~]# gem install fpm ß安装fpm3.fpm常⽤参数-s #指定源类型-t #指定⽬标类型,即想要制作为什么包-n #指定包的名字-v #指定包的版本号-C #指定打包的相对路径 Change directory to here before searching forfiles-d #指定依赖于哪些包-f #第⼆次打包时⽬录下如果有同名安装包存在,则覆盖它-p #输出的安装包的⽬录,不想放在当前⽬录下就需要指定--post-install #软件包安装完成之后所要运⾏的脚本;同--after-install--pre-install #软件包安装完成之前所要运⾏的脚本;同--before-install--post-uninstall #软件包卸载完成之后所要运⾏的脚本;同--after-remove--pre-uninstall #软件包卸载完成之前所要运⾏的脚本;同--before-remove4.实战定制Nginx的Rpm包编写脚本[root@oldboy ~]# cd /server/scripts/ ß进⼊到/server/scripts[root@oldboy scripts]# vim nginx_rpm.sh ß这是安装完rpm包要执⾏的脚本#!/bin/bashuseradd nginx -M -s /sbin/nologinln -s /application/nginx-1.6.2/ /application/nginx[root@student scripts]# fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/ ß打包no value for epoch is set, defaulting to nil {:level=>:warn}no value for epoch is set, defaulting to nil {:level=>:warn}Created package {:path=>"nginx-1.6.3-1.x86_64.rpm"}[root@student scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpm ß查看包内容[root@student scripts]# rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm ß查看脚本postinstall scriptlet (using /bin/sh):#!/bin/shuseradd nginx -M -s /sbin/nologinln -s /application/nginx/nginx-1.6.3/ /application/nginx5.实战定制LNMP的Rpm包如果是rpm包直接依赖---然后替换配置⽂件,启动即可。

rpm包组成结构

rpm包组成结构

rpm包组成结构RPM(Red Hat Package Manager)是一种在Linux系统中广泛使用的软件包管理工具。

它通过将软件打包成RPM包来方便地安装、升级和卸载软件。

RPM包的组成结构是指在创建和使用RPM包时所需的各个元素和组件。

本文将介绍RPM 包的组成结构,包括RPM包的文件结构、元数据和其他重要组件。

一、RPM包的文件结构RPM包的文件结构是指RPM包内部的目录和文件的组织结构。

RPM包内部有一些预定义的目录,包括:1. /usr:包含了系统的可执行文件、库文件和头文件等。

2. /etc:包含了系统的配置文件。

3. /var:包含了系统的变量文件,如日志文件和临时文件。

4. /bin:包含了系统的可执行文件。

此外,RPM包还包含了一些其他的目录和文件,包括:1. /usr/share/doc:包含了软件的文档文件。

2. /usr/share/man:包含了软件的man手册文件。

3. /usr/lib:包含了软件的库文件。

4. /usr/include:包含了软件的头文件。

RPM包的文件结构是由RPM包的构建过程和软件包的需求来确定的。

在创建RPM包时,需要将软件的文件和目录按照一定的规则放置到RPM包内部的相应位置。

二、RPM包的元数据RPM包的元数据是指RPM包中包含的关于软件的信息。

RPM包的元数据包括:1. 包的名称(Name):指定了软件包的名称。

2. 包的版本(Version):指定了软件包的版本号。

3. 包的发布(Release):指定了软件包的发布号。

4. 包的摘要(Summary):提供了软件包的简要描述。

5. 包的描述(Description):提供了软件包的详细描述。

6. 包的依赖关系(Dependencies):指定了软件包依赖的其他软件包。

7. 包的授权(License):指定了软件包的授权信息。

8. 包的构建时间(Build Time):指定了软件包的构建时间。

linux中的rpm命令的详细解释

linux中的rpm命令的详细解释

linux中的rpm命令的详细解释linxu下的rpm命令其实是一个软件包管理程序。

下面由店铺为大家整理了linux的rpm命令的详细解释的相关知识,希望对大家有帮助!一、linux中的rm命令的详细解释1.什么是rpmRPM 是Red hat Package Manager 的缩写,本意是Red Hat软件包管理,由RedHat开发出来的一种软件包管理程序,后来被LSB(Linux规范标准)会正式吸纳为Linux的标准包格式,命名为RPM Package Manager,现在所说的RPM即使 RPM Package Manager的缩写。

2.为什么要使用RPM软件包管理器RPM软件包管理器简化了用户在Linux系统上对软件进行安装、卸载、升级或更新的过程,只需要简短的命令就可以完成,从而省去了对对源代码进行编译、安装的复杂过程,从而大大提高了管理人员的工作效率3.RPM命名格式命名格式:appname-VERSION-RELEASE.ARCH.rpmVERSION:magior:主版本号minor:次版本号release:发行号RELEASE:包自身的修订号,有时候会包含适用的OS信息:eg: bash-4.3.2-2.centos6.x86_64.rpm中 2.centos6 就是RELEASE号ARCH:适用平台x86: i386, i486, i586, i686x86_64: x86_64, amd64powerpc: ppcnoarch: 跟平台无关;(perl,python,ruby等编译的程序)RPM分包机制:核心包,主包:命名与源项目名称一致;eg: bash-4.3.2-2.centos6.x86_64.rpm子包(支包):命令为源项目名称后附加支包中的文件提供的功能组成eg: bash-devel-4.3.2-2.centos6.x86_64.rpmRPM包获取途径1、系统的发行光盘镜像或官方站点2、程序包官方站点3、第三方组织:epel4、搜索RPM包的搜索引擎建议:生产过程中对rpm软件包安装之前需要验证程序包的来源合法性及包的完整性二、Linux中的rpm命令的安装方法安装语法格式:rpm {-i|--install} [install-options] PACKAGE_FILE1...安装时常用选项:-h: hash,以#来表示安装进度;每个# 号表示2%的安装进度-v, --verbose:显示安装过程中的详细信息;-vv: 能显示更加详细信息-vvv:--test:测试安装,不执行真正的安装过程,而仅报告依赖关系及冲突信息等;--nodeps :忽略依赖关系安装,【能安装成功,但未必能成功运行;】--replacepkgs:覆盖安装--重新安装并覆盖原有的文件--force:强制安装--olepackage:降级到旧版本--relocate 指明安装位置--replacefiles 指明安装时替换某个文件--replacepkgs 指明安装时替换整个包安装时常用组合: -ivh --ivvh三、Linux中rpm命令的升级步骤升级语法格式:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...-U: 升级或安装rpm {-F|--freshen} [install-options] PACKAGE_FILE ...-F:升级【只进行升级】升级常用选项-v, --verbose:显示升级过程中的详细信息;-vv: 能显示更加详细信息-vvv:--test:测试升级安装,不执行真正的升级安装过程,而仅报告依赖关系及冲突信息等;--nodeps :忽略依赖关系进行升级,--force:强制升级--olepackage:降级到旧版本升级时常用组合: -Uvh --Uvvh注意1:一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本内核;注意2:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;。

5、RPM包及打包及压缩命令

5、RPM包及打包及压缩命令

第五讲 RPM管理及文件打包和压缩一、 rpm 包1、rpm=redhat package managment红帽子担保理器,已成为整个linux行业的担保理的标准;2、linux下的软件安装方式<1>源代码安装<2>rpm包安装3、rpm 包安装的特色<1>长处:简单,方便,快捷<2>弊端:包的安装有依靠性4.rpm 包的安装:<1>rpm包名的命名规则:软件名 - 主版本号 . 次版本号 - 补丁次数 . 机型 .rpm 包补丁次数中:奇数表示测试版,偶数表示正式版;<2>安装 rpm 包:#rpm -ivh包名.rpm升级安装:#rpm -Uvh 包名 .rpm-U: 表示如未安装就安装,已安装则升级;#rpm -Fvh包名.rpm-F: 表示只做升级,不做新装;可支持通配符安装:#rpm -ivh dhcp*<3>查察已安装的 RPM包:#rpm -qa包名*#rpm -qa |grep包名参数: -q:query查问-a:all全部<4>查察已经安装的RPM包产生的文件及寄存路径#rpm -ql已安装的包名<5>经过文件查问根源的包名#rpm -qf文件名<6>查察 RPM包的详尽信息<7>卸载已安装的 rpm 包#rpm -e已安装的RPM包名注意:不支持通配符卸载;<8> --force即便覆盖属于其余包的文件也逼迫安装--nodeps假如该RPM包的安装依靠其余包,即便其余包没装,也逼迫安装。

二、打包、查察、解包、压缩文件和目录命令:tar 1、对文件和目录的打包和压缩2、查察归档和压缩文件3、恢复归档文件和压缩文件三、压缩命令:gzip (gzip的压缩率高于bzip2)功能:用于压缩文件,不可以压目录,先把目录打包,再压缩。

选项:-c压缩结果写入标准输出,原文件保持不变。

rpm 原理

rpm 原理

rpm 原理RPM 是一种常用的软件包管理系统,可以在 Linux 操作系统上高效地安装、升级、卸载和管理软件包。

它的原理基于一系列的脚本和元数据文件,核心原理如下:1. 软件包:RPM 的基本单位是软件包,它是预先打包好的软件分发单元。

软件包包含了软件的二进制文件、库文件、配置文件、文档等。

2. 软件包索引:RPM 使用软件包索引文件来跟踪系统上已安装的软件包。

索引文件记录了软件包的名称、版本、依赖关系等信息。

3. 事务:RPM 操作以事务为单位进行。

在安装、升级或卸载软件包时,要创建一个事务来记录所做的更改。

这样,在出现错误或需要回滚的情况下,可以撤销事务或回滚到事务之前的状态。

4. 依赖关系管理:RPM 使用依赖关系来确保软件包的正确安装和升级。

每个软件包都可以指定依赖于其他软件包的版本或功能,这样在安装时会自动检查系统是否满足这些依赖关系。

5. 脚本:RPM 提供了一系列的脚本来执行各种操作。

其中常见的脚本包括安装前脚本(pre-install)、安装后脚本(post-install)、卸载前脚本(pre-uninstall)和卸载后脚本(post-uninstall)。

这些脚本可以在软件包安装或卸载时执行特定的操作,例如创建或删除配置文件、修改系统设置等。

6. 构建工具:RPM 还提供了构建工具,用于创建软件包。

通过构建工具,可以将软件的源代码和相关文件打包成一个完整的软件包,并生成相应的元数据文件和索引。

综上所述,RPM 的原理通过软件包、软件包索引、事务、依赖关系管理、脚本和构建工具等组成,实现了软件包的高效管理和系统维护。

它简化了软件安装和管理过程,提高了系统的稳定性和可靠性。

rpm,yum,源码编译安装,gzip、bzip2、tar压缩打包

rpm,yum,源码编译安装,gzip、bzip2、tar压缩打包

rpm ,yum ,源码编译安装,gzip 、bzip2、tar 压缩打包Linux 中安装软件的三种⽅式与windows 类似,在Linux 系统上也可以安装各种应⽤程序,或称之为软件包镜像⽂件1、RPM 安装rpm 包来源1、来源⽹络下载2、来源本地:⾃⼰的镜像⾃带的rpm 包1.rpm 安装 rpm 安装预先编译打包,安装简单,下载下来之后直接安装。

优点:已经制作好的安装程序 缺点:不能⾃⼰解决依赖2.yum 安装 yum 安装基于rpm 安装 优点:增加了⾃动解决依赖的功能。

3.源代码编译安装 源代码安装通过编译源代码,得到软件包。

优点:可以⾃定制软件包。

缺点:⽐较复杂 # 挂载: mount /dev/sr0 /opt/ 或 mount /dev/cdrom /munt/ # 卸载: umount /dev/sr0 #挂载源 或 umount /opt #挂载点# 强制卸载: umount -l [挂载源或挂载点] # 查看挂载信息 df# 查看/操作设备内容需要先挂载[root@localhost dev]# mount /dev/sr0 /opt/ mount: /dev/sr0 写保护,将以只读⽅式挂载 # 查看是否挂载成功[root@localhost ~]# df ⽂件系统 1K-块 已⽤ 可⽤ 已⽤% 挂载点 /dev/sr0 4480476 4480476 0 100% /opt # 浏览光盘内容[root@localhost dev]# ls /opt/ CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL # 查看光盘上的安装包。

格式都是以.rpm 结尾的[root@localhost dev]# ls /opt/Packages/ ...... zlib-1.2.7-18.el7.x86_64.rpm zlib-devel-1.2.7-18.el7.x86_64.rpm zsh-5.0.2-31.el7.x86_64.rpm zziplib-0.13.62-9.el7.x86_64.rpm # 查看⾃⼰当前平台[root@localhost ~]# uname -m x86_64# 查看系统内核信息[root@localhost ~]# uname -r 3.10.0-1160.49.1.el7.x86_64# 安装:rpm -ivh [软件包名称] -v #显⽰安装过程 -i #显⽰安装包的详细信息 -h #安装包哈希标记 # 卸载:rpm -e [软件包名称]# 升级:rpm -Uvh [软件包名称]1、下载安装包2、安装 [root@localhost ~]# rpm -qip /opt/Packages/zsh-5.0.2-34.el7_8.2.x86_64.rpm #本地镜像 或 [root@localhost ~]# rpm -ivh zsh-5.0.2-34.el7_8.2.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-34.el7_8.2 ################################# [100%]3、卸载 [root@localhost ~]# rpm -e zsh4、更新 [root@localhost ~]# rpm -Uvh zsh-5.0.2-34.el7_8.2.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-34.el7_8.2 ################################# [100%]5、软件包名称 zsh-5.0.2-34.el7_8.2.x86_64.rpm zsh #软件包名称 5.0.2 #版本号 34 #第多少次编译 el7_8(CentOS 7)#适⽤的平台 x86_64 #适⽤的系统位数 rpm #扩展名6、查看已安装软件包的使⽤配置⽂件 [root@localhost ~]# rpm -qc zsh7、查看已安装包的描述信息 [root@localhost ~]# rpm -qi zsh8、查看是否安装某软件 [root@localhost ~]# rpm -q zsh9、查看当前系统安装了哪些rpm 软件 [root@localhost ~]# rpm -qa 10、查看软件的安装路径,查看安装了哪些东西 [root@localhost ~]# rpm -ql zsh2、yum 安装yum 是CentOS 的软件包管理⼯具,⾃动为我们解决软件依赖问题。

rpm的工作原理和作业过程

rpm的工作原理和作业过程

RPM(Red Hat Package Manager)是Red Hat发行版中使用的包管理工具,它用于安装、卸载、更新和查询已安装的软件包。

RPM使用二进制包进行软件分发,这些包包含了预编译的程序和相关的配置文件。

以下是对RPM工作原理和作业过程的详细介绍:1. 打包:RPM使用.spec文件来描述软件包的元数据,如软件包名称、版本、描述等。

开发人员使用rpmbuild工具根据源码和.spec 文件构建RPM包。

RPM包包含了预编译的程序和相关的配置文件,以便在目标系统上安装。

2. 安装:要安装一个RPM包,用户可以使用rpm命令或者通过图形界面工具(如Yum或DNF)进行安装。

RPM会检查系统中的依赖关系,确保所有必需的软件包都已安装。

然后,RPM会将软件包文件复制到目标系统上,并执行安装脚本以完成安装过程。

3. 卸载:要卸载一个RPM包,用户可以使用rpm命令或者通过图形界面工具进行卸载。

RPM会执行卸载脚本,删除软件包文件,并处理任何依赖关系。

4. 查询:用户可以使用rpm命令或者通过图形界面工具查询已安装或可用的软件包信息。

例如,可以查询软件包的详细描述、版本号、安装状态等。

5. 验证:RPM提供了验证机制,以确保软件包的完整性和真实性。

通过使用数字签名,RPM可以验证软件包的来源和完整性,防止篡改。

6. 依赖管理:RPM能够自动处理软件包的依赖关系。

当安装或卸载一个软件包时,RPM会检查该软件包所依赖的其他软件包是否已安装,并自动处理依赖关系,以确保系统的正常运行。

7. 软件仓库管理:RPM支持多个软件仓库的管理,以便用户可以从多个源获取软件包。

图形界面工具如Yum或DNF提供了方便的界面来管理软件仓库,包括添加、删除或配置仓库。

8. 安全性:RPM本身不提供安全性功能,但它是基于Linux操作系统的安全机制之上的。

Linux操作系统提供了用户权限管理、文件系统权限和防火墙等安全机制,以确保系统的安全性和隔离性。

RPM建包原理

RPM建包原理

RPM 建包原理为什么要打包?制作 rpm 不仅仅是打包,更可以解决菜单创建、打补钉、完成大量预配置、与其他软件包互动等操作。

使用源代码安装要求用户了解基本的编译过程、能够应付各种不能编译的意外、必须自己完成抽象的配置、甚至懂得软件开发,能够自己打补钉,……对非计算机专业的用户而言简直就是天方夜谭。

这是把软件开发的最后一步抛给了用 户,作为发行版,这是极不负责任的!也是不现实的,除非用 lfs,但那是一本菜谱,不是真正的发行版。

软件作者发布源代码是正确的,负责的作者一般都同时提供 rpm 和 deb 包以及它们的源代码包。

除非他们不会制作。

愿意使用什么,那是个人的自由,但对外就不能只想到自己。

GNU 精神是一种公益精神,没有奉献精神,在自由软件领域是要遭唾弃的!直 接使用其他发行版的 rpm 常常是不行的。

不知道大家看没看“恼人的依赖关系”这个帖子。

可以在技术支持区搜索一下。

任何两个发行版本在二进制上都是不能兼容的!他们实际是不同的操 作系统。

不仅使用的库文件不同,配置也迥异。

特别是同一个发行版的不同版本更不兼容。

任何包都必须在本地重新编译,而且不一定通得过,因为还有 spec宏的兼容问题!如果要在别的发行版上使用,必须用源码编译,这是常识。

考虑文件布局和配置问题,有时直接编译也是不够的,必须修改 spec,甚至自己打补丁。

如何创建 rpm 包?rpm 建包原理其实不复杂。

写 spec 相当于一种脚本编程,主要是在 spec 里提供一些软件相关信息,以及安装、卸载前后要执行的脚本,然后展开压缩的源代码包,打上补丁,执行编译,然后利用 make install 可以重新指定安装目的地的特性,把编译好的文件安装到指定的虚拟根目录下的指定位置里,一般是虚拟的 /usr 里,然后把这些目录、信息和脚本打成一个压缩包,即 rpm 包。

同时可选地生成源码包 src.rpm。

当然有很多具体细节问题。

您应该首先阅读软件的 readme 和 INSTALL 文件。

RPM

RPM

具有相关性套件之间的问题,就是所谓的套件相依属性, RPM 就在提供套件打包的档案时,同时加入一些讯息登
录的功能,这些讯息包括套件的版本、 打包套件者、相 依属性的套件、套件的功能说明、该套件的所有档案与 目录纪录、等等,
然后在 Linux 系统上面亦建立一个 RPM 套件资料库
( database ),如此一来,当您要安装某个以 RPM 型态提 供的套件时,在安装的过程中, RPM 会去检验一下资料 库里面是否已经存在相关的套件了, 如果资料库显示不 存在,那么这个 RPM 档案『预设』就不能安装( 会显示 一些错误讯息 )。 这个就是 RPM 类型的档案最为人所诟病的『 套件的属 性相依』问题
或相当;
需要满足套件的相依属性需求;
反安装时需要特别小心,最底层的套件不 可先移除,否则可能造成整个系统的问题!
那怎么办?还好,还有 SRPM 这个东西!
SRPM 是什么呢?顾名思义,他是 Source RPM 的意思,也就是这个 RPM 档案里面含 有原始码( Source Code )哩!特别注意的是, 这个 SRPM 所提供的套件内容『并没有经 过编译』, 他提供的是原始码
怎么 SRPM 这么麻烦!还要重新编译一次,那 么我们直接使用 RPM 来安装不就好了!? 通常一个套件在释出的时候,都会同时释出该
套件的 RPM 与 SRPM 。 我们现在知道 RPM 档案必须要在相同的 Linux 环境下才能够安装,而 SRPM 既然是原始码的 格式,自然我们就可以透过修改 SRPM 内的参 数设定档,然后重新编译产生能适合我们 Linux 环境的 RPM 档案, 如此一来,就可以将该套件安装到我们的系统 当中,而不必与原作者打包的 Linux 环境相同 了?这就是 SRPM 的用处了!

RPM包rpmbuild SPEC文件深度说明

RPM包rpmbuild SPEC文件深度说明

RPM包rpmbuild SPEC文件深度说明一、编写spec脚本rpm建包的原理其实并不复杂,可以理解为按照标准的格式整理一些信息,包括:软件基础信息,以及安装、卸载前后执行的脚本,对源码包解压、打补丁、编译,安装路径和文件等。

实际过程中,最关键的地方,是要清楚虚拟路径的位置,以及宏的定义。

二、关键字spec脚本包括很多关键字,主要有:引用Name: 软件包的名称,后面可使用%{name}的方式引用Summary: 软件包的内容概要Version:软件的实际版本号,例如:1.0.1等,后面可使用%{version}引用Release:发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用Group: 软件分组,建议使用标准分组License: 软件授权方式,通常就是GPLSource: 源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用BuildRoot: 这个是安装或编译时使用的“虚拟目录”,考虑到多用户的环境,一般定义为:%{_tmppath}/%{name}-%{version}-%{release}-root或%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n}该参数非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行操作。

后面可使用$RPM_BUILD_ROOT 方式引用。

URL:软件的主页Vendor: 发行商或打包组织的信息,例如RedFlagCo,LtdDisstribution:发行版标识Patch:补丁源码,可使用Patch1、Patch2等标识多个补丁,使用%patch0或%{patch0}引用Prefix: %{_prefix} 这个主要是为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况。

rpm的用法详解

rpm的用法详解

rpm的⽤法详解RPM是RedHat Package Manager(RedHat软件包管理⼯具)类似Windows⾥⾯的“添加/删除程序”rpm 执⾏安装包⼆进制包(Binary)以及源代码包(Source)两种。

⼆进制包可以直接安装在计算机中,⽽源代码包将会由RPM⾃动编译、安装。

源代码包经常以src.rpm作为后缀名。

常⽤命令组合:-ivh:安装显⽰安装进度--install--verbose--hash-Uvh:升级软件包--Update;-qpl:列出RPM软件包内的⽂件信息[Query Package list];-qpi:列出RPM软件包的描述信息[Query Package install package(s)];-qf:查找指定⽂件属于哪个RPM软件包[Query File];-Va:校验所有的RPM软件包,查找丢失的⽂件[View Lost];-e:删除包rpm -q samba //查询程序是否安装rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm //按路径安装并显⽰进度rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm //指定安装⽬录rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm //⽤来检查依赖关系;并不是真正的安装;rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm //新版本降级为旧版本rpm -qa | grep httpd #[搜索指定rpm包是否安装]--all搜索*httpd*rpm -ql httpd #[搜索rpm包]--list所有⽂件安装⽬录rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--filerpm -qpR file.rpm #[查看包]依赖关系rpm2cpio file.rpm |cpio -div #[抽出⽂件]rpm -ivh file.rpm #[安装新的rpm]--install--verbose--hashrpm -ivhrpm -Uvh file.rpm #[升级⼀个rpm]--upgraderpm -e file.rpm #[删除⼀个rpm包]--erase常⽤参数:Install/Upgrade/Erase options:-i, --install install package(s)-v, --verbose provide more detailed output-h, --hash print hash marks as package installs (good with -v)-e, --erase erase (uninstall) package-U, --upgrade=<packagefile>+ upgrade package(s)--replacepkge ⽆论软件包是否已被安装,都强⾏安装软件包--test 安装测试,并不实际安装--nodeps 忽略软件包的依赖关系强⾏安装--force 忽略软件包及⽂件的冲突Query options (with -q or --query):-a, --all query/verify all packages-p, --package query/verify a package file-l, --list list files in package-d, --docfiles list all documentation files-f, --file query/verify package(s) owning fileRPM源代码包装安装.src.rpm结尾的⽂件,这些⽂件是由软件的源代码包装⽽成的,⽤户要安装这类RPM软件包,必须使⽤命令:rpm --recompile vim-4.6-4.src.rpm #这个命令会把源代码解包并编译、安装它,如果⽤户使⽤命令:rpm --rebuild vim-4.6-4.src.rpm #在安装完成后,还会把编译⽣成的可执⾏⽂件重新包装成i386.rpm的RPM软件包。

rpm包 二进制 结构体

rpm包 二进制 结构体

rpm包二进制结构体摘要:1.RPM 包的概述2.RPM 包的二进制结构3.结构体的概念和应用4.RPM 包与结构体的关系5.总结正文:1.RPM 包的概述RPM(Red Hat Package Manager)是红帽Linux 发行版中的一种软件包管理器,主要用于安装、卸载、更新和查询软件包。

RPM 包是一种包含软件及其依赖关系的归档文件,可以方便地在不同的Linux 发行版之间进行软件的移植。

2.RPM 包的二进制结构RPM 包采用二进制格式存储,主要包括以下几个部分:- 文件头:RPM 包的开始部分,包含了RPM 包的魔数(Magic Number)以及版本信息,用于标识RPM 包的格式和版本。

- 签名区:用于存储RPM 包的数字签名,确保RPM 包在传输过程中没有被篡改。

- 摘要信息:包括RPM 包的名称、版本、描述、依赖关系等基本信息。

- 软件包信息:存储了软件包的具体内容,包括二进制文件、配置文件、文档等。

- 依赖关系:记录了该软件包所需的其他软件包及其版本要求。

- 安装脚本:包含了安装、卸载和升级该软件包所需的脚本。

- 验证信息:用于验证RPM 包的完整性和正确性。

3.结构体的概念和应用结构体是一种复合数据类型,它可以将不同类型的数据组织在一起。

结构体在C 语言中广泛应用,尤其在操作系统、编译器等底层软件开发中。

结构体可以描述一个实体,如一个人、一台电脑等,也可以描述一个数据集合,如RPM 包的摘要信息。

4.RPM 包与结构体的关系RPM 包的二进制结构采用了结构体的形式来存储和组织数据。

例如,在RPM 包的摘要信息部分,可以使用结构体来描述软件包的名称、版本、描述等信息。

这样,可以方便地对RPM 包进行解析和处理。

5.总结RPM 包是红帽Linux 发行版中的一种软件包管理器,采用二进制格式存储。

其结构主要包括文件头、签名区、摘要信息、软件包信息、依赖关系、安装脚本和验证信息等部分。

RPM打包入门教程

RPM打包入门教程

RPM打包教程内容目录1.Linux一般软件的安装 (1)2.Linux包类型 (1)3.RPM介绍 (2)3.1.例子 (2)3.2格式 (2)3.3rpm支持的架构 (2)4.RPM使用 (3)4.1RPM的运用 (3)4.2YUM的运用 (4)5.RPM打包 (4)5.1预备工作 (4)5.1.1预装软件 (4)5.1.2建立文件夹树 (4)5.2.创建RPM Spec文件 (5)5.2.1导言 (5)5.2.2 %description区段 (5)5.2.3 %prep 区段 (5)5.2.4 %build区段 (5)5.2.5 %install区段 (6)5.2.6 %clean区段 (6)5.2.7 %files区段 (6)5.2.8 %changelog区段 (6)5.3 调用rpmbuild命令编译rpm软件包 (7)6. Fedora哦也,酷毙了~ (7)1.Linux一般软件的安装./cofiguremake && make install2.Linux包类型软件包简单的说就是像Windows下.exe或者.msi的样子的安装包。

可以将编译好的二进制文件,源代码,文档等以特定格式压缩。

使用软件包管理工具可以直接安装。

RPM ——RPM(Redhat Packager Manager),最初是Redhat公司引进在RedhatLinux上的,是以自由软件许可证发布的软件。

主要使用的发行版有:RHEL,Fedora,CentOS,Mandriva,openSUSE,国内的Redflag,Qomo,还有一个值得关注的是就快出现的Meego也是用RPM的。

They say they like “yum”Deb——也有不使用RPM管理的发行版,那就是所谓的Debian系,主要是Debian,Ubuntu,Knoppix。

Portage——是Gentoo引入的,类似与FreeBSD中的一个port的一个管理。

rpm -ql原理

rpm -ql原理

rpm -ql原理标题,深入探讨rpm -ql命令的工作原理。

在Linux系统中,rpm包管理工具是非常常用的,它可以用来安装、升级、查询和删除软件包。

其中,rpm -ql命令是用来列出已安装软件包中的文件列表的。

本文将深入探讨rpm -ql命令的工作原理,帮助读者更好地理解这一常用命令。

首先,rpm是Red Hat Package Manager的缩写,它使用一种称为RPM包格式的文件来管理软件包。

每个RPM软件包都包含了一个或多个文件,以及一些元数据,如软件包的名称、版本号、依赖关系等。

当我们使用rpm -ql命令时,实际上是在查询已安装的软件包中的文件列表。

rpm -ql命令的工作原理可以分为以下几个步骤:1. 查询软件包数据库,当我们执行rpm -ql命令时,系统会首先查询软件包数据库,以确定已安装的软件包信息。

这些信息包括软件包的名称、版本号、安装路径等。

2. 提取文件列表,一旦确定了已安装的软件包,rpm -ql命令会从软件包中提取文件列表。

这些文件列表包括了软件包中所有文件的路径和名称。

3. 显示文件列表,最后,rpm -ql命令将提取到的文件列表显示给用户。

用户可以看到已安装软件包中的所有文件,从而了解软件包的组成和安装位置。

需要注意的是,rpm -ql命令只能查询已安装的软件包,而不能查询尚未安装的软件包。

如果需要查询尚未安装的软件包中的文件列表,可以使用rpm -qlp命令,其中p表示查询尚未安装的软件包。

总之,rpm -ql命令是一个非常实用的工具,可以帮助我们了解已安装软件包中的文件组成。

通过深入理解rpm -ql命令的工作原理,我们可以更好地利用这一命令,管理和维护Linux系统中的软件包。

vi包装方案

vi包装方案

vi包装方案引言vi是一种经典的文本编辑器,在软件开发和系统管理等领域广泛使用。

为了方便用户使用和传输,vi可以通过包装方案进行打包和分发。

本文将介绍vi包装方案的基本概念、常见的打包工具以及打包流程。

包装方案的概述包装方案是将软件打包为方便传输和安装的形式的过程。

它通常包括将软件的所有文件和依赖项打包成一个可执行文件或归档文件,并提供一些安装和配置脚本来帮助用户完成安装和启动过程。

打包方案还可以包含一些元数据,如软件版本号和授权信息等。

通常情况下,包装方案可以分为两种类型:二进制包和源码包。

二进制包是将软件编译成可执行的二进制文件,并添加一些数据文件和配置文件,以便用户可以直接通过运行这个文件来安装和使用软件。

而源码包则是将软件的源代码和编译脚本打包成一个压缩文件,用户需要自行编译和安装。

常见的打包工具在Linux和Unix系统中,有许多常见的打包工具可用于打包vi软件。

以下是一些常见的工具:1.RPM(Red Hat Package Manager):RPM是一种常用的打包工具,它使用.rpm后缀的包文件,并提供了一套命令行工具用于安装、升级和卸载软件包。

通过RPM,可以将vi软件打包为二进制包,并将其发布到RPM软件仓库。

2.DEB(Debian Package):DEB是Debian和Ubuntu等Linux发行版使用的一种打包格式。

通过DEB,可以将vi软件打包为二进制包,并使用dpkg命令进行安装和管理。

3.tarball:tarball是一种常见的打包格式,它是将vi软件的所有文件和目录打包成一个tar压缩文件。

用户可以使用tar命令将这个压缩文件解压并安装。

4.手动打包:除了使用自动化的打包工具外,用户还可以手动将vi软件的所有文件和目录打包成一个压缩文件。

这种方法需要一些基本的Linux命令行知识,并且不能自动处理依赖关系和配置过程。

打包流程下面是一个简单的vi包装流程示例:1.确认软件:首先,要确定要打包的vi软件是否已经安装并配置好。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Rpm打包原理详解为什么要打包?制作rpm 不仅仅是打包,更可以解决菜单创建、打补丁、完成大量预配置、与其他软件包互动等操作。

使用源代码安装要求用户了解基本的编译过程、能够应付各种不能编译的意外、必须自己完成抽象的配置、甚至懂得软件开发,能够自己打补丁,……对非计算机专业的用户而言简直就是天方夜谭。

这是把软件开发的最后一步抛给了用户,作为发行版,这是极不负责任的!也是不现实的,除非用lfs,但那是一本菜谱,不是真正的发行版。

软件作者发布源代码是正确的,负责的作者一般都同时提供rpm 和deb 包以及它们的源代码包。

除非他们不会制作。

愿意使用什么,那是个人的自由,但对外就不能只想到自己。

GNU 精神是一种公益精神,没有奉献精神,在自由软件领域是要遭唾弃的!直接使用其他发行版的rpm 常常是不行的。

不知道大家看没看“恼人的依赖关系”这个帖子。

可以在技术支持区搜索一下。

任何两个发行版本在二进制上都是不能兼容的!他们实际是不同的操作系统。

不仅使用的库文件不同,配置也迥异。

特别是同一个发行版的不同版本更不兼容。

任何包都必须在本地重新编译,而且不一定通得过,因为还有spec 宏的兼容问题!如果要在别的发行版上使用,必须用源码编译,这是常识。

考虑文件布局和配置问题,有时直接编译也是不够的,必须修改spec,甚至自己打补丁。

如何创建rpm 包?rpm 建包原理其实不复杂。

写spec 相当于一种脚本编程,主要是在spec 里提供一些软件相关信息,以及安装、卸载前后要执行的脚本,然后展开压缩的源代码包,打上补丁,执行编译,然后利用make install 可以重新指定安装目的地的特性,把编译好的文件安装到指定的虚拟根目录下的指定位置里,一般是虚拟的/usr 里,然后把这些目录、信息和脚本打成一个压缩包,即rpm 包。

同时可选地生成源码包src.rpm。

当然有很多具体细节问题。

您应该首先阅读软件的readme 和INSTALL 文件。

打包原则1. 任何人都应该在系统现有src.rpm 的spec 基础上修改更新,除非没有这样的包。

这可以省去很多麻烦,少走弯路。

2. 任何人都无权删除别人的changelog 和原始打包者的信息,这是对别人的不尊重。

但你可以追加自己的信息。

3. 尽可能在spec 里使用系统的标准宏定义,而不要用非标准写法。

4. 任何人都不应该直接提供修改后的源代码,而应该以补丁形式发布你的修改,在spec 里完成打补丁操作。

务必做到一个补丁只解决一个问题,这样才能确保补丁的可重用性,否则版本升级后补丁很容易失效。

如果你确信自己的补丁是清洁补丁,尽可能发给上游开发者,这样才能一劳永逸。

你所打的任何补丁,其授权方式必须和被修改源代码保持一致。

预备知识:首先我们观察一下rpm 文件名的特点。

一个rpm 包文件名通常由 5 段组成:%{name}-%{version}-%{release}.ix86.rpmcutedict-1.1-1mgc.i686.rpm这里%{name}=cutedict,%{version}=1.1,%{release}=1mgc,ix86=i686,如果是为athlon 芯片家族编译的包,这里就是athlon,依此类推。

注意:下面是一个spec 模板。

1. 凡是行首加上# 的都被注释掉了,实际运行时不起作用,如要使其生效,请去掉注释符#。

2. 凡是以%{***} 和%*** 形式出现的符号都是“宏”,很多宏都是系统预定义的[注2],也可以是自己定义的。

3. 下面的黑体字是spec 文件的关键字,不能写错。

4. 有不明白的地方可以参见跟帖里的参考文献。

5. 如果软件没有使用GNU autotool 创建,而是自己写的Makefile,这就导致不能按照常规方法打包,非常麻烦。

6. 服务器软件通常都需要大量预配置工作,spec 打包绝非一两天能解决,需要深入研究很多东西和反复实践,建议初学者不要尝试。

7. 其他发行版的spec 与src.rpm 是很好的教材,建议打包前先找找Fedora 或SuSE 的文件学习,能借鉴最好,但不应该不修改照搬过来或使用Mandrake 的文件,因为它使用的大量宏定义和我们不兼容,甚至src.rpm 直接编译都通不过。

------------------------------------------------------------------[spec 文件头部]# Initial spec file created by autospec #这里是一些注释%define _noautoreq perl(Plot) perl(WidgetDemo) #这里用%define 自定义一个系统里没有的叫做_noautoreq 的宏,后面可以用%{_noautoreq} 引用。

Name: software #这是软件包名称,后面可以用%{name} 引用Summary: a software #这是软件包的内容提要#Summary(zh_CN): #这里写入中文内容提要(如果有必要。

不建议使用,因为如果系统里的默认编码与此处不符,会导致显示乱码。

例如:我们使用GBK,如果这里的中文是UTF-8 编码,在kpackage 里就会显示乱码,但是synaptic 可能能够正确显示,但需要把zh_CN 改为zh_CN.UTF-8 )Version: number #这是软件的实际版本号,例如2.1.6、2.2final 等,后面可以用%{version} 引用Release: number #发布序列号,我们用1mgc、2mgc 等等,标明这是第几次打包。

如果软件本身是预览版,比如pre6 版,则写成pre6_1mgc、pre6_2mgc,后面可以用%{release} 引用Group: Applications/Multimedia #这是软件分组,建议使用标准分组,参见下面:[注1]#Group(zh_CN): #中文软件分组(如果有必要)License: GPL #这是软件版权证书,通常是GPLSource: %{name}-%{version}.tar.gz #这是源代码(通常是压缩包),可以带有完整的网址,可以用正整数标识多个源Source0 Source4 Source5 Source100,数字不必连续排列,后面可以用%{SOURCE0}、%{SOURCE4}、%{SOURCE5}、%{SOURCE100} 引用。

例如/src/%{name}-%{version}.tar.gzBuildRoo t: %{_tmppath}/%{name}-%{version}-%{release}-buildroot #这是make install 时使用的“虚拟”根目录也称为“构建根”目录,通常是/var/tmp/软件名称-版本号-发布序列号-buildroot,make install 时一般会将软件安装在/var/tmp/软件名称-版本号-发布序列号-buildroot/usr/ 下的bin/ 下(可执行文件)、share/ 下(数据、资源文件)、lib/ 下(共享库文件)等等,例如/var/tmp/cce-0.51-1mgc-buildroot/usr/bin/cce。

不过实际不一定都是这样,具体情况具体对待# 下面是可选的字段URL: / #这是软件主页地址#Vendor: Red Hat Co.,ltd. #这是发行商或者打包组织的信息,我们统一写成MGC Group,不过这一行可以省略,把它写入/usr/lib/rpm/macros 标准宏定义文件里,该文件的Vendor 这行定义是空的,而且通常前面用# 注释掉了#Distribution: Red Hat Linux #这是软件针对的发行版标识,我们是Magic LinuxPatch: src-%{version}.patch #这是补丁源代码(可以是压缩包),可以用正整数标识多个源Patch1 Patch4 Patch6,数字不必连续排列。

Prefix: %{_prefix} #指定make install 时在虚拟根目录里的安装位置,通常用标准的%{_prefix} 宏,它代表/usr。

这里指定后,用户可以在rpm 安装阶段重新指定安装到其他位置,如/opt,否则就不能改变安装位置。

Prefix: %{_sysconfdir} #如果软件有些文件并非都安装到%{_prefix},那么你需要指明其他位置。

例如你需要把一个配置文件放到/etc 下面,这显然不在/usr 下面,此时你需要前方这种写法。

%{_sysconfdir} 宏代表/etc。

这里指定后,用户可以在rpm 安装阶段重新指定这些文件安装到其他位置,如/opt/etc,否则就不能改变安装位置。

[注3]#BuildArch: noarch#编译目标处理器架构,就是今后软件运行时的CPU 类型。

noarch 是不指定架构,通常标准默认是i386,定义在了系统的标准宏定义文件/usr/lib/rpm/macros 里[注2]。

实际编译时可以在rpmbuild 命令行用--target=i686 参数,spec 里通常不写这行。

#Requires: XFree86>=4.3 zlib libpng #这里罗列所有安装本包时需要先行安装的包(依赖包),通常软件会依赖这些包里的一部分文件。

可以分成多行来写。

如果这里不写明依赖包,打包时系统会自动把具体依赖的.so 文件写进rpm 包,而不会注明这些文件属于哪些软件包,这会对用户造成困惑,因为他们很难知道这些文件属于哪些软件包#Obsoletes: #这里列出的软件包都是“陈旧”的,当安装本包的时候,这里列出的包都会被自动卸载!NoAutoReq: %{_noautoreq} #这里的意思是禁止自动查找对spec 文件头部预定义的_noautoreq 宏里定义的两个软件包[perl(Plot) 和perl(WidgetDemo)]的依赖关系,通常对于prel 模块需要这样处理。

因为即便你在Requires 字段指明了本包所依赖的包含这两个模块的那些软件包,安装本包的时候系统仍然会直接查找是否安装有这些perl 模块,而不会查找那些包含这两个模块的软件包是否已经安装。

#PreReq: loop #如果在%post 字段执行的脚本需要使用一些特殊命令,例如loop,你需要在此标明#Requires(post): loop #这是上面一行的另一种写法#Autoreq: 0 #这里使用0 关闭了自动标注本软件包需要的依赖关系的功能,使用1 或者不写此行(默认)就是开启自动标注依赖关系的功能。

相关文档
最新文档