rpm 在打包的时候,可以创建子包,这样可以清晰的进行软件包的拆分,以下是结合官方文档学习
的一个实践

预备条件

需要安装rpmdevtools

spec 文件

  • 内容
  1. Name: foo
  1. Version: 2.7
  1. Release: 1
  1. License: apache
  1. Summary: dalong demo rpm subpacakge
  1. Group: dalong/dalong
  1. %description
  1. This is the long description of the foo app, and the baz library needed to
  1. build it...
  1. %package server
  1. Summary: The foo server
  1. Group: dalong/dalong
  1. %description server
  1. This is the long description for the foo server...
  1. %package client
  1. Summary: The foo client
  1. Group: dalong/dalong
  1. %description client
  1. This is the long description for the foo client...
  1. %package -n bazlib
  1. Version: 5.6
  1. Summary: The baz library
  1. Group: dalong/dalong
  1. %description -n bazlib
  1. This is the long description for the bazlib...
  1. %pre
  1. echo "This is the foo package preinstall script"
  1. %build
  1. cat > main.sh <<EOF
  1. #!/bin/sh
  1. echo "main"
  1. EOF
  1. cat > server.sh <<EOF
  1. #!/bin/sh
  1. echo "server"
  1. EOF
  1. cat > client.sh <<EOF
  1. #!/bin/sh
  1. echo "client"
  1. EOF
  1. cat > bazlib.sh <<EOF
  1. #!/bin/sh
  1. echo "bazlib"
  1. EOF
  1. %install
  1. mkdir -p %{buildroot}/usr/local/
  1. install -m 755 main.sh %{buildroot}/usr/local/main.sh
  1. install -m 755 server.sh %{buildroot}/usr/local/server.sh
  1. install -m 755 client.sh %{buildroot}/usr/local/client.sh
  1. install -m 755 bazlib.sh %{buildroot}/usr/local/bazlib.sh
  1. %pre server
  1. echo "This is the foo-server subpackage preinstall script"
  1. %pre client
  1. echo "This is the foo-client subpackage preinstall script"
  1. %pre -n bazlib
  1. echo "This is the bazlib subpackage preinstall script"
  1. %files
  1. /usr/local/main.sh
  1. %files server
  1. /usr/local/server.sh
  1. %files client
  1. /usr/local/client.sh
  1. %files -n bazlib
  1. /usr/local/bazlib.sh
 
 
  • 简单说明
    子包通过%package <name> 格式声明,默认生成的名称为父-子名称 我们可以通过-n 声明自己的
    对于pre、post 阶段, 我们可以定义自己的script,比如以上的pre 阶段

构建&&效果

  • 构建
 
  1. rpmbuild -ba foo-2.7.spec

