RH214|第十四章 安装和更新软件

红帽支持的注册系统

目标

完成本节后,您应该能够使用Red Hat Subscription Management将系统注册到您的Red Hat帐户并为其分配软件更新和支持服务的权利。

红帽订阅管理

红帽订阅管理提供了可用于使机器获得产品订阅授权的工具,从而使管理员可以获取软件包的更新并跟踪有关系统使用的支持合同和订阅的信息。 PackageKityum等标准工具可以通过Red Hat提供的内容分发网络获取软件包和更新。

使用Red Hat订阅管理工具执行四项基本任务:

  • 注册系统将该系统关联到Red Hat帐户。 这使Subscription Manager可以唯一地盘点系统。 当不再使用时,系统可能会被取消注册。
  • 订阅一个系统,使其有权获得选定的 Red Hat 产品的更新。订阅有特定的支持级别、过期日期和默认存储库。这些工具可以用来自动附加或选择特定的权限。随着需求的变化,订阅可以被删除。
  • 启用存储库以提供软件包。每个订阅都默认启用了多个版本库,但可以根据需要启用或禁用其他版本库,如更新或源代码等。
  • 查看和跟踪可用或已使用的权利。 订阅信息可以在特定系统上本地查看,也可以在红帽客户门户网站的“订阅”页面或“订阅资产管理器”(SAM)中查看。

注册系统

有许多不同的方法可以向Red Hat客户门户注册系统。有一个图形界面,您可以使用GNOME应用程序或通过Web控制台服务访问,还有一个命令行工具。

要向GNOME应用程序注册系统,请通过选择Activities启动Red Hat Subscription Manager。在要搜索的类型中键入订阅。。。字段并单击Red Hat Subscription Manager。在提示进行身份验证时输入适当的密码。这将显示以下“ Subscriptions ”窗口:

Figure 14.1: The main window of Red Hat Subscription Manager

要注册系统,请在“订阅”窗口中单击“注册”按钮。 这将显示以下对话框:

Figure 14.2: The service location and account information dialog of Red Hat Subscription Manager

该对话框向订阅服务器注册系统。 默认情况下,它将服务器注册到Red Hat Customer Portal。 提供应向其注册系统的Red Hat Customer Portal帐户的登录名和密码,然后单击“注册”按钮。

注册后,系统会自动附加一个订阅(如果有)。

在注册系统并分配了订阅后,请关闭“订阅”窗口。 现在,该系统已正确订阅,可以接收来自Red Hat的更新或安装新软件。

从命令行注册

使用subscription-manager(8)在不使用图形环境的情况下注册系统。subscription-manager命令可以自动将系统附加到系统的最佳匹配兼容订阅。

  • 向Red Hat帐户注册系统:
[user@host ~]$ subscription-manager register --username=yourusername -password=yourpassword
  • 查看可用订阅:
[user@host ~]$ subscription-manager list --available | less
  • 自动附加订阅:
[user@host ~]$ subscription-manager attach --auto
  • 或者,从可用的订阅列表中附加一个特定池的订阅
[user@host ~]$ subscription-manager attach --pool=poolID
  • 查看已使用的订阅:
[user@host ~]$ subscription-manager list --consumed
  • 解除注册系统:
[user@host ~]$ subscription-manager unregister

权利证书

授权是附加到系统的订阅。数字证书用于存储有关本地系统上的权利的当前信息。一旦注册,权利证书就存储在/etc/pki及其子目录中。

  • /etc/pki/products 包含表明系统上安装了哪些 Red Hat 产品的证书。
  • /etc/pki/consumer 包含标识系统注册的 Red Hat 帐户的证书。
  • /etc/pki/entitlement 包含了表明哪些订阅被附加到系统中的证书。

可以使用rct实用程序直接检查证书,但是subscription-manager工具提供了更简便的方法来检查附加到系统的订阅。

解释和调查RPM软件包

目标

完成本节之后,您能够解释如何将软件作为RPM包提供,并研究使用Yum和RPM安装在系统上的包。

软件包和RPM

RPM包管理器最初是由Red Hat开发的,它提供了一种标准的软件打包发布的方式。以RPM包的形式管理软件比简单地从存档中提取到文件系统中的软件要简单得多。它可以让管理员跟踪软件包安装了哪些文件,如果卸载了哪些文件需要删除,并在安装时检查确保支持的软件包是否存在。有关已安装软件包的信息存储在每个系统上的本地 RPM 数据库中。Red Hat 为 Red Hat Enterprise Linux 提供的所有软件都以 RPM 包的形式提供。

RPM软件包文件名包含四个元素(加上.rpm后缀):name-versionrelease.architecture

[图片上传失败...(image-24064-1587396135508)]


Figure 14.3: RPM file name elements
  • NAME是描述内容的一个或多个单词(coreutils)。
  • VERSION是原始软件的版本号(8.30)。
  • RELEASE是基于该版本的软件包的版本号,由打包者设置,打包者可能不是最初的软件开发人员(4.el8)。
  • ARCH是编译包以运行的处理器架构。noarch表示此包的内容不是特定于体系结构的(x86_64用于64位x86平台、aarch64用于64位ARM等)。

