什么是YUM?

YUM (Yellowdog Updater, Modified) 是一个在基于RPM包的Linux发行版上广泛使用的命令行软件包管理器。它简化了软件的安装、更新、卸载以及依赖关系管理等任务。YUM作为RPM前端,极大地提升了系统管理员和普通用户管理软件的效率和便捷性。

在Linux世界里,软件通常以“包”(Package)的形式分发。一个包包含了程序的可执行文件、库文件、配置文件以及相关的元数据信息。YUM通过连接到预设的软件仓库(Repositories),自动查找、下载并安装所需的软件包及其所有依赖项,彻底解决了手动处理复杂依赖关系带来的“依赖地狱”问题。

  • 自动化依赖管理: YUM最重要的功能之一是自动解析和处理软件包之间的依赖关系。当您尝试安装一个软件时,YUM会自动检查其所需的其他库或组件,并一并下载安装。
  • 集中式管理: 通过配置软件仓库,YUM能够从可信的源获取软件包,确保软件的完整性和安全性。
  • 易于使用: 提供了简洁明了的命令行接口,使得软件管理任务变得简单快捷。
  • 版本控制与更新: 能够方便地检查、下载和安装软件包的更新版本,保持系统软件的最新状态和安全性。

为什么要使用YUM进行软件安装?

使用YUM进行软件安装和管理是基于RPM的Linux系统(如CentOS、RHEL、AlmaLinux、Rocky Linux等)的标准和推荐方式。其优势显而易见:

  1. 告别“依赖地狱”: 如果不使用YUM这样的包管理器,手动安装软件(特别是那些有复杂依赖关系的软件)将会是一场噩梦。您需要手动找出软件A需要库B,库B又需要库C,然后逐一下载并安装,任何一个环节出错都可能导致安装失败。YUM完全自动化了这一过程,您只需一条命令即可完成。
  2. 提高效率: 通过单一的命令行工具,可以快速地搜索、安装、更新和移除软件,极大地节省了系统维护的时间。无需访问多个网站下载不同的安装包,YUM能在一个统一的界面完成所有操作。
  3. 确保软件来源可靠与安全: YUM从配置好的软件仓库下载软件包。这些仓库通常由操作系统发行版官方维护或由受信任的第三方提供,软件包经过签名验证,从而降低了安装恶意软件或损坏文件的风险。
  4. 系统一致性: YUM确保系统上的软件版本和配置保持一致性。在大型环境中,这对于维护系统的稳定性和可预测性至关重要。
  5. 便于系统更新与维护: YUM可以轻松地将整个系统或特定软件包更新到最新版本,以获取新功能、修复错误和打安全补丁。它还提供了回滚功能,可以在更新出现问题时恢复到之前的状态(通过`yum history`)。

YUM在哪里工作?(适用系统与软件源)

YUM是一个与特定Linux发行版紧密相关的工具。它不仅仅是您在终端输入的命令,它背后依赖于一套完善的系统和网络基础设施。

适用Linux发行版

YUM主要应用于基于RPM(Red Hat Package Manager)包格式的Linux发行版。这包括:

  • Red Hat Enterprise Linux (RHEL) 及其衍生版本:
    • CentOS (Community ENTerprise Operating System) – 在CentOS 8之后,Dnf取代了YUM作为默认包管理器,但Dnf是YUM的下一代版本,命令接口高度兼容。在CentOS 7及更早版本中,YUM是核心。
    • AlmaLinux – RHEL的免费、开源、社区支持的替代品。
    • Rocky Linux – 另一个RHEL的免费、开源、社区支持的替代品。
    • Oracle Linux
  • Fedora – Red Hat的社区发行版,也是Dnf的发源地。在旧版本Fedora中曾使用YUM。
  • Scientific Linux (已停产)

请注意,像Ubuntu、Debian、Linux Mint等基于APT(Advanced Package Tool)的Debian系发行版,以及Arch Linux(使用Pacman)等,它们不使用YUM。

