

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 管理 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)。

**重要**  
如果您將使用 Amazon Linux 2 AMI 的 EC2 執行個體啟動到僅限 IPv6 的子網中，則必須連線到該執行個體並執行 `sudo amazon-linux-https disable`。這可以讓您的 AL2 執行個體使用 http 修補程式服務來透過 IPv6 連接到 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 的相關資訊，請參閱《Amazon Linux 2[023 使用者指南》中的透過 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
```

結果輸出會列出已安裝的儲存庫，並報告每個儲存庫的狀態。已啟用的儲存庫會顯示其包含的套件數目。

**為 /etc/yum.repos.d 新增 yum 儲存庫**

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：//[https://fedoraproject.org/wiki/EPEL](https://fedoraproject.org/wiki/EPEL)。

# 在 AL2 執行個體上尋找並安裝軟體套件
<a name="find-install-software"></a>

您可以使用套件管理工具來尋找並安裝軟體套件。在 Amazon Linux 2 中，預設軟體套件管理工具為 YUM。在 AL2023 中，預設軟體套件管理工具為 DNF。如需詳細資訊，請參閱《*Amazon Linux 2023 使用者指南*》中的[套件管理工具](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 Extras 程式庫](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*** 命令，並使用要安裝之軟體的名稱來取代*套件*。例如，若要安裝 **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 執行個體需要的任務，根據預設不會安裝這些工具，但仍可以在稱為 "Development Tools" 的套件群組中取得。您可以使用 **yum groupinstall** 命令輕鬆為執行個體新增該群組。

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

軟體來源碼套件通常可做為壓縮封存檔案 (稱為 tarball) 進行下載 (例如 [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 的位置位於您執行命令的目錄中。