从存储库安装软件包只需要软件包名称。如果存在多个版本,则安装版本号较高的包。如果存在单个版本的多个版本,则安装具有更高版本号的包。

每个RPM软件包都是一个特殊的归档文件,它由以下三个部分组成:

  • 软件包安装的文件。
  • 有关软件包(元数据)的信息,例如名称,版本,发行版和目录; 包装的摘要和说明; 是否需要安装其他软件包; 许可; 包装变更日志; 和其他详细信息。
  • 在安装,更新或删除此程序包时可能运行的脚本,或者在安装,更新或删除其他程序包时触发的脚本。

通常,软件提供商使用GPG密钥对RPM软件包进行数字签名(Red Hat对所发布的所有软件包进行数字签名)。 RPM系统通过确认软件包已由适当的GPG密钥签名来验证软件包的完整性。 如果GPG签名不匹配,则RPM系统拒绝安装软件包。

使用RPM包更新软件

红帽会生成一个完整的RPM软件包来更新软件。 安装该软件包的管理员仅获得该软件包的最新版本。 Red Hat不需要先安装较旧的软件包,然后再打补丁。 要更新软件,RPM会删除软件包的旧版本并安装新版本。 更新通常保留配置文件,但是新版本的打包程序定义了确切的行为。

在大多数情况下,一次只能安装一个版本或版本的软件包。但是,如果生成的包没有冲突的文件名,则可能会安装多个版本。最重要的例子是 kernel 包。由于新内核只能通过引导到该内核来测试,因此该包是专门设计的,以便可以同时安装多个版本。如果新内核无法引导,则旧内核仍然可用且可引导。

检查RPM包

rpm 工具是一个底层工具,它可以获得有关包文件和安装包的内容的信息。默认情况下,它从本地安装的软件包数据库中获取信息。但是,你可以使用 -p 选项来指定你要获取下载的软件包文件的信息。你可能想这样做,以便在安装包文件之前检查包文件的内容。

查询的一般形式是:

  • rpm -q [select-options] [query-options]

    RPM查询:有关已安装软件包的常规信息

  • rpm -qa:列出所有已安装的软件包

  • rpm -qf FILENAME: 找出提供FILENAME的软件包

[user@host ~]$ rpm -qf /etc/yum.repos.d 
redhat-release-8.0-0.39.el8.x86_64

RPM查询:有关特定软件包的信息

  • rpm -q: 列出当前安装的软件包的版本。
[user@host ~]$ rpm -q yum 
yum-4.0.9.2-4.el8.noarch
  • rpm -qi:获取软件包的详细信息

  • rpm -ql: 列出软件包安装的文件

[user@host ~]$ rpm -ql yum
/etc/yum.conf
/etc/yum/pluginconf.d
/etc/yum/protected.d
/etc/yum/vars
/usr/bin/yum
/usr/share/man/man1/yum-aliases.1.gz
/usr/share/man/man5/yum.conf.5.gz
/usr/share/man/man8/yum-shell.8.gz
/usr/share/man/man8/yum.8.gz
  • rpm -qc: 只列出该软件包安装的配置文件
[user@host ~]$ rpm -qc openssh-clients
/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/05-redhat.conf
  • rpm-qd:只列出软件包安装的文档文件
[user@host ~]$ rpm -qd openssh-clients
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz
  • rpm -q --scripts:列出在安装或删除软件包之前或之后运行的shell脚本
[user@host ~]$ rpm -q --scripts openssh-server 
preinstall scriptlet (using /bin/sh): 
getent group sshd >/dev/null || groupadd -g 74 -r sshd || :
getent passwd sshd >/dev/null || \   
    useradd -c "Privilege-separated SSH" -u 74 -g sshd \   
    -s /sbin/nologin -r -d /var/empty/sshd sshd 2> /dev/null || : 
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then         
        # Initial installation 
        /usr/bin/systemctl preset sshd.service sshd.socket >/dev/null 2>&1 || : 
fi 
preuninstall scriptlet (using /bin/sh):

if [ $1 -eq 0 ] ; then         
        # Package removal, not upgrade 
        /usr/bin/systemctl --no-reload disable sshd.service sshd.socket > /dev/ null 2>&1 || :         
        /usr/bin/systemctl stop sshd.service sshd.socket > /dev/null 2>&1 || : 
fi 
postuninstall scriptlet (using /bin/sh):

/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : 
if [ $1 -ge 1 ] ; then         
        # Package upgrade, not uninstall 
        /usr/bin/systemctl try-restart sshd.service >/dev/null 2>&1 || : 
fi
  • rpm -q --changelog:列出软件包的更改信息