软件从何而来?(YUM仓库)

YUM安装的软件包并非凭空出现,它们都存储在被称为软件仓库(Repositories)的服务器上。YUM在执行安装或更新操作时,会查询这些预先配置好的仓库,下载所需的软件包。

官方仓库

每个发行版都有其官方维护的软件仓库,其中包含了核心系统组件和大量常用软件。例如:

  • Base/AppStream: 包含操作系统核心组件、基本工具和运行时环境。
  • Updates: 包含了软件的更新和安全补丁。
  • Extras: 某些发行版可能提供额外的非核心但常用的软件包。

这些官方仓库是系统软件稳定性和安全性的基石。

第三方仓库

除了官方仓库,还有许多由社区或第三方组织维护的仓库,提供了官方仓库中没有的软件,或者提供了更新的版本。最著名的例子是EPEL (Extra Packages for Enterprise Linux)。EPEL由Fedora项目组维护,为RHEL及其衍生版提供了大量高质量的额外软件包。添加第三方仓库可以极大地扩展您可安装软件的范围。

本地或私有仓库

在企业或实验室环境中,您可能需要设置自己的本地YUM仓库。这通常用于:

  • 离线环境: 当服务器没有互联网连接时,可以从本地搭建的YUM仓库安装软件。
  • 定制软件: 发布内部开发或定制的软件包。
  • 版本控制: 锁定特定版本的软件,避免自动更新到未经测试的版本。

YUM的仓库配置信息通常存储在 /etc/yum.repos.d/ 目录下的 .repo 配置文件中。每个文件定义了一个或多个软件仓库的名称、URL、GPG密钥等信息。例如,一个典型的仓库配置文件可能如下:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

其中,enabled=1 表示该仓库已启用,gpgcheck=1 表示需要进行GPG密钥检查以验证软件包的完整性和来源。

使用YUM安装软件需要多少资源?

使用YUM进行软件安装通常不会对系统资源造成显著的负担,但具体情况取决于您要安装的软件包大小、数量以及您的网络带宽。

对系统资源的影响

  • CPU与内存: YUM自身在运行时会占用少量的CPU和内存资源,用于解析依赖、下载文件、解压和安装。对于现代服务器或桌面电脑来说,这通常是微不足道的,不会导致系统卡顿。安装大型软件时,实际的解压和文件写入操作可能会短暂地占用更多CPU。
  • 网络带宽: 这是安装过程中最重要的资源消耗。YUM需要从软件仓库下载软件包。一个几MB的小型工具可能瞬间完成,但一个数百MB甚至数GB的软件包(例如桌面环境或大型数据库系统)会消耗大量带宽并需要较长时间。
  • 磁盘I/O: 下载完成后,软件包会被写入磁盘,然后解压并安装到指定路径。这个过程会产生磁盘读写操作。对于高性能存储系统来说,这通常不是瓶颈。

预估所需空间与时间

  • 磁盘空间:

    • 下载缓存: YUM会将在下载的软件包(RPM文件)缓存在本地,默认位置通常是/var/cache/yum。这些文件在安装完成后通常可以清理,但它们在下载时会占用临时空间。所需空间与下载的软件包总大小相当。
    • 安装空间: 这是指软件包实际安装到系统上后所占用的磁盘空间。一个软件包安装后的大小通常会大于其RPM文件的大小,因为它包含了解压后的文件、配置文件、日志等。在执行安装命令前,YUM会预估并显示所需的安装空间总量。您需要确保安装目录(通常是根目录/或特定分区)有足够的剩余空间。
  • 安装时间:

    • 取决于您的网络速度、软件仓库的响应速度以及软件包的总体大小。
    • 对于小文件,可能几秒钟到几十秒。
    • 对于大型软件或系统更新,可能需要几分钟甚至数小时。
    • 系统安装的软件包越多,依赖关系越复杂,所需时间越长。