效果

  1. 正在执行(%build):/bin/sh -e /usr/local/var/tmp/rpm-tmp.j3G7re
  1. + umask 022
  1. + cd /Users/dalong/rpmbuild/BUILD
  1. + cat
  1. + cat
  1. + cat
  1. + cat
  1. + exit 0
  1. 正在执行(%install):/bin/sh -e /usr/local/var/tmp/rpm-tmp.Maa2R7
  1. + umask 022
  1. + cd /Users/dalong/rpmbuild/BUILD
  1. + mkdir -p /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64/usr/local/
  1. + install -m 755 main.sh /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64/usr/local/main.sh
  1. + install -m 755 server.sh /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64/usr/local/server.sh
  1. + install -m 755 client.sh /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64/usr/local/client.sh
  1. + install -m 755 bazlib.sh /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64/usr/local/bazlib.sh
  1. + /usr/local/Cellar/rpm/4.14.1/lib/rpm/brp-compress
  1. + /usr/local/Cellar/rpm/4.14.1/lib/rpm/brp-strip /usr/bin/strip
  1. + /usr/local/Cellar/rpm/4.14.1/lib/rpm/brp-strip-static-archive /usr/bin/strip
  1. + /usr/local/Cellar/rpm/4.14.1/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
  1. 处理文件:foo-2.7-1.x86_64
  1. Provides: foo = 2.7-1 foo(x86-64) = 2.7-1
  1. Requires(interp): /bin/sh
  1. Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  1. Requires(pre): /bin/sh
  1. Requires: /bin/sh
  1. 处理文件:foo-server-2.7-1.x86_64
  1. Provides: foo-server = 2.7-1 foo-server(x86-64) = 2.7-1
  1. Requires(interp): /bin/sh
  1. Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  1. Requires(pre): /bin/sh
  1. Requires: /bin/sh
  1. 处理文件:foo-client-2.7-1.x86_64
  1. Provides: foo-client = 2.7-1 foo-client(x86-64) = 2.7-1
  1. Requires(interp): /bin/sh
  1. Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  1. Requires(pre): /bin/sh
  1. Requires: /bin/sh
  1. 处理文件:bazlib-5.6-1.x86_64
  1. Provides: bazlib = 5.6-1 bazlib(x86-64) = 5.6-1
  1. Requires(interp): /bin/sh
  1. Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
  1. Requires(pre): /bin/sh
  1. Requires: /bin/sh
  1. 检查未打包文件:/usr/local/Cellar/rpm/4.14.1/lib/rpm/check-files /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64
  1. 已写至:/Users/dalong/rpmbuild/SRPMS/foo-2.7-1.src.rpm
  1. 已写至:/Users/dalong/rpmbuild/RPMS/x86_64/foo-2.7-1.x86_64.rpm
  1. 已写至:/Users/dalong/rpmbuild/RPMS/x86_64/foo-server-2.7-1.x86_64.rpm
  1. 已写至:/Users/dalong/rpmbuild/RPMS/x86_64/foo-client-2.7-1.x86_64.rpm
  1. 已写至:/Users/dalong/rpmbuild/RPMS/x86_64/bazlib-5.6-1.x86_64.rpm
  1. 正在执行(%clean):/bin/sh -e /usr/local/var/tmp/rpm-tmp.wO2CmJ
  1. + umask 022
  1. + cd /Users/dalong/rpmbuild/BUILD
  1. + /bin/rm -rf /Users/dalong/rpmbuild/BUILDROOT/foo-2.7-1.x86_64
  1. + exit 0
 
  • 查看rpm 包信息
    默认生成的文件存储路径~/rpmbuild/RPMS/x86_64
    生成的内容
 
  1. ├── bazlib-5.6-1.x86_64.rpm
  1. ├── foo-2.7-1.x86_64.rpm
  1. ├── foo-client-2.7-1.x86_64.rpm
  1. └── foo-server-2.7-1.x86_64.rpm
 

查看一个包的信息

  1. rpm -qip foo-client-2.7-1.x86_64.rpm
  1. Name : foo-client
  1. Version : 2.7
  1. Release : 1
  1. Architecture: x86_64
  1. Install Date: (not installed)
  1. Group : dalong/dalong
  1. Size : 24
  1. License : apache
  1. Signature : (none)
  1. Source RPM : foo-2.7-1.src.rpm
  1. Build Date : 11/ 3 09:39:07 2019
  1. Build Host : dalongrong.local
  1. Relocations : (not relocatable)
  1. Summary : The foo client
  1. Description :
  1. This is the long description for the foo client...

说明

以上是一个简单的学习,实际中我们需要结合实际项目添加更多的配置,同时还需要考虑分发。。。。好多事情

参考资料

https://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch10s04s02.html 
http://ftp.rpm.org/max-rpm/s1-rpm-subpack-spec-file-changes.html 
https://github.com/rongfengliang/rpm-subpackage-learning