[user@host ~]$ rpm -q --changelog audit 
* Wed Jan 09 2019 Steve Grubb <sgrubb@redhat.com> 3.0-0.10.20180831git0047a6c 
resolves: rhbz#1655270] Message "audit: backlog limit exceeded" reported 
- Fix annobin failure

* Fri Dec 07 2018 Steve Grubb <sgrubb@redhat.com> 3.0-0.8.20180831git0047a6c
resolves: rhbz#1639745 - build requires go-toolset-7 which is not available 
resolves: rhbz#1643567 - service auditd stop exits prematurely 
resolves: rhbz#1616428 - Update git snapshot of audit package 
- Remove static libs subpackage 
...output omitted...

查询本地包文件:

[user@host ~]$ ls -l wonderwidgets-1.0-4.x86_64.rpm
-rw-rw-r--. 1 user user 257 Mar 13 20:06 wonderwidgets-1.0-4.x86_64.rpm
[user@host ~]$ rpm -qlp wonderwidgets-1.0-4.x86_64.rpm
/etc/wonderwidgets.conf
/usr/bin/wonderwidgets
/usr/share/doc/wonderwidgets-1.0
/usr/share/doc/wonderwidgets-1.0/README.txt

安装RPM软件包

rpm命令还可用于安装已下载到本地目录的RPM软件包。

[root@host ~]# rpm -ivh wonderwidgets-1.0-4.x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%] Updating / installing...
   1:wonderwidgets-1.0-4              ################################# [100%]
[root@host ~]# 

但是,本章的下一节将讨论一个更强大的工具,用于从命令行管理RPM安装和更新,即yum。

您可以从RPM软件包文件中提取文件,而无需安装软件包。 rpm2cpio实用程序可以将RPM的内容传递给名为cpio的特殊存档工具,该工具可以提取所有文件或单个文件。

rpm2cpio PACKAGEFILE.rpm的输出通过管道传输到cpio -id中,以提取存储在RPM软件包中的所有文件。 相对于当前工作目录,根据需要创建子目录树。

[user@host tmp-extract]$ rpm2cpio wonderwidgets-1.0-4.x86_64.rpm | cpio -id

通过指定文件路径提取单个文件:

[user@host ~]$ rpm2cpio wonderwidgets-1.0-4.x86_64.rpm | cpio -id "*txt"
11 blocks 
[user@host ~]$ ls -l usr/share/doc/wonderwidgets-1.0/ 
total 4 
-rw-r--r--. 1 user user 76 Feb 13 19:27 README.txt

rpm 查询命令总结

可以使用rpm命令直接查询已安装的软件包。添加-p选项以在安装之前查询包文件。

命令 作用
rpm -qa 列出当前安装的所有RPM软件包
rpm -q NAME 显示系统上安装的名称版本
rpm -qi NAME 显示有关包的详细信息
rpm -ql NAME 列出包中包含的所有文件
rpm -qc NAME 列出包中包含的配置文件
rpm -qd NAME 列出包中包含的文档文件
rpm -q --changelog NAME 显示新软件包发布原因的简短摘要
rpm -q --scripts NAME 显示在软件包安装,升级或删除时运行的shell脚本显示在软件包安装,升级或删除时运行的shell脚本

用yum安装和更新软件包

目标

完成本节内容后,你能够使用yum命令查找、安装和更新软件包。

用yum管理软件包

低级的rpm命令可以用来安装包,但它的设计并不是为了与包仓库一起工作,也不是为了自动解决来自多个源的依赖关系。

Yum是为管理基于RPM的软件安装和更新而设计的一个更好的系统。yum命令允许你安装、更新、删除和获取软件包及其依赖关系的信息。你可以获得执行的事物的历史记录,并与多个Red Hat和第三方软件库合作。

使用Yum查找软件

  • yum help显示使用信息。
  • yum list 显示已安装和可用的软件包。
[user@host ~]$ yum list 'http*' 
Available Packages 
http-parser.i686              2.8.0-2.el8                        rhel8-appstream 
http-parser.x86_64            2.8.0-2.el8                        rhel8-appstream httpcomponents-client.noarch  4.5.5-4.module+el8+2452+b359bfcd   rhel8-appstream httpcomponents-core.noarch    4.4.10-3.module+el8+2452+b359bfcd  rhel8-appstream httpd.x86_64                  2.4.37-7.module+el8+2443+605475b7  rhel8-appstream 
httpd-devel.x86_64            2.4.37-7.module+el8+2443+605475b7  rhel8-appstream 
httpd-filesystem.noarch       2.4.37-7.module+el8+2443+605475b7  rhel8-appstream 
httpd-manual.noarch           2.4.37-7.module+el8+2443+605475b7  rhel8-appstream 
httpd-tools.x86_64            2.4.37-7.module+el8+2443+605475b7  rhel8-appstream
  • yum search KEYWORD 仅按名称和摘要字段中的关键字列出软件包。

要搜索在名称、摘要和描述字段中有 "web server "的软件包,请使用 search all