示例: 当您执行 sudo yum install httpd (安装Apache Web服务器) 时,YUM会先显示一个安装概要,其中会列出即将下载的总大小(Download Size)和安装后占用的总空间(Installed Size),以及确认提示(Is this ok [y/d/N]:)。这正是给您一个预估。务必检查这些信息,确保您的系统具备足够的资源。

如何使用YUM进行软件安装、更新与管理?(核心操作指南)

YUM的强大之处在于其简洁直观的命令行接口。以下是使用YUM进行软件管理的核心操作。

基本操作

所有YUM命令通常都需要root权限,因此在命令前加上 sudo

  1. 安装软件包:

    使用 yum install 命令安装指定的软件包。YUM会自动处理所有依赖关系。

    sudo yum install <软件包名称>

    示例: 安装Nginx Web服务器

    sudo yum install nginx

    您可以同时安装多个软件包:

    sudo yum install package1 package2 package3

    安装特定版本的软件包(如果仓库中存在):

    sudo yum install <软件包名称>-<版本号>

    示例: sudo yum install mysql-server-5.7.32

  2. 更新软件包:

    更新单个软件包:

    sudo yum update <软件包名称>

    示例: sudo yum update httpd

    更新所有软件包(推荐定期执行以保持系统安全和最新):

    sudo yum update

    或更严格地,只更新所有已安装的包,不删除旧包:

    sudo yum upgrade

    注意: 在执行大规模更新前,务必备份重要数据。

  3. 检查可用更新:

    在不实际更新的情况下,检查有哪些软件包有可用更新:

    sudo yum check-update

    这会列出所有可以升级的软件包。

  4. 卸载软件包:

    使用 yum removeyum erase 命令卸载软件包。这也会自动移除不再被其他软件包依赖的依赖项。

    sudo yum remove <软件包名称>

    示例: sudo yum remove nginx

    注意: 卸载时,YUM会提示将要移除的软件包及其依赖,确认后再执行。

高级与常用操作

搜索与查询

  • 搜索软件包:

    当您不确定软件包的确切名称时,可以使用 yum search 命令进行模糊搜索。

    sudo yum search <关键词>

    示例: sudo yum search database

  • 列出所有可用软件包:
    sudo yum list available

    这会显示所有可从已启用仓库中安装的软件包。

  • 列出已安装软件包:
    sudo yum list installed

    这会列出所有已经安装在系统上的软件包及其版本。

  • 查看软件包信息:

    获取软件包的详细信息,包括描述、版本、大小、依赖等。

    sudo yum info <软件包名称>

    示例: sudo yum info httpd

  • 列出软件包组:

    有些软件包被组织成组,便于一次性安装一组相关的软件(如“GNOME桌面环境”)。

    sudo yum grouplist

    安装软件包组:

    sudo yum groupinstall "<软件包组名称>"

    示例: sudo yum groupinstall "Development Tools"

管理软件源

  • 列出已启用仓库:

    查看当前系统配置的所有YUM仓库及其状态。

    sudo yum repolist

    all 参数可以显示所有(包括禁用的)仓库:sudo yum repolist all

  • 启用/禁用仓库:

    通过编辑 /etc/yum.repos.d/ 下的 .repo 文件,将 enabled=1 改为 enabled=0 来禁用,反之启用。

    或者在命令中使用 --enablerepo--disablerepo 参数:

    sudo yum --enablerepo=epel install htop

    示例: 从EPEL仓库安装htop。

  • 安装EPEL仓库:

    对于RHEL/CentOS,安装EPEL是获取更多软件的常见步骤:

    sudo yum install epel-release

清理与维护

  • 清理YUM缓存:

    YUM会将下载的RPM包和元数据缓存起来,以加快后续操作。但这些缓存会占用磁盘空间。定期清理是有益的。

    sudo yum clean all

    这会清除所有缓存的软件包和元数据。如果遇到YUM问题,尝试清理缓存有时可以解决。

