centos 打包某个目录_Linux 中 RPM 的构建与打包

本文详细介绍了如何在 CentOS 系统中使用 RPM 打包工具从源代码构建软件。内容涵盖 RPM 的概念、源代码编译(包括本机编译和解释型代码)、补丁应用、软件安装、tar.gz 包创建、SPEC 文件编写、构建 SRPM 和二进制 RPM,以及在不同架构下重新编译 RPM 的方法。通过实例和步骤,帮助读者深入理解 RPM 打包过程。
摘要由CSDN通过智能技术生成

什么是 RPM

RPM 全称为:Red-Hat Package Manager,即红帽 Linux 发行版的软件包管理器。RPM 的出现,提升了 Linux 软件安装、升级的便捷性。RPM 遵循 GPL 协议,除了红帽 Linux 发行版,Caldera OpenLinux、SUSE 以及 Turbo Linux 等 Linux 的发行版也使用 RPM,因此 RPM 是 Linux 软件包管理的行业标准。为了使读者能够较为深入理解 RPM,我们先介绍软件的构建方法。

计算机软件的软件是从源代码构建出来的。源代码是人们以人类可读的语言书写的、让计算机执行任务的指令。人类可读的语言格式和规范,就是编程语言。

从源代码制作软件的过程,称之为是软件编译。从源代码构建成软件的编译有两种方式:

  • 本机编译 (Natively Compiled),对应编译型语言。
  • 解释编译(Interpreted Compiled),对应解释性语言。

本机编译方式下,代码可以独立编译成机器代码或直接编译为二进制文件可执行文件。本机编译构建的软件包中,包含编译环境下计算机体系架构的特征。例如,使用 64 位(x86_64)AMD 计算机中编译的软件,不能在 Intel 处理器架构上运行。

与本机编译可以独立执行相对应,某些编程语言不能将软件编译成计算机可以直接理解的格式,而需要语言解释器或语言虚拟机(如 JVM),我们称之为解释编译。常用的解释语言有 Byte Compiled(源代码需要编译成字节代码,然后由语言虚拟机执行,如 Python)和 Raw Interpreted(原始解释语言完全不需要编译,它们由解释器直接执行,如 Bash shell)两种。

我们常用的 bash shell 和 Python 是解释型的,这种方式编译出的程序与硬件架构无关,通过这种方式编译出的 RPM 会被标注为 noarch(说明 RPM 包不依赖于特定 linux 发行版)。

在介绍了源代码的编译方式后,接下来我们通过实验的方式展现软件的编译过程。

从源代码构建软件

在正式开始验证之前,我们需要在 Linux 中安装编译工具。

# yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils

接下来,我们分别介绍本机编译和解释编译。

本机编译代码

在编程语言中,C 语言是本机编译。我们查看一个源代码文件,如清单 1 所示:

清单 1. C 语言源码文件
      # cat cello.c#include int main(void) {    printf("Hello World, I'm DavidWei!");    return 0;}

调用 C 编译器 gcc 进行编译:

# gcc -o cello cello.c

编译成功后,我们可以执行结果输出。

# ./cello

Hello World, I'm DavidWei!

为了实现自动化构建代码,我们添加 Makefile,这是大型软件开发中常用的方法。

首先创建一个 Makefile,如清单 2 所示:

清单 2. Makefile 文件
# cat Makefilecello:              gcc -o cello cello.cclean:               rm cello

接下来,通过 make 来完成编译。

执行 make 会自动编译源代码,然后可以成功执行,如下图 1 所示:

图 1. 编译并运行代码
b7a6ce32dbd946c229091ad31f863198.png

执行 make clean 会删除编译结果,如下图 2 所示:图 2. 删除编译结果

f47f22426781aa653a53b064e3ac3189.png

在介绍了本机编译后,我们介绍解释编译。

解释型代码

对于用解释型编程语言编写的软件,如果是 Byte Compiled 语言如 Python,就需要一个编译步骤,把源代码构建成 Python 的语言解释器(称为 CPython)的可以执行文件。

我们查看一个 python 的源代码,如清单 3 所示:

清单 3. Python 源代码文件
        # cat pello.py#!/usr/bin/env pythonprint("Hello World, I'm DavidWei!")

对源代码进行编译:

# python -m compileall pello.py

Compiling pello.py ...

编译成功后运行:

# python pello.pyc

Hello World, I'm DavidWei!

我们看到,对源.py 文件进行字节编译后会生成一个.pyc 文件,这是 python 2.7 字节编译的文件类型,这个文件可以使用 python 语言虚拟机运行。

查看文件类型:

# file pello.pyc

pello.pyc: python 2.7 byte-compiled

和 python 相对应,无需编译的解释性代码是 Raw Interpreted,如我们日常使用的 bash shell。

我们看一个 shell 文件,如清单 4 所示:

清单 4. Shell 文件
# cat bello#!/bin/bashprintf "Hello World, I'm DavidWei!"

对于 Raw Interpreted 源码,我们使文件可执行、然后直接运行即可,如下图 3 所示:

图 3. 修改权限运行 shell

d12525fdc4b7ea6e2c27f9c4e8b1368e.png

在介绍了如何从源码构建软件包后,接下来我们介绍如何给软件打补丁。

给软件打补丁

在计算机软件中,补丁是用来修复代码中的漏洞的。软件中的补丁表示的是与源代码之间的不同之处。接下来,我们从原始源代码创建补丁,然后应用补丁。

创建补丁的第一步是备份原始源代码,通常是将它拷贝为.orig 文件。我们以 cell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值