[user@host ~]$ yum search all 'web server' 
================= Summary & Description Matched: web server ==================== 
pcp-pmda-weblog.x86_64 : Performance Co-Pilot (PCP) metrics from web server logs nginx.x86_64 : A high performance web server and reverse proxy server ======================== Summary Matched: web server =========================== libcurl.x86_64 : A library for getting files from web servers 
libcurl.i686 : A library for getting files from web servers 
libcurl.x86_64 : A library for getting files from web servers 
====================== Description Matched: web server ========================= httpd.x86_64 : Apache HTTP Server
git-instaweb.x86_64 : Repository browser in gitweb 
...output omitted...
  • yum info PACKAGENAME 返回一个软件包的详细信息,包括安装所需的磁盘空间。

要获得关于Apache HTTP服务器的信息:

[user@host ~]$ yum info httpd
Available Packages
Name         : httpd
Version      : 2.4.37
Release      : 7.module+el8+2443+605475b7
Arch         : x86_64
Size         : 1.4 M
Source       : httpd-2.4.37-7.module+el8+2443+605475b7.src.rpm
Repo         : rhel8-appstream
Summary      : Apache HTTP Server
URL          : https://httpd.apache.org/
License      : ASL 2.0
Description  : The Apache HTTP Server is a powerful, efficient, and extensible              : web server.

  • yum provides PATHNAME可以显示与指定的路径名称匹配的包(通常包括通配符)。

要找到提供/var/www/html目录的软件包,请使用:

[user@host ~]$ yum provides /var/www/html 
httpd-filesystem-2.4.37-7.module+el8+2443+605475b7.noarch : The basic directory  layout for the Apache HTTP server 
Repo        : rhel8-appstream Matched from:
Filename    : /var/www/html

用yum安装和删除软件

yum install PACKAGENAME 获取并安装一个软件包,包括任何依赖项。

[user@host ~]$ yum install httpd 
Dependencies resolved.
================================================================================
 Package                  Arch       Version             Repository        Size ================================================================================
Installing:
 httpd                    x86_64     2.4.37-7.module...  rhel8-appstream   1.4 M Installing dependencies:
 apr                      x86_64     1.6.3-8.el8         rhel8-appstream   125 k  
 apr-util                 x86_64     1.6.1-6.el8         rhel8-appstream   105 k ...output omitted...
Transaction Summary
================================================================================
Install  9 Packages

Total download size: 2.0 M
Installed size: 5.4 M
Is this ok [y/N]: y 
Downloading Packages:
(1/9): apr-util-bdb-1.6.1-6.el8.x86_64.rpm           464 kB/s |  25 kB     00:00
(2/9): apr-1.6.3-8.el8.x86_64.rpm                    1.9 MB/s | 125 kB     00:00 
(3/9): apr-util-1.6.1-6.el8.x86_64.rpm               1.3 MB/s | 105 kB     00:00 ...output omitted...
Total                                                8.6 MB/s | 2.0 MB     00:00
Running transaction check Transaction check succeeded.
Running transaction test Transaction test succeeded.
Running transaction
  Preparing        :                                                         1/1
  Installing       : apr-1.6.3-8.el8.x86_64                                  1/9
  Running scriptlet: apr-1.6.3-8.el8.x86_64                                  1/9   Installing       : apr-util-bdb-1.6.1-6.el8.x86_64                         2/9 
  ...output omitted...
Installed:
  httpd-2.4.37-7.module+el8+2443+605475b7.x86_64 
  apr-util-bdb-1.6.1-6.el8.x86_64   
  apr-util-openssl-1.6.1-6.el8.x86_64            
  apr-1.6.3-8.el8.x86_64 
  ...output omitted...
Complete!

yum update PACKAGENAME 会获取并安装一个较新版本的包,包括任何依赖关系。通常情况下,这个过程会尝试保留配置文件,但在某些情况下,如果打包的人认为更新后旧的配置文件将无法工作,那么它们可能会被重命名。在没有指定PACKAGENAME的情况下,它将安装所有相关的更新。

[user@host ~]$ sudo yum update

由于一个新内核只能通过启动该内核来测试,所以该软件包是专门设计的,可以同时安装多个版本的内核。如果新内核启动失败,旧内核仍然可用。使用yum update kernel实际上会安装新内核。配置文件里有一个软件包的列表,即使管理员要求更新,也会一直安装。

使用 yum list kernel 来列出所有已安装和可用的内核。要查看当前运行的内核,请使用 uname 命令。-r 选项只显示内核版本和版本,而 -a 选项则显示内核的版本和其他信息。

[user@host ~]$ yum list kernel 
Installed Packages 
kernel.x86_64         4.18.0-60.el8         @anaconda 
kernel.x86_64         4.18.0-67.el8         @rhel-8-for-x86_64-baseos-htb-rpms 
[user@host ~]$ uname -r
4.18.0-60.el8.x86_64 [user@host ~]$ uname -a
Linux host.lab.example.com 4.18.0-60.el8.x86_64 #1 SMP Fri Jan 11 19:08:11 UTC
 2019 x86_64 x86_64 x86_64 GNU/Linux
  • yum remove PACKAGENAME 会删除已安装的软件包,包括任何支持的软件包。