历史记录与回滚

  • 查看YUM历史记录:

    YUM会记录所有安装、更新和卸载操作的历史。

    sudo yum history

    这会显示一个操作ID列表,以及操作类型和日期。

  • 查看特定操作详情:
    sudo yum history info <操作ID>

    示例: sudo yum history info 5

  • 回滚操作:

    如果最近的更新或安装导致了系统问题,您可以使用 yum history undoyum history rollback 来撤销操作。

    sudo yum history undo <操作ID>

    示例: sudo yum history undo 5 (撤销ID为5的操作)

    sudo yum history rollback <操作ID> (回滚到ID为5的操作之前的状态)

    警告: 回滚操作有风险,尤其是在生产环境中,请谨慎使用并确保有系统备份。

从本地RPM包安装

虽然YUM主要用于从仓库安装,但它也可以用于安装本地下载的RPM包,并且会尝试解析该本地包的依赖关系并从仓库下载。

sudo yum localinstall <本地RPM文件路径>

示例: sudo yum localinstall /tmp/mysoftware.rpm

这比直接使用 rpm -ivh 命令更方便,因为 yum localinstall 会自动处理依赖。

YUM安装中可能遇到的问题及如何解决?(常见故障排除)

尽管YUM功能强大且可靠,但在实际使用中仍可能遇到各种问题。以下是一些常见问题及其解决方案。

网络或仓库问题

这通常是最常见的问题,YUM无法访问软件仓库。

  • 错误信息:

    YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
    Cannot find a valid baseurl for repo: base

    Could not retrieve mirrorlist ... [Errno 14] curl#6 - "Could not resolve host"

    [Errno 12] Timeout on ...

    原因:

    • 网络连接中断或不稳定。
    • DNS解析失败。
    • 软件仓库URL配置错误。
    • 防火墙阻止了YUM的出站连接。
    • 软件仓库服务器暂时不可用。

    解决方案:

    1. 检查网络连接: 尝试 ping baidu.comping 8.8.8.8 确认网络是否畅通。
    2. 检查DNS设置: 检查 /etc/resolv.conf 中的DNS服务器配置是否正确。
    3. 检查仓库配置文件: 检查 /etc/yum.repos.d/ 目录下相关 .repo 文件的 baseurlmirrorlist 是否正确且可访问。
    4. 禁用防火墙(临时测试): sudo systemctl stop firewalld (仅供测试,生产环境不推荐)。如果停止后正常,则需配置防火墙允许YUM的HTTP/HTTPS流量。
    5. 更换为国内镜像源: 如果默认源访问慢或不稳定,可以编辑 .repo 文件,将 baseurlmirrorlist 改为阿里云、清华大学等国内镜像站的URL。
    6. 清理YUM缓存: sudo yum clean all 后再试。

依赖冲突或缺失

当软件包之间存在不兼容的依赖关系时,YUM可能无法完成操作。

  • 错误信息:

    Error: Package: ... requires ..., but none of the providers can be installed
    Error: Multilib version problems found. This often means that you have some 32-bit ...

    Protected multilib versions: ... conflicts with ...

    原因:

    • 您尝试安装的软件包依赖于系统中不存在或版本不匹配的组件。
    • 32位和64位软件包的冲突(Multilib问题)。
    • 某个软件已被手动安装或通过非YUM方式安装,导致YUM无法管理其依赖。

    解决方案:

    1. 清理缓存并重建元数据: sudo yum clean all && sudo yum makecache
    2. 更新所有软件包: 尝试先执行 sudo yum update,这可能会解决一些已知的依赖问题。
    3. 启用额外的仓库: 如果是缺少依赖,可能是因为所需的包在当前启用的仓库中不存在。例如,很多软件的依赖在EPEL中,确保EPEL仓库已启用。
    4. 排除冲突包: 如果冲突是由特定包引起,可以尝试在安装命令中使用 --exclude=<包名> 参数,但请谨慎,这可能导致其他问题。
    5. 降级或升级依赖: 这通常比较复杂,可能需要手动找到冲突的包,并尝试降级或升级其版本。但通常YUM会提示您可以进行的相应操作。
    6. 使用 yum deplist <软件包名称> 查看某个包的所有依赖关系,有助于诊断。

