Linux编译过程和依赖管理,RPM(Red Hat Package Manager)&& Make Install常见的使用方式

make install与rpmbuild -ba openssh.spec的区别特点

编译过程和依赖管理

  • make install
    • 通常用于从源代码直接编译和安装软件。在执行make install之前,需要先运行./configure脚本进行配置,该脚本会检查系统环境和依赖关系,然后生成相应的 Makefile。在编译过程中,make命令会根据 Makefile 中的规则来编译源代码,并最终通过make install将编译好的文件安装到指定的系统目录中。
    • 这种方式在处理依赖关系时相对较为简单直接。它主要依赖于configure脚本检查系统中是否存在所需的库和工具,如果缺少依赖,configure脚本通常会报错,提示用户需要安装哪些软件包来满足依赖关系。然而,它可能无法像 RPM 包那样精确地管理依赖关系,例如,对于一些可选的依赖,如果系统中没有安装,可能会导致软件的某些功能无法正常使用,但编译过程可能仍然可以继续进行。
  • rpmbuild -ba openssh.spec
    • 是基于 RPM 包构建系统的一种方式。rpmbuild命令用于构建 RPM 包,-ba选项表示同时构建二进制 RPM 包和源代码 RPM 包。openssh.spec是一个规范文件,它包含了关于如何构建 OpenSSH RPM 包的详细信息,如软件的版本、源文件列表、编译选项、依赖关系等。
    • 在构建 RPM 包的过程中,rpmbuild会严格按照openssh.spec文件中定义的依赖关系来检查系统中是否安装了所需的软件包。如果缺少依赖,rpmbuild会明确指出并停止构建过程,直到所有依赖都被满足。这使得 RPM 包在依赖管理方面更加严格和精确,能够确保软件在安装和运行时具有完整的依赖环境,减少因依赖问题导致的软件故障。

安装和升级管理

  • make install
    • 执行make install命令后,软件会被直接安装到系统指定的目录中,通常会覆盖原有的同名文件(如果存在)。在升级软件时,需要重新获取最新的源代码,重新运行./configuremakemake install命令,这可能会导致之前的配置文件被覆盖,需要用户手动备份和恢复重要的配置信息。
    • 这种方式的优点是安装过程相对简单直接,用户可以对编译和安装过程有更多的控制,例如可以根据自己的需求定制编译选项。但缺点是升级过程较为繁琐,容易出现配置丢失或不兼容的问题。
  • rpmbuild -ba openssh.spec
    • 构建好 RPM 包后,可以使用rpm命令进行安装、升级和卸载操作。例如,使用rpm -Uvh openssh-<version>-<release>.x86_64.rpm命令可以升级已安装的 OpenSSH 软件包。在升级过程中,RPM 包管理系统会自动处理文件的替换和备份,保留用户的配置文件(通常会将原配置文件重命名为.rpmnew.rpmsave等后缀,以便用户在需要时进行恢复),确保升级过程的平滑性和稳定性。
    • RPM 包的安装和升级操作相对更加标准化和自动化,易于管理和维护。同时,RPM 包管理系统还提供了版本管理和依赖检查等功能,使得软件的安装和升级更加可靠和安全。

软件包格式和可移植性

  • make install
    • 从源代码直接编译安装后,软件文件会分散安装到系统的各个目录中,没有形成一个统一的软件包格式。这使得软件的备份、迁移和分发相对较为困难,因为需要手动复制和管理多个文件和目录,并且可能需要重新配置软件在新的环境中的运行参数。
    • 由于不同系统的目录结构和环境设置可能存在差异,从源代码编译安装的软件在可移植性方面相对较差。在一个系统上编译安装成功的软件,在其他系统上可能需要重新编译和配置才能正常运行。
  • rpmbuild -ba openssh.spec
    • RPM 包是一种标准化的软件包格式,它将软件的所有文件、元数据(如软件名称、版本、描述、依赖关系等)以及安装脚本等打包成一个文件。这使得 RPM 包易于备份、迁移和分发,可以方便地在不同的系统之间共享和安装。
    • RPM 包具有较好的可移植性,因为它在构建过程中已经考虑了不同系统之间的差异,并且可以通过软件仓库进行集中管理和分发。只要目标系统安装了相应的 RPM 包管理系统,就可以方便地安装和运行 RPM 包,而无需重新编译源代码。

