

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管理您的 AL2 实例上的软件
<a name="managing-software"></a>

Amazon Linux 的基本发行版包含基本服务器操作所需的软件包和实用工具。

此信息适用于 AL2。有关信息 AL2023，请参阅 *Amazon Linux 2023 用户指南 AL2023*[中的管理软件包和操作系统更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。

使软件保持最新非常重要。Linux 发行版中的许多程序包会经常更新，以修复错误、添加功能，以及防止安全漏洞。有关更多信息，请参阅 [更新您的实例上的 AL2 实例软件](install-updates.md)。

默认情况下， AL2 实例启动时会启用以下存储库：
+ `amzn2-core`
+ `amzn2extra-docker`

虽然这些存储库中有许多由更新过的软件包 AWS，但另一个存储库中可能包含您要安装的软件包。有关更多信息，请参阅 [在 AL2 实例上添加存储库](add-repositories.md)。有关在启用的存储库中查找和安装程序包的帮助，请参阅 [在 AL2 实例上查找并安装软件包](find-install-software.md)。

并非所有软件均可在存储库中存储的软件包中获得；有些软件必须在实例上从其源代码进行编译。有关更多信息，请参阅 [准备在 AL2 实例上编译软件](compile-software.md)。

AL2 实例使用 yum 包管理器管理其软件。yum 程序包管理器可安装、删除和更新软件，以及管理每个包的所有依赖关系。

**Topics**
+ [更新您的实例上的 AL2 实例软件](install-updates.md)
+ [在 AL2 实例上添加存储库](add-repositories.md)
+ [在 AL2 实例上查找并安装软件包](find-install-software.md)
+ [准备在 AL2 实例上编译软件](compile-software.md)

# 更新您的实例上的 AL2 实例软件
<a name="install-updates"></a>

使软件保持最新非常重要。Linux 发行版中的程序包会经常更新，以修复错误、添加功能，以及防止安全漏洞。当您首次启动并连接到 Amazon Linux 实例时，您可能会看到出于安全目的要求您更新软件包的消息。本节介绍如何更新整个系统或仅更新单个程序包。

此信息适用于 AL2。有关信息 AL2023，请参阅 *Amazon Linux 2023 用户指南 AL2023*[中的管理软件包和操作系统更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。

有关变更和更新的信息 AL2，请参阅[AL2 发行说明](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)。

有关变更和更新的信息 AL2023，请参阅[AL2023 发行说明](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes.html)。

**重要**  
如果您在 IPv6仅限子网中启动了使用 Amazon Linux 2 AMI 的 EC2 实例，则必须连接到该实例并运行`sudo amazon-linux-https disable`。这样，您的 AL2 实例就可以 IPv6使用 http 补丁服务通过连接到 S3 中的yum存储库。

**更新 AL2 实例上的所有软件包**

1. （可选）在 Shell 窗口中启动 **screen** 会话。有时您可能会遇到网络中断，这样会断开到实例的 SSH 连接。如果在较长的软件更新期间发生这种情况，实例处于混乱、但可恢复的状态。即使连接中断，通过 **screen** 会话也可继续运行更新，您稍后可重新连接到此会话，不会有问题。

   1. 执行 **screen** 命令以开始会话。

      ```
      [ec2-user ~]$ screen
      ```

   1. 如果会话中断，请再次登录实例并列出可用屏幕。

      ```
      [ec2-user ~]$ screen -ls
      There is a screen on:
      	17793.pts-0.ip-12-34-56-78	(Detached)
      1 Socket in /var/run/screen/S-ec2-user.
      ```

   1. 使用 **screen -r** 命令和前一命令的进程 ID 重新连接到屏幕。

      ```
      [ec2-user ~]$ screen -r 17793
      ```

   1. 使用 **screen** 完成操作后，使用 **exit** 命令关闭会话。

      ```
      [ec2-user ~]$ exit
      [screen is terminating]
      ```

1. 运行 **yum update** 命令。您可以选择添加 `--security` 标记，这样仅应用安全更新。

   ```
   [ec2-user ~]$ sudo yum update
   ```

1. 查看所列的程序包，输入 **y** 并按 Enter 接受更新。更新系统上的所有程序包可能需要几分钟。**yum** 输出显示更新运行状态。

1. （可选）[重启您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html)，以确保您使用的是更新中的最新软件包和库；只有在重启后才会加载内核更新。更新任何 `glibc` 库后也应进行重启。对于用来控制服务的程序包的更新，重新启动服务可能就足以使更新生效，但系统重启可确保所有之前的程序包和库更新都是完整的。

**更新 AL2 实例上的单个软件包**

使用此过程可更新单个程序包 (及其依赖关系)，而非整个系统。

1. 使用要更新的程序包的名称运行 **yum update** 命令。

   ```
   [ec2-user ~]$ sudo yum update openssl
   ```

1. 查看所列的程序包信息，输入 **y** 并按 Enter 接受更新。如果存在必须解析的程序包依赖关系，有时会列出多个数据包。**yum** 输出显示更新运行状态。

1. （可选）[重启您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-reboot.html)，以确保您使用的是更新中的最新软件包和库；只有在重启后才会加载内核更新。更新任何 `glibc` 库后也应进行重启。对于用来控制服务的程序包的更新，重新启动服务可能就足以使更新生效，但系统重启可确保所有之前的程序包和库更新都是完整的。

# 在 AL2 实例上添加存储库
<a name="add-repositories"></a>

此信息适用于 AL2。有关信息 AL2023，请参阅 A *mazon Linux 2023 用户*指南 AL2023中的[通过版本化存储库进行确定性升级](https://docs.aws.amazon.com/linux/al2023/ug/deterministic-upgrades.html)。

默认情况下， AL2 实例启动时会启用以下存储库：
+ `amzn2-core`
+ `amzn2extra-docker`

尽管在 Amazon Web Services 更新的这些存储库中有许多程序包，但是您需要安装的程序包可能在其他存储库中。

要使用 **yum** 从不同存储库安装程序包，您需要将存储库信息添加到 `/etc/yum.conf` 文件中，或者添加到 `repository.repo` 目录中它自己的 `/etc/yum.repos.d` 文件中。您可以手动执行此操作，但大多数 yum 存储库在其存储库 URL 提供各自的 `repository.repo` 文件。

**确定已安装的 yum 存储库**  
使用以下命令列出已安装的 yum 存储库：

```
[ec2-user ~]$ yum repolist all
```

输出结果会列出已安装的存储库，并报告每个存储库的状态。启用的存储库会显示其中包含的程序包数量。

**将 yum 存储库添加到 /etc/yum.repos.d**

1. 查找 `.repo` 文件的位置。这随要添加的存储库而异。在本示例中，`.repo` 文件位于 `https://www.example.com/repository.repo`。

1. 使用 **yum-config-manager** 命令添加存储库。

   ```
   [ec2-user ~]$ sudo yum-config-manager --add-repo https://www.example.com/repository.repo
   Loaded plugins: priorities, update-motd, upgrade-helper
   adding repo from: https://www.example.com/repository.repo
   grabbing file https://www.example.com/repository.repo to /etc/yum.repos.d/repository.repo
   repository.repo                                      | 4.0 kB     00:00
   repo saved to /etc/yum.repos.d/repository.repo
   ```

安装存储库后，必须按照以下过程启用存储库。

**在 /etc/yum.repos.d 中启用 yum 存储库**  
使用带 **yum-config-manager** 标志的 `--enable repository` 命令。以下命令从 Fedora 项目启用 Extra Packages for Enterprise Linux (EPEL) 存储库。默认情况下，此存储库显示在 Amazon Linux AMI 实例上的 `/etc/yum.repos.d` 中，但未启用。

```
[ec2-user ~]$ sudo yum-config-manager --enable epel
```

欲了解更多信息并下载此软件包的最新版本，请参阅 [https://fedoraproject。 org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL)。

# 在 AL2 实例上查找并安装软件包
<a name="find-install-software"></a>

您可以使用软件包管理工具来查找和安装软件包。在 Amazon Linux 2 中，默认的软件包管理工具是YUM。在中 AL2023，默认的软件包管理工具是DNF。有关更多信息，请参阅《*亚马逊 Linux 2023 用户指南*》中的 Pack [age 管理工具](https://docs.aws.amazon.com/linux/al2023/ug/package-management.html)。

## 在 AL2 实例上查找软件包
<a name="find-software"></a>

您可以使用 **yum search** 命令搜索在您配置的存储库中可用的程序包的描述。如果不知道要安装的程序包的确切名称，这尤其有帮助。只需将关键字搜索附加到该命令；对于多字词搜索，请使用引号括起搜索查询。

```
[ec2-user ~]$ yum search "find"
```

下面是示例输出。

```
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
============================== N/S matched: find ===============================
findutils.x86_64 : The GNU versions of find utilities (find and xargs)
gedit-plugin-findinfiles.x86_64 : gedit findinfiles plugin
ocaml-findlib-devel.x86_64 : Development files for ocaml-findlib
perl-File-Find-Rule.noarch : Perl module implementing an alternative interface to File::Find
robotfindskitten.x86_64 : A game/zen simulation. You are robot. Your job is to find kitten.
mlocate.x86_64 : An utility for finding files by name
ocaml-findlib.x86_64 : Objective CAML package manager and build helper
perl-Devel-Cycle.noarch : Find memory cycles in objects
perl-Devel-EnforceEncapsulation.noarch : Find access violations to blessed objects
perl-File-Find-Rule-Perl.noarch : Common rules for searching for Perl things
perl-File-HomeDir.noarch : Find your home and other directories on any platform
perl-IPC-Cmd.noarch : Finding and running system commands made easy
perl-Perl-MinimumVersion.noarch : Find a minimum required version of perl for Perl code
texlive-xesearch.noarch : A string finder for XeTeX
valgrind.x86_64 : Tool for finding memory management bugs in programs
valgrind.i686 : Tool for finding memory management bugs in programs
```

引号中的多个字词搜索查询仅返回符合确切查询的结果。如果您没有看到需要的程序包，请将搜索简化为一个关键字，然后扫描结果。您还可以尝试使用关键字同义词来扩大搜索范围。

有关软件包的更多信息 AL2，请参阅以下内容：
+ [AL2 额外内容库](al2-extras.md)
+ [程序包存储库](ec2.md#package-repository)

## 在 AL2 实例上安装软件包
<a name="install-software"></a>

在中 AL2，yum 软件包管理工具会在所有已启用的存储库中搜索不同的软件包，并处理软件安装过程中的任何依赖关系。有关在中安装软件包的信息 AL2023，请参阅 *Amazon Linux 2023 用户指南*中的[管理软件包和操作系统更新](https://docs.aws.amazon.com/linux/al2023/ug/managing-repos-os-updates.html)。

**从存储库安装软件包**  
使用**yum install *package***命令，*package*替换为要安装的软件的名称。例如，若要安装 **links** 基于文本的 Web 浏览器，请输入以下命令。

```
[ec2-user ~]$ sudo yum install links
```

**安装您已下载的 RPM 软件包文件**  
您还可使用 **yum install** 安装您已经从互联网下载的 RPM 程序包文件。为此，将 RPM 文件的路径名称而不是存储库程序包名称附加到安装命令。

```
[ec2-user ~]$ sudo yum install my-package.rpm
```

**列出已安装软件包**  
要查看实例上已安装的软件包的列表，请使用以下命令。

```
[ec2-user ~]$ yum list installed
```

# 准备在 AL2 实例上编译软件
<a name="compile-software"></a>

互联网上有开源软件，这些软件尚未预编译，可从程序包存储库下载。您可能最终会发现需要您亲自从源代码编译的软件包。为了使您的系统能够在 AL2 Amazon Linux 中编译软件，您需要安装多种开发工具**make**，例如**gcc**、和**autoconf**。

因为软件编译不是每个 Amazon EC2 实例都需要的任务，所以在默认情况下不安装这些工具，不过，称为“开发工具”的程序包组中包含这些工具，而这个程序包组可通过 **yum groupinstall** 命令方便地添加到实例。

```
[ec2-user ~]$ sudo yum groupinstall "Development Tools"
```

软件源代码包通常可以作为压缩存档文件（称为 tarbal [l）下载（从 [https://github.com/](https://github.com/)和 http://sourceforge.net/](https://sourceforge.net/) 等网站）。这些 tarball 的文件扩展名通常为 `.tar.gz`。您可以使用 **tar** 命令解压缩这些存档。

```
[ec2-user ~]$ tar -xzf software.tar.gz
```

将源代码包解压并解档后，应在源代码目录中查找 `README` 或 `INSTALL` 文件，这些文件包含有关编译和安装源代码的进一步说明。

**检索 Amazon Linux 程序包的源代码**  
Amazon Web Services 提供所维护的程序包的源代码。您可以使用 **yumdownloader --source** 命令下载已安装的任何程序包的源代码。

运行**yumdownloader --source *package***命令下载的源代码*package*。例如，若要下载 `htop` 程序包的源代码，请输入以下命令。

```
[ec2-user ~]$ yumdownloader --source htop

Loaded plugins: priorities, update-motd, upgrade-helper
Enabling amzn-updates-source repository
Enabling amzn-main-source repository
amzn-main-source                                                                                              | 1.9 kB  00:00:00     
amzn-updates-source                                                                                           | 1.9 kB  00:00:00     
(1/2): amzn-updates-source/latest/primary_db                                                                  |  52 kB  00:00:00     
(2/2): amzn-main-source/latest/primary_db                                                                     | 734 kB  00:00:00     
htop-1.0.1-2.3.amzn1.src.rpm
```

源 RPM 的位置位于您运行命令的目录中。