磁盘空间不足

YUM需要足够的磁盘空间来下载软件包和进行安装。

  • 错误信息:

    No space left on device

    原因:

    • /var/cache/yum 目录下的缓存文件过多。
    • 根分区 / 或其他安装目标分区空间不足。

    解决方案:

    1. 清理YUM缓存: sudo yum clean all
    2. 检查磁盘使用情况: 使用 df -h 命令查看各个分区的磁盘使用情况,找出占用空间过大的目录或文件,并进行清理。
    3. 扩容磁盘: 如果空间严重不足且无法清理,可能需要对分区进行扩容。

YUM进程被锁定

当YUM上一次操作非正常终止(如强制退出)时,可能会留下一个锁文件,阻止新的YUM进程启动。

  • 错误信息:

    Another app is currently holding the yum lock; waiting for it to exit...
      The other application is: PackageKit
        Memory : ...
        ...
        Aborting.

    原因:

    • 上一个YUM或RPM进程未正常退出。
    • 其他软件包管理工具(如PackageKit)正在运行。

    解决方案:

    1. 等待: 通常,YUM会提示“waiting for it to exit”,如果知道有其他进程在运行,可以等待其完成。
    2. 查找并终止冲突进程: 使用 ps aux | grep yumps aux | grep rpm 查找相关进程,然后使用 sudo kill <进程ID> 终止。
    3. 删除锁文件: 如果确认没有YUM或RPM进程在运行,但错误依然存在,可以手动删除锁文件。锁文件通常是 /var/run/yum.pid/var/lock/subsys/yum
      sudo rm -f /var/run/yum.pid
      sudo rm -f /var/lock/subsys/yum

GPG密钥错误

YUM使用GPG密钥来验证软件包的完整性和真实性,防止下载到被篡改的软件包。

  • 错误信息:

    Public key for ... is not installed
    GPG key retrieval failed: [Errno 14] curl#37 - "Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-..."

    The GPG keys listed for the "..." repository are already installed but they are not correct for this package.

    原因:

    • 相关仓库的GPG密钥未导入系统。
    • 导入的GPG密钥与软件包的签名不匹配,可能密钥已过期或仓库使用了新密钥。
    • 仓库配置文件中的 gpgkey 路径错误。

    解决方案:

    1. 导入缺失的GPG密钥: 通常,软件包提供方(如EPEL)会提供GPG密钥的URL。使用 sudo rpm --import 导入。例如:sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    2. 更新或替换GPG密钥: 如果是已有的密钥不正确,从官方源获取最新的GPG密钥并重新导入。
    3. 暂时禁用GPG检查(不推荐):.repo 文件中将 gpgcheck=1 改为 gpgcheck=0。这会带来安全风险,只应在明确知道风险且无法解决密钥问题时临时使用。

软件包损坏或不完整

下载的软件包文件可能在传输过程中损坏或不完整。

  • 错误信息:

    Error: Header is corrupted
    Error: RPM checksum is invalid.

    原因:

    • 网络传输错误。
    • YUM缓存中的文件损坏。
    • 软件仓库中的文件本身有问题。

    解决方案:

    1. 清理YUM缓存: sudo yum clean all,这会强制YUM重新下载软件包。
    2. 更换镜像源: 如果清理缓存后问题依旧,尝试更换一个YUM镜像源。
    3. 检查网络稳定性: 确保网络连接稳定,没有频繁的断线。

总结

YUM作为Linux系统上不可或缺的软件包管理工具,极大地简化了软件的安装、更新和维护工作。掌握YUM的基本及高级命令,并了解常见问题的排除方法,对于任何Linux用户或系统管理员来说都至关重要。通过有效利用YUM,您可以确保您的系统软件保持最新、安全且稳定,同时高效地管理所需的各种应用程序。无论是日常的软件包安装,还是复杂的系统维护,YUM都将是您得力的助手。


linuxyum安装