使用yum安装和删除软件组

yum也有组的概念,组是指为特定目的安装在一起的相关软件的集合。在Red Hat Enterprise Linux 8中,有两种群组。常规组是包的集合。环境组是常规组的集合。组提供的软件包或组可以是强制性的(如果安装了该组就必须安装),也可以是默认的(如果安装了该组就正常安装),也可以是可选的(除非特别要求,否则在安装该组时不安装)。

yum list一样,yum group list命令显示的是已安装和可用组的名称。

[user@host ~]$ yum group list 
Available Environment Groups:
   Server with GUI
   Minimal Install
   Server ...output omitted...
Available Groups:
   Container Management
   .NET Core Development
   RPM Development Tools 
...output omitted...

有些组通常是通过环境组安装的,默认情况下是隐藏的。 使用yum group list hidden命令列出这些隐藏的组。

  • yum group info显示有关组的信息。 它包括必填,默认和可选软件包名称的列表。
[user@host ~]$ yum group info "RPM Development Tools"
Group: RPM Development Tools  
Description: These tools include core development tools such rpmbuild.
  Mandatory Packages:     
    redhat-rpm-config     
    rpm-build  
  Default Packages:
    rpmdevtools   
  Optional Packages:
    rpmlint
  • yum group install安装一个组,该组将安装其必需和默认软件包以及它们所依赖的软件包。
[user@host ~]$ sudo yum group install "RPM Development Tools" 
...output omitted...
Installing Groups:
 RPM Development Tools
 Transaction Summary
 ===============================================================================
 Install  64 Packages
 Total download size: 21 M
 Installed size: 62 M
 Is this ok [y/N]: y 
 ...output omitted...

从Red Hat Enterprise Linux 7开始,Yum组的行为已更改。在RHEL 7和更高版本中,组被视为对象,并由系统跟踪。 如果已更新已安装的组,并且Yum存储库已将新的必需或默认软件包添加到该组,则这些新软件包将在更新时安装。

在RHEL 6 和更早的版本中,如果一个组的所有强制包都已经安装完毕,或者没有强制包,或者组中的任何默认包或可选包都已经安装完毕,那么这个组就被认为是已经安装了。从RHEL 7开始,只有在使用yum group install命令安装了一个组才被认为是安装了。yum group mark install GROUPNAME 命令可以用来标记一个组已安装,并且在下一次更新时,任何缺少的软件包和它们的依赖性都会被安装。

最后,RHEL 6和更早的版本没有yum group命令的两个字形式。换句话说,在RHEL 6中,有yum grouplist命令,但RHEL 7和RHEL 8中的没有yum group list

查看事务历史记录

  • 所有的安装和删除事务都会记录在/var/log/dnf.rpm.log中。
[user@host ~]$ tail -5 /var/log/dnf.rpm.log
2019-02-26T18:27:00Z SUBDEBUG Installed: rpm-build-4.14.2-9.el8.x86_64
2019-02-26T18:27:01Z SUBDEBUG Installed: rpm-build-4.14.2-9.el8.x86_64
2019-02-26T18:27:01Z SUBDEBUG Installed: rpmdevtools-8.10-7.el8.noarch
2019-02-26T18:27:01Z SUBDEBUG Installed: rpmdevtools-8.10-7.el8.noarch
2019-02-26T18:38:40Z INFO --- logging initialized ---
  • yum history记录显示了安装和删除事务的摘要。
[user@host ~]$ sudo yum history
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     7 | group install RPM Develo | 2019-02-26 13:26 | Install        |   65
     6 | update kernel            | 2019-02-26 11:41 | Install        |    4
     5 | install httpd            | 2019-02-25 14:31 | Install        |    9
     4 | -y install @base firewal | 2019-02-04 11:27 | Install        |  127 EE
     3 | -C -y remove firewalld - | 2019-01-16 13:12 | Removed        |   11 EE
     2 | -C -y remove linux-firmw | 2019-01-16 13:12 | Removed        |    1
     1 |                          | 2019-01-16 13:05 | Install        |  447 EE
  • history undo撤消选项可撤销交易。
[user@host ~]$ sudo yum history undo 5
Undoing transaction 7, from Tue 26 Feb 2019 10:40:32 AM EST
    Install apr-1.6.3-8.el8.x86_64                              @rhel8-appstream
    Install apr-util-1.6.1-6.el8.x86_64                         @rhel8-appstream
    Install apr-util-bdb-1.6.1-6.el8.x86_64                     @rhel8-appstream
    Install apr-util-openssl-1.6.1-6.el8.x86_64                 @rhel8-appstream
    Install httpd-2.4.37-7.module+el8+2443+605475b7.x86_64      @rhel8-appstream ...output omitted...

yum命令总结

可以通过名称或软件包组来定位,安装,更新和删除软件包。

