From 9e620841f5aa70df59d27a85c93f0b7af3466867 Mon Sep 17 00:00:00 2001 From: He Chenlan <210hcl@gmail.com> Date: Tue, 19 Jan 2021 00:19:05 +0800 Subject: [PATCH] Finished %global --- RPM参考指南.txt | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/RPM参考指南.txt b/RPM参考指南.txt index e84b2a6..283abc0 100644 --- a/RPM参考指南.txt +++ b/RPM参考指南.txt @@ -2,8 +2,7 @@ RPM参考指南 1.rpm编译 2.rpm内容查看与解包 3.打包环境准备 -3.rpm spec -4.rpmbuild +4.打包与spec语法 5.rpmlint 0.说明 @@ -60,9 +59,20 @@ rpmdev-setuptree 执行后会自动在所在目录下新建rpmbuild文件夹,里面是rpm打包专用的目录。五个文件夹,BUILD文件夹,临时编译目录,宏%buildroot定义的目录,如果编译或打包失败,日志也在这个目录;RPMS文件夹,生成的二进制文件所在目录,.rpm前会有文件所属架构,如noarch,x86_64,aarch64;SOURCES文件夹,patch,源代码,额外的要打包进去的源文件放在这儿;SPEC文件夹,.spec文件就放这里;SRPM文件夹,生成的.src.rpm所在位置。 确定好准备打包的软件后,在SPEC文件夹内创建文件,软件名.spec,并将软件的源代码放到SOURCES文件夹。 -4.spec文件 +4.打包与spec语法 +4.1关于编译的根目录 +在RPM打包的上下​​文中,"buildroot"是chroot环境。这意味着构建工件将使用与最终用户系统中相同的文件系统层次结构放置在此处,其中"buildroot"充当根目录。构建工件的放置应符合最终用户系统的文件系统层次结构标准。稍后会将"buildroot"中的文件放入cpio归档文件,该文件成为RPM的主要部分。当用户在系统上安装RPM时,这些文件将提取到根目录中,并保留正确的层次结构。 + +项目使用 https://osdn.net/projects/resuse/scm/git/doc/blobs/master/templete.spec?export=raw 作为默认的spec模板。 + +4.2rpmbuild的使用 +rpmbuild -bs a.spec 生成a的SRPM a.src.rpm +rpmbuild --rebuild a.src.rpm即可编译a,生成a.x86_64.rpm或者a.noarch.rpm +rpmbuild -bb a.spec也可以编译a。 + spec文件和bash一样,#后面为注释。推荐参考GNU nano的打包脚本,简单明了。 -spec文件结构: + +4.3spec文件结构 Name: 软件的名字,同时也是这个spec文件的文件名 Version: 软件的版本号 Release: 打包的版次,如果Version更新,则版次清零(从0开始标) @@ -84,6 +94,15 @@ ExcludeArch: 无法打包的架构。 ##暂不使用 %files 编译出来的文件,SOURCES1开始的文件要放在哪里。 %changelog 打包日志。 -关于编译的根目录: -在RPM打包的上下​​文中,"buildroot"是chroot环境。这意味着构建工件将使用与最终用户系统中相同的文件系统层次结构放置在此处,其中"buildroot"充当根目录。构建工件的放置应符合最终用户系统的文件系统层次结构标准。稍后会将"buildroot"中的文件放入cpio归档文件,该文件成为RPM的主要部分。当用户在系统上安装RPM时,这些文件将提取到根目录中,并保留正确的层次结构。 - +4.4marco ##marco相对复杂,如果翻译/解释的不对一定要提出来 +把宏注释掉用%%。 +4.4.1%global [(opts)] 以及%define [(opts)] +作用是定义一个宏,比如 %global sample temp.spec 即将temp.spec赋值给sample。%global作用域为全文,而%define作用域有限,仅适用于指定部分。请尽量使用%global,原因参见https://docs.fedoraproject.org/en-US/packaging-guidelines/#_global_preferred_over_define 宏的名称(name字段)至少3个字符,可以是字母、数字或者_。定义宏可以没有参数。opts的传递与getopt(bash内建的getopt)的传递完全相同,以便在宏调用开始时进行argc/argv处理。在扩展参数化宏时,可以使用以下类似于Shell的宏: +%0 被调用的宏的名称 +%* 所有参数 (与shell不同,不包括任何已处理的标志) +%** 所有参数 (包括任何已处理的标志) +%# 参数数量 +%{-f} 标记f本身,如果在调用时出现 ##flag f详见https://rpm.org/user_doc/macros.html Writing a Macro段,实在看不懂 +%{-f*} 标记f的参数,如果在调用时出现 +%1, %2 参数自己 (在getopt处理之后) +4.4.2%setup -- 2.11.0