RPM 打包指南

简介

这个指南包括以下三个部分

如何准备用于 RPM 打包的源码包

这是给没有软件开发背景的人准备的,参见 Preparing Software for Packaging

如何把源码包打包进 RPM 包

这适用于需要将源码包打包到 RPM 中的开发人员,参见 Packaging Software

高级打包技巧

这是处理高级 RPM 打包方案的参考资料,参阅 Advanced Topics

准备

完成这个教程需要准备以下的包

$ yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools

为什么需要 RPM 来打包呢

RPM 是运行在 Redhat CentOSFedora 上的包管理系统。RPM 帮助你更简单的分发,管理和更新软件。很多软件供应商通过传统的压缩包来分发软件。但是,将软件打包到 RPM 中有几个优点,这些优点概述如下

安装,重新安装,删除,升级和验证包

用户可以使用标准的包管理工具(例如 Yum 或者 PackageKit)来安装,重新安装,移除升级和验证你的 RPM 包

使用已安装软件包的数据库来查询和验证已安装软件包

因为 RPM 维护已安装软件包及其文件的数据库,因此用户可以轻松查询和验证其系统上的软件包

使用元数据来描述包,安装说明等

每个 RPM 软件包都包含描述软件包组件,版本,发行版,大小,项目 url,安装说明等的元数据

将原始软件打包为源包和二进制包

RPM允许您获取原始软件源并将其打包为用户的源和二进制包。 在源包中,您拥有原始源以及所使用的任何修补程序以及完整的构建说明。 随着软件的新版本发布,此设计可以简化软件包的维护。

将包添加到 Yum 仓库

你可以将软件包添加到 yum 仓库,是客户端可以轻松查找和部署软件

对包进行数字签名

使用 GPG 签名秘钥,你可以对包进行数字签名,以便用户能够验证包的真实性

你的第一个 RPM 包

创建一个 RPM 包可能是很复杂的。这里有一个略过了一些步骤的完整的,简化的 RPM 的 spec 文件。

Name:       hello-world
Version:    1
Release:    1
Summary:    Most simple RPM package
License:    FIXME%description
This is my first RPM package, which does nothing.%prep
# we have no source, so nothing here%build
cat > hello-world.sh <<EOF
#!/usr/bin/bash
echo Hello world
EOF%install
mkdir -p %{buildroot}/usr/bin/
install -m 755 hello-world.sh %{buildroot}/usr/bin/hello-world.sh%files
/usr/bin/hello-world.sh%changelog
# let skip this for now

保存这个文件到 hello-world.spec

现在运行下面的命令

$ rpmdev-setuptree
$ rpmbuild -ba hello-world.spec

rpmdev-setuptree 创建了一些工作目录,由于这些目录永久存储在 $HOME 中,因此不需要再次使用此命令。

rpmbuild 创建了一个实际的 RPM 包,这个命令的输出可能如下

... [SNIP]
Wrote: /home/mirek/rpmbuild/SRPMS/hello-world-1-1.src.rpm
Wrote: /home/mirek/rpmbuild/RPMS/x86_64/hello-world-1-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.wgaJzv
+ umask 022
+ cd /home/mirek/rpmbuild/BUILD
+ /usr/bin/rm -rf /home/mirek/rpmbuild/BUILDROOT/hello-world-1-1.x86_64
+ exit 0

/home/mirek/rpmbuild/RPMS/x86_64/hello-world-1-1.x86_64.rpm 是你的第一个 RPM 包,他可以被系统安装和测试。

准备打包的的软件

本章介绍源代码和创建软件,它们是 RPM 包管理的必备步骤

什么是源码?

Source code 是指计算机的人类可读指令,描述了如何执行计算。源代码用编程语言表示。

以下使用三个版本的 Hello world 程序,每个版本都使用不同的编程语言编写。用这三种不同语言编写的程序以不同的方式打包,涵盖 RPM 打包程序的三个主要用例。

首先是用 bash 编写:

bello

#!/bin/bashprintf "Hello World\n"

python 编写:

pello.py

#!/usr/bin/env pythonprint("Hello World")

C 编写:

cello.c

#include <stdio.h>int main(void) {printf("Hello World\n");return 0;
}

三个程序的唯一目的都是在命令行输出 Hello World

了解怎么编程对打包不是必须的,但是很有帮助

本地编译代码

Natively compiled 本地编译是把编程语言编译成机器代码,生成二进制可执行文件。这种软件可以独立运行。

以这种方式构建的 RPM 包是适用于特定体系结构的。这意味着您在使用 64 位(x86_64)AMD 或 Intel 处理器的计算机上编译此类软件,则无法在 32 位(x86)AMD 或 Intel 处理器上执行。生成的包将在其名称中指定体系结构。

解释语言代码

某些编程语言(如 bash 或 python)无法编译为机器代码。相反,它们程序的源代码是由语言解释器或语言虚拟机逐步执行的,无需事先转换。

完全用解释型语言编写的软件不是特定于体系结构的。因此,生成的 RPM 包名称中将包含字符串 noarch