TASK: COMMAND:
按名称列出已安装和可用的软件包 yum list [NAME-PATTERN]
列出已安装和可用的组别 yum group list
通过关键字搜索软件包 yum search KEYWORD
显示一个包的详细信息 yum info PACKAGENAME
安装一个软件包 yum install PACKAGENAME
安装一个软件包组 yum group install GROUPNAME
更新所有软件包 yum update
删除软件包 yum remove PACKAGENAME
显示事务历史记录 yum history

启用YUM软件存储库

目标

完成本节后,您能够启用和禁用服务器对Red Hat或第三方Yum存储库的使用。

启用RED HAT软件存储库

将系统注册到订阅管理服务会根据附加的订阅自动配置对软件存储库的访问。 要查看所有可用的存储库:

[user@host ~]$ yum repolist all 
Loaded plugins: langpacks 
repo id                                    repo name                                        status 
rhel-8-server-debug-rpms/8Server/x86_64    Red Hat Enterprise Linux 8 Server  (Debug RPMs)   disabled 
rhel-8-server-rpms/8Server/x86_64          Red Hat Enterprise Linux 8 Server  (RPMs)         enabled: 5,071 
rhel-8-server-source-rpms/8Server/x86_64   Red Hat Enterprise Linux 8 Server  (Source RPMs)  disabled repolist: 5,071

yum-config-manager 命令可以用来启用或禁用存储库。要启用一个存储库,命令将启用参数设置为 1。例如,下面的命令启用了 rhel-8-server-debug-rpms 存储库。

[user@host ~]$ yum-config-manager --enable rhel-8-server-debug-rpms
Loaded plugins: langpacks
===================== repo: rhel-8-server-debug-rpms ======================
[rhel-8-server-debug-rpms] 
async = True 
bandwidth = 0 
base_persistdir = /var/lib/yum/repos/x86_64/8Server 
baseurl = https://cdn.redhat.com/content/dist/rhel/server/8/8Server/x86_64/debug 
cache = 0 
cachedir = /var/cache/yum/x86_64/8Server/rhel-8-server-debug-rpms 
check_config_file_age = True cost = 1000 deltarpm_percentage = enabled = 1 
...output omitted...

非Red Hat源通过第三方存储库提供软件,可以通过yum命令从网站,FTP服务器或本地文件系统访问该软件。 例如,Adobe通过Yum存储库为其Linux提供了一些软件。 在Red Hat教室中,content.example.com教室服务器托管Yum存储库。

要启用对新的第三方仓库的支持,请在/etc/yum.repos.d/目录下创建一个文件。仓库配置文件必须以.repo扩展名结尾。仓库的定义包含了仓库的URL、名称、是否使用GPG来检查包签名,如果是,则包含指向可信的GPG密钥的URL。

创建Yum存储库

使用yum-config-manager命令创建Yum仓库。下面的命令创建一个名为/etc/yum.repos.d/ dl.fedoraproject.org_pub_epel_8_x86_64_.repo的文件,输出结果如图所示。

[user@host ~]$ yum-config-manager --add-repo="http://dl.fedoraproject.org/pub/ epel/8/x86_64/" 
Loaded plugins: langpacks
adding repo from: http://dl.fedoraproject.org/pub/epel/8/x86_64/

[dl.fedoraproject.org_pub_epel_8_x86_64_] 
name=added from: http://dl.fedoraproject.org/pub/epel/8/x86_64/ baseurl=http://dl.fedoraproject.org/pub/epel/8/x86_64/ enabled=1

修改此文件,提供GPG密钥的自定义值和位置。密钥存储在远程资源库站点的不同位置,例如,http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8。管理员应该将密钥下载到本地文件中,而不是让yum从外部获取密钥。示例:

[EPEL] 
name=EPEL 8 
baseurl=http://dl.fedoraproject.org/pub/epel/8/x86_64/ 
enabled=1 
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

本地存储库的RPM配置包

一些存储库提供了配置文件和GPG公钥作为RPM软件包的一部分,可以使用yum localinstall命令下载和安装。 例如,名为“企业Linux额外软件包”(EPEL)的志愿者项目提供了Red Hat不支持但与Red Hat Enterprise Linux兼容的软件。

下面的命令安装Red Hat Enterprise Linux 8 EPEL repo软件包:

[user@host ~]$ rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-
EPEL-8 
[user@host ~]$ yum install http://dl.fedoraproject.org/pub/epel/8/x86_64/e/epelrelease-8-2.noarch.rpm

配置文件通常在单个文件中列出多个存储库引用。 每个存储库引用均以方括号中的单个单词名称开头。

[user@host ~]$ cat /etc/yum.repos.d/epel.repo 
[epel] 
name=Extra Packages for Enterprise Linux 8 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/8/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch failovermethod=priority 
enabled=1 
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

[epel-debuginfo] 
name=Extra Packages for Enterprise Linux 8 - $basearch - Debug #baseurl=http://download.fedoraproject.org/pub/epel/8/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-8&arch= $basearch failovermethod=priority 
enabled=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 
gpgcheck=1