rpm 子包创建学习的更多相关文章

  1. rpm 程序包管理介绍

    API:application program interface ABI:application binary interface linux系统的ABI文件是ELF格式的 windows系统的AB ...

  2. plv8 rpm包创建

    以下是从一个三方rpm构建,获取到的rpm 包制作spec,主要是学习下pg 扩展rpm 包的打包 rpm src 包 下载地址 https://fedora.pkgs.org/29/fedora-x ...

  3. Linux学习 - 02 使用 - Centos8 - 『更换rpm/epel包源为国内源』

    1. Centos8 - 『更换rpm/epel包源为国内源』 centos 8 默认是会读取centos.org的mirrorlist的,所以一般来说是不需要配置镜像的. 如果你的网络访问mirro ...

  4. [原创]SSIS-执行包任务调用子包且子包读取父包变量

    背景:       有时候需要将一个个开发好的独立的ETL包串接起来形成一个独立而庞大的包,如:每家分公司都开发不同的ETL包,最后使用执行包任务来将这些分公司的包给串联起来形成一个独立而完整运行的E ...

  5. Sql Server的艺术(六) SQL 子查询,创建使用返回多行的子查询,子查询创建视图

    子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中. 子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据. 子查询可以在SELECT,INSERT,UPDA ...

  6. 【原创】SSIS-执行包任务调用子包且子包读取父包变量

    背景: 有时候需要将一个个开发好的独立的ETL包串接起来形成一个独立而庞大的包,如:每家分公司都开发不同的ETL包,最后使用执行包任务来将这些分公司的包给串联起来形成一个独立而完整运行的ETL包,此时 ...

  7. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  8. java concurrent包的学习(转)

    java concurrent包的学习(转) http://my.oschina.net/adwangxiao/blog/110188 我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常 ...

  9. Ubuntu系统中安装RPM格式包的方法

    Ubuntu的软件包格式为deb,而RPM格式的包则是Red Hat 相关系统所用的软件包.当我们看到一个想用的软件包时,如果他是RPM格式,而你的操作系统是Ubuntu,那岂不是很遗憾?其实,在Ub ...

随机推荐

  1. git rebase的使用: 合并多次commit记录; rebase一个分支的起点

    合并多次commit记录: good:https://blog.csdn.net/csdlwzy/article/details/83379546 使用 git log 命令查看提交历史: 想要合并前 ...

  2. git 版本(commit) 回退 -- 使用git reset 指令

    刚刚提交了三个commit, git reflog显示如下: 最后一个commit在文件末尾加了一行:v3,以此类推: 下面,使用git reset --hard commitID来进行commit回 ...

  3. 初识Go语言--(2)Hello World

    新建hello.go文件,内容如下 package main import "fmt" func main() { //输出Hello World fmt.Println(&quo ...

  4. c++小学期大作业攻略(二)整体思路+主界面

    写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...

  5. 集成Spring-Boot与gRPC,grpc-spring-boot-starter

    项目地址:grpc-spring-boot-starter grpc是一个出身名门的RPC框架,性能高,灵活度高,支持多语言. 支持多语言,如果你的项目在使用多种语言做开发,非常推荐使用. 作为Jav ...

  6. wordcount实例

    scala的wordcount实例 package com.wondersgroup.myscala import scala.actors.{Actor, Future} import scala. ...

  7. 4-5 Scrapy知识补充

    FormRequest FormRequest类是专门用来处理HTML表单的,同时对隐藏的表单处理也很方便.适合用来完成登录操作. 类原型:class scrapy.http.FormRequest( ...

  8. Base64和本地以及在线图片互转

    package com.ruoyi.common.utils; import java.io.ByteArrayOutputStream; import java.io.FileInputStream ...

  9. FormData使用详解

  10. ASP.NET Core 中的 Razor 文件编译

    asp .net core mvc 3.0 在编译的时候做了一些改变,有些view视图更改需要重新编译,你也可以配置运行时编译,不用每次更改都去重新生成,具体代码如下,从官方文档看到,做个记录. Ra ...