解释型语言是可以 byte-compiled 或者 raw-interpreted (字节编译或者原始解释)。这两种类型在程序构建过程和包装过程中有所不同。

Raw-interpreted programs

Raw-interpreted 原始解释语言完全不需要编译,它们由解释器直接执行

Byte-compiled programs

Byte-compiled programs 字节编译语言需要编译成字节代码,然后由语言虚拟机执行

转载于:https://www.cnblogs.com/andy-linux/p/10007929.html

RPM 打包指南系列 一相关推荐

  1. 用 RPM 打包软件,第 2 部分

    在不具备 root 权限的情况下构建.给软件打补丁和分发 RPM RPM 是一种广泛用于发布 Linux 软件的工具: 用户可以轻松地安装用 RPM 打包的产品.在本文(该系列文章的第 2 篇)中,D ...

  2. 存储采购防PUA指南系列(一):为什么您不需要 1万转机械硬盘

    存储采购防PUA指南系列(一):为什么您不需要 1万转机械硬盘 存储设备作为承载客户业务数据的底层基座,对客户业务连续高效的成长至关重要.但市场上各种存储厂商.第三方机构的PUA无处不在,究竟该如何选 ...

  3. RPM打包探索(rpm-max翻译整理)

    1. %global 和 %define 的区别? 这是内置宏,%define用来定义宏,%global用来定义一个全局可见的宏(在整个spec文件中可见) 2. %{!?macro-name} 和 ...

  4. SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现

    SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...

  5. RPM打包原理、示例、详解及备查

    原文地址:https://blog.csdn.net/qq_16542775/article/details/80961213 RPM(Redhat Package Manager)是用于Redhat ...

  6. gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用

    SpringCloud技术指南系列(十二)API网关之Gateway使用 一.概述 API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架 ...

  7. 项目经理的商务指南系列之二:认识责任(敏捷开发,专家与杂家)

    本文是项目经理的商务指南系列中的第一篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 认识责任 本系列的名称为 ...

  8. 项目经理的商务指南系列之四:认识谈判(不做传声筒,不做顶门闩,进退之策,进退之法,有机事者必有机心)...

    本文是项目经理的商务指南系列中的第四篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 谈判是一件让大门不出二门 ...

  9. 项目经理的商务指南系列之三:认识客户(敏捷开发,被动而弱小的客户,理解客户的古怪行为,如何喜欢上客户)...

    本文是项目经理的商务指南系列中的第三篇.(之一:序言及项目本质,之二:认识责任,之三:认识客户,之四:认识谈判,之五:认识项目进展,之六:认识回款,之七:将项目推向不败之地) 被动而弱小的客户 客户常 ...

  10. CTO职场解惑指南系列(二)春节篇

    很多理财.电商平台要在春节要搞大促,担心黑客冒充用户去抢样品抢补贴,占用大量CPU服务器资源,导致真的用户进不去网站买不了,白白将真金白银给到了黄牛.短期好看的数据背后,自己的产品并没有卖给真正的用户 ...

最新文章

  1. 【Python学习系列二十】scikit-learn库模型持久化
  2. WGS84经纬度坐标转北京54高斯投影地方坐标流程
  3. 基础篇verilog-‘timescale的解释
  4. shell中的PS命令的含义
  5. 3分钟了解dubbo服务调试管理实用命令
  6. Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13
  7. 【机器学习基础】算法工程师必备的机器学习--EM
  8. 超详细 图解 : IntelliJ IDEA 逆向生成 JAVA 实体类
  9. Behavior Language Processing with Graph based Feature Generation for Fraud DetectioninOnline Lending
  10. SSM中log4j2.xml配置文件的各项标签
  11. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)
  12. ufs qfil注意事项
  13. 扫描qr code_如何在Android手机上扫描QR码
  14. 阿里云服务器上海地域和杭州节点区别对比
  15. java身高体重源代码_(01-06)编写一个Java应用程序,输出自己的姓名、年龄、身高、籍贯等信息。要求答案中提供源代码及、运行结果的截图 答案:程序运行结果如下...
  16. linux lib文件夹,Linux下的lib文件故障解决实例
  17. Teams App自定义
  18. java图片轮播_轮播图制作
  19. android 8华为屏幕录制,数码知识:华为nova8pro如何屏幕录制怎么录屏
  20. ERP采购管理系统软件

热门文章

  1. 与TensorFlow类似的项目有哪些?TensorFlow的优缺点是什么?
  2. Mesos和Docker的集成
  3. 《linux核心应用命令速查》连载二:lastcomm:显示以前使用过的命令的信息
  4. Google广告优化与工具
  5. 程序员必杀技——《编程全能词典》即将震憾上市
  6. 8.12 对比学习——Relation Network
  7. java多线程访问beans对象_java-多线程同时操作同一个对象之解决方法:读写锁ReadWriteLock的使用...
  8. php支付宝授权登录,PHP实现支付宝登录
  9. 蓝桥杯2015年第六届C/C++省赛B组第三题-三羊献瑞
  10. MTK平台调试加密芯片ATSHA204A