系统集成和维护

  • make install
    • 从源代码编译安装的软件可能无法与系统的包管理系统和服务管理机制进行很好的集成。例如,在一些基于 systemd 的系统中,通过make install安装的软件可能不会自动在 systemd 中注册服务,需要用户手动创建和配置相应的服务单元文件。
    • 在系统维护方面,由于没有统一的软件包管理机制,对于软件的更新、卸载和故障排查可能会更加困难。用户需要手动跟踪软件的更新情况,并手动执行相应的操作来维护软件的运行环境。
  • rpmbuild -ba openssh.spec
    • RPM 包与系统的集成度较高,安装的软件会自动在系统的包管理系统中注册,可以方便地使用系统提供的工具进行管理,如rpm命令用于查询、安装、升级和卸载软件包,systemctl命令用于管理 RPM 包安装的服务等。
    • 在系统维护方面,RPM 包管理系统提供了方便的维护机制,如可以通过软件仓库自动获取软件的更新,并且在卸载软件时会自动清理相关的文件和目录,减少系统中的残留文件和垃圾数据。

综上所述,make installrpmbuild -ba openssh.spec两种编译方式在编译过程、依赖管理、安装升级、软件包格式、可移植性以及系统集成和维护等方面都存在一定的区别。在实际应用中,可以根据具体的需求和场景选择合适的编译和安装方式。如果需要对软件进行高度定制化编译,或者希望对编译过程有更多的控制,那么make install可能是一个不错的选择;如果注重软件包的管理和维护的便利性、可移植性以及依赖关系的精确管理,那么使用rpmbuild构建 RPM 包并进行安装的方式可能更为合适。

RPM(Red Hat Package Manager)包

在 Linux 系统中,使用 RPM(Red Hat Package Manager)包进行安装的基本命令是rpm

以下是一些常见的使用方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
###  1. 安装 RPM 包 “`bash rpm -ivh package.rpm “`

`-i`表示安装(install)。

`-v`表示显示详细信息(verbose)。

`-h`表示以哈希符号显示安装进度(hash)。

例如: rpm -ivh apache-httpd-2.4.57-1.el7.centos.x86_64.rpm

### 2. 升级 RPM 包 “`bash rpm -Uvh package.rpm “`

`-U`表示升级(upgrade)。如果系统中没有安装该包,则会进行安装操作,相当于先卸载旧版本再安装新版本。

例如: “`bash rpm -Uvh openssh-clients-8.4p1-1.el8.x86_64.rpm “`

### 3. 查看已安装的 RPM 包信息 “`bash rpm -qi package_name “`

`-q`表示查询(query)。

`-i`表示显示软件包的详细信息,包括名称、版本、描述等。 例如: “`bash rpm -qi firefox “`

### 4. 查看 RPM 包安装的文件列表 “`bash rpm -ql package_name “`

`-q`表示查询。 – `-l`表示列出(list)安装的文件

。 例如: “`bash rpm -ql httpd “`

### 5. 验证 RPM 包的完整性 “`bash rpm -V package_name “`

`-V`表示验证(verify)。如果没有输出,则表示包的完整性没有问题;如果有输出,则表示包中的某些文件被修改、删除或存在其他问题。

例如: “`bash rpm -V apache-httpd “`

### 6. 卸载 RPM 包 “`bash rpm -e package_name “`

`-e`表示卸载(erase)。 例如: “`bash rpm -e samba-client “`

在使用rpm命令时,需要注意权限问题,通常需要以管理员权限(root 用户或使用sudo)来执行安装、升级和卸载操作。同时,RPM 包可能存在依赖关系,如果安装过程中提示缺少依赖包,需要先安装依赖包再安装目标包。

Buy me a coffee
微信微信
0%