




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
:本文遵循“署名-非商业性使用-相同方式共享2.5陆”协 本第1节RPM简 第2节用源代码来编译程 第3节RPM组 第4节RPM 第5节Spec文件:定 第6节Spec文件:%prep部 第7节Spec文件:%build部 第8节Spec文件:%install部 第9节Spec文件:%clean部 第10节Spec文件:部 第11节Spec文件:%files部 第12节Spec文件:%changelog部 第13节rpmbuild程序简 第14节RPM包签 第15节自定义RPM指 I第1 RPM简RPMRPMRHN第和自定义软件方从编译RedHatRedHat不支持 RPMRPM是RedHatPackageManager的缩写即RedHat软件包管理工具。在Fedora、Redhat、Mandriva、SuSE、YellowDog、RedFlag等版本,以及在这些版本基础上开发出来的版中采用。除了RPM外另一个著名的Linux包管APT(AdvancedPackagingTool),DebianDebian系统中使用,例如Ubuntu.RPM包里面包如下内容运行环境,包括针对不同硬件架构、CPU另一个要注意问题是,RedHat不支持用户自己编译的RPM包,即使此RPM包是使用RedHat提供的SRPM编译出来的第2 用源代码来编译程 tar.gztar.bz2使用“补丁”的方式来更新这些错误和不足,我们把这种方法叫做patch。有了patch机制 树的patch文件。如果生成patch文件呢?我们使用diff工具来产生源文件和修改文件的区别,这个区别文件就是patch。#diff#diff-urfoo/foo-altered/>foo- 树更新城foo-alter了#cd#cd#patch-p1<../foo-在这个更新后的 里执行如下操作完成编#make第3 RPM组rpm-build包和技术规范文件(spec源代码(tar.gz方式文件补丁(patch生成文件(产品二进制RPM包(针对cpu规格或通用RPM包RPMRPMspec文件得到如何处理编译过程的指示,spec文件是由一系列的指令和段组成的,这个文件对于RPM包的生成必需且重要。它定义了源代码包的文件RPM编译之前需要建立其所需的结构,在RedHat中这个结构如下:|| | | `|| | |foo- `foo-alter-| ``BUILD 便是RPM进行所有build动作的工 SOURCES此 SPECS 存放spec文件RPMS SRPMS 存放编译后产生的所有SPMS文件第4节RPMSpec文件和rpmbuild程序使用预先定义的“宏(macro)”组织和编译RPM默认全局“宏”定义文件用户自定义“宏”文件~/.rpmmacros,它可覆盖全可以在执行过程重定义用户可以通过%{_topdir}为RPM编译过程定义无(non-privilegedRPMRPMrpm和rpmbuild行为转换的变量或函数。RPMspec文件的%definemacrovalue语法中定义,也可以在预读配置文件中定义。很多有效的宏定义被整合在/usr/lib/rpm/macros文件中。与当前系统选关的RPM宏定义放置在/etc/rpm/macrosRPM宏则可以放在~/.rpmmacros文件此外,rpmbuild命令可以使用define='macrovalus'的方式在运行的时候重设某个宏。rpm命令可以使用eval%{macro}参数显示某个宏或者使用showrc参数显示所有宏。宏就是为你更简单方便的编写和控制rpmspec文件而设计的。rootRPM包是相当不明智的。在普通用户下${HOME}创建一个.rpmmacros文件,并且在这个文件中定义一个宏%_topdir,这样普通用户就可以在这个特定的其自身有写权利的上编译RPM,而非在/usr/src/redhat编译了。%_rpmdir、%_specdir等宏定义也可以放置在${HOME}/.rpmmacros中,用来精细的定义RPM的编译过程。当你设置这些宏定义后,记创建其结构。#echo#echo"%_topdir$HOME/rpm">>#mkdir-p#mkdir#mkdir-p宏也可以用来定义常用命令,%configure宏定义了./configure执行的方式和参数%makeinstall宏定义了在执行makeinstall的时候调用的GNUAutomake的执行方式和宏也常用于定义一个 位置。比如%_tmppath用来定义rpm包中程序的临时写入文件的路径,默认这个路径设置为/var/tmp.额外的宏定义比如%_perfix它定义了在%configure宏中使用的--prefix操作符,其默认设置为/usr。%_prefix宏定义将影响其它宏定义,比如%_bindir,%_bindir默认定义为%rfx/i。的宏默认定义请参考/usr/bin/rpm/macros文件。第5 Spec文件:定版本定义Versioning:Name、Version、补充信息SupplementaryInformation:Group、License、URLPreReq、Requires、BuildPreReq、Reovides、Obsoletes、输入定义Inputs:Source[#]、编译定义Building:BuildRoot、一个foo.spec配置定义部分的例子%%definenamekevin-%defineversion2.9Name:%{name}Version:%{version}Release:2License:GPLGroup:Amusements/GamesURL:http://Source:kevin-foo.gzPatch0:kevin-foo-2.9-change.patchPatch1:kevin-foo-2.9-070617.patchPreReq:PreReq:unzipRequires:BuildPreReq:gcc>=BuildRoot: %{_tmppath}/%{name}-Summary:AfictionalexamplepackageforRPMbuildingThekevin-foopackageprovidesanexampleforhowRPMisusedtobuildcompliedsoftwarefromsourcesandpatches.字段说明 包名称Version:包的版Release:编译修订次数License:Group:安装时的分组信息,可以在/usr/share/doc/rpm-<version>/GROUPS里查URL:发布包的Source,Patch0,Patch1:默认放置在SOURCES 必需在%prep中%patch字段应用。数字不需要是连贯的。BuildRoot:编译生成RPM过程中生成二进制程序文件的chroot%description:详细的包介绍第6 Spec文件:%prep部%prep解压源代码包到foo.spec配置例子(%prep部分%setup-%patch0-%patch1-p1-b.origgunzipkevin-%setup- %patch0-应 Patch0,从上下文中剔出一%patch1p1b应用Patch1,且将原文件备份为.orig解压缩kevin-foo.gz%prep字段是spec文件中的预处理部分,该字段一般用来解压源程序包,并且为源程序打补丁,升级源程序。在其中s可以被直接执行,同时两个有用的宏也会这里被调用。%setup宏用来解包(untar)BUILD。它假设这个tar文件解压在%{name}-%{version},且编译后将其删除。%patch宏在预处理部分中为第7 Spec文件:%build部%build像 一样运%configurerpmeval%configure其参数类似foo.spec配置例子(%build部分%configure--enable-sharedCFLAGS=-O2make%configure–enable-执行./configure及详细参数执行make及设置环境变量%build字段标记了一段RPM中程序由源代码编译到二进制程序的s 况下是先调用./configure生成编译所需要的环境,然后使用make来编译源代码。第8 Spec文件:%install部%install字段为装包准备文件需要打包的文件都将被拷贝到BuildRoot定义的 $RPM_BUILD_ROOT变量将设置为BuildRoot%makeinstall宏在BuildRoot foo.spec配置例子(%install部分rm-rfmakeDESTDIR=$RPM_BUILD_ROOTinstall-m644kevin-foo.8${RPM_BUILD_ROOT/%{_mandir}/man8/kevin-rmrfmakeDESTDIR=$RPM_BUILD_ROOT 是一个拷贝和设置文件权限的工 宏将把所有需要打包的文件到%{buildroot}宏指定的相 位置,且赋予相对应的权限,默认 在 。除此之外还有其它宏定 比如{_mandir}、%{_bindir}和%{_sysconfdir}第9 Spec文件:%clean部%clean 的步骤:删除$RPM_BUILD_ROOT和使用makefoo.spec配置例子(%clean部分makeclean%clean字段为RPM编译工程提除操作。当你在编译源代码程序的时候,你经常当你运行了makeclean后一切有都正常了!在这中时候,就是编译中间文件在和我们开玩笑了!在RPM包的编译过程中,谁多不希望出现上面的问题,所以有了%clean部分来清第10 Spec文件:部%pre、当RPM包安装的时候将被执%preun、当RPM包卸载的时候讲被执rpm-q--scriptspackage将显示包中的foo.spec配置例子(部分groupadd-g250useradd-gfoos-s/sbin/nologin-d/var/tmp-Mchkconfig--addkfooif[$1=0];servicekfoostop>/dev/null2>&1chkconfig--delkfooif[$1=0];userdelkfoo和卸载RPM包的时候自用非交互的执行部分是必要和安全的。我们需要先将其停下来,RPM包升级的时候也会遇到相同的问题。因此,我们需要判断包是否为第一次安装,如果不是,那么它就是升级安装。在运行部分的时候$1参数将被设置用来简称是否为初次安装,如果$1参数返回为,它代表RPM包为初次安装;如果返为2或者,代表之前已经安装过相同软件包,其为升级安装;如果在%psun中0,则代表包以被完全卸载。第11 Spec文件:%files部%filesRPM如果 包括被%dir%defattr(mode、user、%attr(mode、user、group)%config标记配置文件%docfoo.spec配置例子(%files部分%defattr(-%config/bin/kevin-%doc%doc/usr/share/man/man8/kevin-%dir%defattr(-%config%doc文档文件放置在/usr/share/doc/%{name}-%{version}的相对路 /usr/share/man/man8/kevin-标 %dir标记一个 所有被打包的文件都应该在%fls自动中列出,虽然看起来不那么关键!%fls通过f%flesf/tmp/yacfllit%config宏用来定义包中程序所需要的配置文件,在升级和卸载包的时候,RPM工具会首先检测%config定义的文件是否被更过,如果被更改了,RPM工具将保留更改过的文件为.rpmorig文件,然后用新的配置文件替换原有的文件。如果它标记为%config(norece),那么其将不替换原有的配置文件,而把自身添加.rpmnew后缀放在原下。%ghostlog文件时,其可以标记一个本不存在于包中同时当包卸载第12 Spec文件:%changelog部%changelog使用rpm-q–changelog%changelogRPM包的改变,这个改变列表并不包含来自源代码的changelogRPM包spec文件的改变,包括配置文件的增添、补丁文件的增添、和文件权限类型的更改等。其第一行是最后更改的时间、更改者和邮件地址。更改时间的格式固定(date+“%a%b%d%Y”)。其后的从新到旧。第13 rpmbuild程序简rpmbuild-b[...]rpmbuild-t[...]rpmbuild--rebuild--buildroot--clean,--rmsource, --definemacrorpmbuild是用来构建软件的二进制RPM包和源代码SRPM包的工具。二进制如果要用某个spec文件构建,使用-b参数。如果需要根据一个可能是压缩过的tarspec-tSTAGE-ba(%prep,%build%install之后-bb(%prep,%build%install之后-bpspec"%prep"-bcspec"%build"(%prep阶段之后)。这通常等价于执行了一次"make"-bispec"%install"(%prep和阶段之后)"make-bl"列表检查"。spec文件的"%files"段落中的宏被扩展,检测-bsrpmbuildrebuildSRPM装。另外,--rebuild构建一个新的二进制打包,在构建结束时,构建 被删除(就好像用了--clean),源代码和spec文件也被删除。rpmbuild--buildrootDIRECTORY在构建时,使 覆盖spec文件中默--clean、--rmsource和--rmspec参数主要用于清除编译过程中产生的临 TFORM在构建时,将 TFORM解析为arch-vendor-os,并以此设置宏%_target,%_target_cpu,和%_target_os的值。TFORMi386、i486、i586、i686、arm等。的参数和使用请查看rpmbuild的manpage。第14 RPM包签RPM创建包RPM创建GPG密钥,设置rpm--resignpackage-与私钥相匹配的公钥需要在被签名 RPM包安装之前导入要安装的系统中GnuPG和RPM非其他试图冒充你的人。在自动更新站点这个功能尤为重要,比如RedHat、openSuSE、CentOS等站点,它们提供了7x24小时的更新和自动更新服务,在你做RPM包签名之前,你需要首先生成GnuPG签名,如果你之前已经有了签名件,默认它应该在 中。如果你之前没有可以按如下步骤创建一对gpg(GnuPG)1.4.6;Copyright(C)SoftwareFoundation,ThisprogramcomeswithYNOThissoftware,andyouetoredistributeundercertainconditions.SeethefileCOPYINGforgpg:已创‘ekn.gpg:新的配置文件‘hom..of’已 警告:在‘/hom..of’里的选项于此次运行期间未被使用gpg:环‘/hoe/kei/gup/eingpg’已建立gpg:环‘/hoe/kvn/nugpurngpg’已建立(1DSAElGamal默认(2)DSA(仅用于签名(5)RSA(仅用于签名您的选择DSA密钥对会有1024位ELG-E密钥长度应1024位4096位之间。您所要求的密钥尺寸是2048位0=密钥永不过期<n>=密钥n天后过<n>w密钥在n周后过<n>m=密钥n月后过<n>y密钥n年后过期Keydoesnotexpireat以上正确吗?(y/n)“irHeine(DerDichter)hduss真实:Kevin注释:“eviZou(Kissingwolf)snofga.o更改(N)、注释(C)、电子邮件地址(E)或确定(O)/退出 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 (284字节以多做些琐事(像是敲打键盘、移动鼠标、读写硬盘之类的),这会让随机数字发生 gpghome/kevin/.gnupg/trustdb.gpg:建立了信任度数据库gpg:密钥xxxxxxxx被标记为绝对信任gpg:gpg:需要31份完全信任,PGPgpg:深度:0有效性:1已签名:0信任度:0-,0q,0n,0m,0f,1upub1024D/2F4CB99B2007-12-31密钥=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxKevinZou(Kissingwolf)HYPERLINK"mailto:kissi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 本地环境测试题库及答案
- SqlServer期末考试题及答案
- 2025年社区服务管理职业资格试题及答案
- 模拟压力面试题及答案
- 钢贸公司考试试题及答案
- 手机上学习的软件设计师考试试题及答案
- 西方国家在应对气候变化中的政治角色分析试题及答案
- 西方国家法治建设试题及答案
- 网络安全实践经验分享试题及答案
- 西方的文化认同与政治社会化试题及答案
- 人教版数学八年级下册期末复习试卷
- 种植体修复前脱落率改进目标核心策略落实要点
- 公园物业服务投标方案(2023修订版)(技术方案)
- 《工逆向工程与增材制造》课件-19. Geomagic Design X 实体建模方法
- 2024低空经济场景白皮书
- 《“无废商业街区(商圈)”建设技术规范》编制说明
- 光伏项目运维服务承包合同5篇
- DB14-T 2855-2023 扁穗冰草种子生产技术规程
- 游泳池紧急救援管理制度
- 胰岛素皮下注射标准解读
- 教研组工作汇报课件
评论
0/150
提交评论