[epel-source] 
name=Extra Packages for Enterprise Linux 8 - $basearch - Source #baseurl=http://download.fedoraproject.org/pub/epel/8/SRPMS mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-8&arch= $basearch failovermethod=priority 
enabled=0 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 
gpgcheck=1

要定义存储库,但默认情况下不搜索它,请插入enabled=0参数。可以使用yum config manager命令持久地启用和禁用存储库,也可以临时使用yum命令选项,--enablerepo=PATTERN--disablerepo=PATTERN来启用和禁用存储库。

管理软件包模块流

目标

完成本节内容后,你应该能够:

  • 解释模块如何允许安装特定版本的软件。

  • 如何列出、启用和切换模块流。

  • 从模块安装和更新软件包。

应用流简介

红帽企业Linux 8.0引入了应用流的概念。 随发行版一起提供的用户空间组件的多个版本现在可以同时交付。 它们可能比核心操作系统软件包更频繁地更新。 这为您提供了更大的灵活性来定制Red Hat Enterprise Linux,而不会影响平台或特定部署的基础稳定性。

Red Hat Enterprise Linux 8的内容通过两个主要的软件库发布。BaseOS和应用程序流(AppStream)。

BaseOS

BaseOS 仓库以 RPM 包的形式提供了 Red Hat Enterprise Linux 的核心操作系统内容。BaseOS组件的生命周期与之前Red Hat Enterprise Linux版本中的内容相同。

应用流

Application Stream存储库以模块和传统包的形式提供具有不同生命周期的内容。 Application Stream包含系统的必要部分,以及以前作为Red Hat Software Collections和其他产品和程序的一部分提供的各种应用程序。

应用程序流存储库包含两种类型的内容。模块和传统的RPM包。一个模块描述了一组属于一起的RPM包。模块可以包含多个流,以使多个版本的应用程序可供安装。启用一个模块流,系统就可以访问该模块流中的RPM包。

模块

一个模块是一组RPM软件包,它们是属于同一组的一致集合。 通常,这是围绕特定版本的软件应用程序或编程语言来组织的。 典型的模块可以包含带有应用程序的软件包,带有应用程序特定依赖库的软件包,带有应用程序文档的软件包以及带有助手实用程序的软件包。

模块流

每个模块可以具有一个或多个模块流,其中包含内容的不同版本。 每个流都独立接收更新。 将模块流视为Application Stream物理存储库中的虚拟存储库。

对于每个模块,只能启用其流之一并提供其程序包。

模块配置文件

每个模块可以具有一个或多个配置文件。 配置文件是针对特定用例(例如服务器,客户端,开发,最小安装或其他)要一起安装的某些软件包的列表。

安装特定的模块配置文件只需从模块流中安装特定的一组软件包即可。 随后,您可以正常安装或卸载软件包。 如果未指定配置文件,则模块将安装其默认配置文件。

使用YUM管理模块

红帽企业Linux 8中新增的Yum版本4添加了对Application Stream的新模块化功能的支持。

为了处理模块化内容,添加了yum module命令。 否则,yum将与常规软件包一样使用模块。

查看模块

要显示可用模块列表,请使用 yum module list:

[user@host ~]$ yum module list
   Red Hat Enterprise Linux 8.0 AppStream - AppStream HTB (RPMs)
   Name                    Stream        Profiles   Summary
   389-ds                  1.4           default    389 Directory Server (base)    
   ant                     1.10 [d]      common [d] Java build tool    
   container-tools         1.0 [d]       common [d] Common tools and dependencies  for container runtimes   
   ...output omitted...
   Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

要列出特定模块的模块流并检索其状态,请执行以下操作:

[user@host ~]$ yum module list perl
Red Hat Enterprise Linux 8 for x86_64 - AppStream HTB (RPMs)
Name  Stream       Profiles             Summary perl  5.24         
common [d], minimal  Practical Extraction and Report Language perl  5.26 [d]     
common [d], minimal  Practical Extraction and Report Language    

要列出默认模块流安装的软件包:

[user@host ~]$ yum module info perl
    Name             : perl
    Stream           : 5.26 [d][a]
    Version          : 820181219174508
    Context          : 9edba152
    Profiles         : common, minimal
    Default profiles : default
    Repo             : rhel-8-for-x86_64-appstream-htb-rpms
    Summary          : Practical Extraction and Report Language     ...output omitted...
    Artifacts   : perl-4:5.24.4-401.module+el8+2464+d274aed1.x86_64
                : perl-Algorithm-Diff-0:1.1903-9.module+el8+2464+d274aed1.noarch
                : perl-Archive-Tar-0:2.30-1.module+el8+2464+d274aed1.noarch     
    ...output omitted...

在没有指定模块流的情况下,yum module info会显示默认模块流的详细信息。使用module-name:stream格式来查看特定的模块流。添加 --profile 选项来显示每个模块的配置文件所安装的包的信息。比如说:

[user@host ~]$ yum module info --profile perl:5.24

启用模块流和安装模块

必须启用模块流才能安装其模块。 为了简化此过程,在安装模块后,如有必要,它将启用其模块流。 可以使用yum module enable并提供模块流的名称来手动启用模块流。

使用默认流和配置文件安装模块:

[user@host ~]$ sudo yum module install -y perl 
Dependencies resolved.
================================================================================
 Package         Arch   Version      Repository                            Size ================================================================================
Installing group/module packages:
 perl            x86_64 4:5.26.3-416.el8                                      
            rhel-8-for-x86_64-appstream-htb-rpms  72 k Installing dependencies:
...output omitted...
Running transaction
  Preparing        :                                                        1/1
  Installing       : perl-Exporter-5.72-396.el8.noarch                    1/155            Installing       : perl-Carp-1.42-396.el8.noarch                        2/155 
  ...output omitted...
Installed:   
    perl-4:5.26.3-416.el8.x86_64   
    perl-Encode-Locale-1.05-9.el8.noarch 
...output omitted...
Complete!

要验证模块流和已安装的配置文件的状态,请执行以下操作:

[user@host ~]$ yum module list perl
Red Hat Enterprise Linux 8.0 AppStream - AppStream HTB (RPMs)
Name  Stream       Profiles             Summary perl  5.24         
common, minimal      Practical Extraction and Report Language 
perl  5.26 [d][e]  common [i], minimal  Practical Extraction and Report Language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

移除模块和禁用模块流

移除一个模块会移除当前启用的模块流的配置文件中安装的所有包,以及任何其他依赖这些包和模块的包。从该模块流中安装的、未在其任何配置文件中列出的模块流中安装的包仍会保留在系统中,可以手动移除。

移除模块和切换模块流可能有点麻烦。切换模块启用的流相当于重置当前流并启用新的流。它不会自动改变任何已安装的软件包。你必须手动完成。

不建议直接安装一个与当前安装的模块流不同的模块流,因为在安装过程中可能会运行升级脚本,从而破坏原始模块流。这可能会导致数据丢失或其他配置问题。

请谨慎操作。

要移除已安装的模块:

[user@host ~]$ sudo yum module remove -y perl   
Dependencies resolved.
  ================================================================================    Package                        ArchVersion            Repository               
             Size
  ================================================================================
  Removing:
   perl                           x86_644:5.26.3-416.el8   @rhel-8-for-x86_64appstream-htb-rpms 0   
   Removing unused dependencies:
  ...output omitted...
  Running transaction
  Preparing        :                                                        1/1
  Erasing          : perl-4:5.26.3-416.el8.x86_64                         1/155   
  Erasing          : perl-CPAN-2.18-397.el8.noarch                        2/155            ...output omitted...
  Removed:
  perl-4:5.26.3-416.el8.x86_64   
  dwz-0.12-9.el8.x86_64   
  ...output omitted...
  Complete!

卸下模块后,模块流仍处于启用状态。 要验证模块流是否仍然启用:

[user@host ~]$ yum module list perl
Red Hat Enterprise Linux 8.0 AppStream - AppStream HTB (RPMs)
Name  Stream       Profiles             Summary 
perl  5.24         common [d], minimal  Practical Extraction and Report Language 
perl  5.26 [d][e]   common [d], minimal  Practical Extraction and Report Language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

要禁用模块流:

[user@host ~]$ sudo yum module disable perl   
...output omitted... Dependencies resolved.
=================================================================================
 Package           Arch             Version              Repository         Size =================================================================================
Disabling module streams:  perl                               5.26 
Is this ok [y/N]: y 
Complete!

切换模块流

切换模块流通常需要将内容升级或降级到其他版本。

为了确保干净的切换,你应该先删除模块流提供的模块。这将删除模块配置文件安装的所有包,以及这些包依赖的任何模块和包。要启用不同的模块流并安装模块,请执行以下操作:

[user@host ~]$ sudo yum module install perl:5.24

新的模块流将被启用,当前的模块流将被禁用。可能需要更新或降级以前的模块流中没有在新配置文件中列出的软件包。如果需要,请使用 yum distro-sync 来执行此任务。也可能有一些包仍旧安装在之前的模块流中。使用 yum remove 移除这些软件包。

总结

  • Red Hat Subscription Management提供工具,使计算机有权订阅产品,获取软件包的更新,并跟踪有关系统使用的支持合同和订阅的信息。
  • 软件是以RPM包的形式提供的,这使得安装、升级和卸载系统中的软件非常容易。
  • rpm命令可以用来查询本地数据库,提供有关已安装包的内容和安装下载包文件的信息。
  • yum是一个强大的命令行工具,可以用来安装、更新、删除和查询软件包。
  • Red Hat Enterprise Linux 8 使用应用程序流提供了一个单一的存储库来托管应用程序的多个版本的包及其依赖关系。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342