

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

# 透過版本控制的儲存庫使用確定性升級
<a name="deterministic-upgrades-usage"></a>

**Topics**
+ [使用確定性升級的系統](#using-a-deterministic-upgraded-system)
+ [確定性升級系統的選擇性更新](#deterministic-upgrade-selective-update)
+ [使用具決定性升級的持續覆寫](#deterministic-upgrade-override-persist)

## 使用確定性升級的系統
<a name="using-a-deterministic-upgraded-system"></a>

**注意**  
 套件管理員的預設行為已從 AL2 變更。

 確定性升級是一種強大的方式，可確保在廣泛部署之前完整測試生產環境的所有變更。每個新的 AL2023 AMI 都會鎖定至特定版本的 AL2023。這可提供啟動特定 AMI 時已安裝哪些作業系統套件版本的確定性行為。就地更新可以是特定的發行版本，以確保整個機群的確定性行為。當您移至新的 AMIs 或就地更新版本時，您可以在 CI/CD 管道中測試每個更新版本，在部署到生產環境之前發現任何潛在問題。

 您可以使用[AWS Systems Manager 修補程式管理員](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html)等工具，協調跨機群套用更新。對於發行新的 AL2023 AMIs 時建置衍生的 AMI，[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/) 可以自動建置、修補和測試 AMIs，或者您可以[接收新更新的通知](receive-update-notification.md)知道何時有新的基礎 AMIs，或觸發您自己的 AMI 建置管道。 AMIs 

 如需限制更新特定諮詢之更新的資訊，請參閱 [就地套用安全性更新](security-inplace-update.md) 

 對於就地修補，您可以使用`dnf`套件管理員。當您執行 `dnf upgrade` 命令時，系統會檢查 `releasever` 變數指定的儲存庫中是否有升級。有效 `releasever` 是*最新*版本或日期戳記版本，例如 *2023.10.20260325*。

您可以使用下列其中一種方法，來變更 `releasever` 的值。這些方法以降序系統優先順序列出。這表示方法 1 會覆寫方法 2 和方法 3，而方法 2 會覆寫方法 3。

1. 命令行旗標中的值 `--releasever=latest` (如有使用)。

1. 在覆寫變數檔案中指定的值 `/etc/dnf/vars/releasever` (如已設定)。

1. 目前安裝的 `system-release` 套件版本。

在下列範例中，版本為 *2023.0.20230210*：

```
$ rpm -q system-release
system-release-2023.0.20230210-0.amzn2023.noarch
```

在新安裝的系統中，覆寫變數不存在。沒有可用的升級，因為系統已鎖定至 `system-release` 的已安裝版本。

```
$ cat /etc/dnf/vars/releasever
cat: /etc/dnf/vars/releasever: No such file or directory
```

```
$ sudo dnf upgrade
Last metadata expiration check: 0:00:02 ago on Wed 15 Feb 2023 06:14:12 PM UTC.
Dependencies resolved.
Nothing to do.
Complete!
```

您可以使用 `releasever` 旗標來提供您想要的版本，以取得特定版本的套件。

```
$ rpm -q system-release
system-release-2023.0.20230222-0.amzn2023.noarch
```

```
$ sudo dnf upgrade --releasever=2023.0.20230329
Amazon Linux 2023 repository                     26 MB/s |  12 MB     00:00
Dependencies resolved.
================================================================================
 Package                 Arch    Version                      Repository   Size
================================================================================
Installing:
 kernel                   aarch64 6.1.21-1.45.amzn2023        amazonlinux  26 M
Upgrading:
 amazon-linux-repo-s3     noarch  2023.0.20230329-0.amzn2023  amazonlinux  18 k
 ca-certificates          noarch  2023.2.60-1.0.amzn2023.0.1  amazonlinux 828 k
 cloud-init               noarch  22.2.2-1.amzn2023.1.7       amazonlinux 1.1 M

         ... [ list edited for clarity ]

 system-release           noarch  2023.0.20230329-0.amzn2023  amazonlinux  29 k

         ... [ list edited for clarity ]
          
 vim-data                 noarch  2:9.0.1403-1.amzn2023.0.1   amazonlinux  25 k
 vim-minimal              aarch64 2:9.0.1403-1.amzn2023.0.1   amazonlinux 753 k

Transaction Summary
================================================================================
Install    1 Package
Upgrade   42 Packages

Total download size: 56 M
```

由於 `--releasever` 選項會同時覆寫 `system-release` 和 `/etc/dnf/vars/releasever`，因此此升級的結果如下：

1. 升級會取代所有在舊版和新版本之間變更的已安裝套件。

1. 升級會將系統鎖定至儲存庫的新版本 `system-release`。

 透過一律指定要更新的內容 `releasever`（即 AL2023 版本），您在機群中有一組決定性變更。您已啟動 *A *版，更新至 *B*，然後更新至 *C*。

## 確定性升級系統的選擇性更新
<a name="deterministic-upgrade-selective-update"></a>

**注意**  
 建議您安裝新版本中的所有更新，而不是選取特定的更新。只有將部分更新套用至作業系統時，才應該是採用整個更新的標準實務的例外狀況。

您可能想要安裝最新版本的特定套件，並將系統鎖定為原始發行版本。

您可以使用 `dnf check-update` 來找出要升級的套件。

```
$ sudo dnf check-update --releasever=latest --security
Amazon Linux 2023 repository                     13 MB/s |  10 MB     00:00
Last metadata expiration check: 0:00:02 ago on Wed 15 Feb 2023 02:52:21 AM UTC.

bind-libs.aarch64                  32:9.16.27-1.amzn2023.0.1         amazonlinux
bind-license.noarch                32:9.16.27-1.amzn2023.0.1         amazonlinux
bind-utils.aarch64                 32:9.16.27-1.amzn2023.0.1         amazonlinux
cryptsetup.aarch64                 2.4.3-2.amzn2023.0.1              amazonlinux
cryptsetup-libs.aarch64            2.4.3-2.amzn2023.0.1              amazonlinux
curl-minimal.aarch64               7.85.0-1.amzn2023.0.1             amazonlinux
glibc.aarch64                      2.34-40.amzn2023.0.2              amazonlinux
glibc-all-langpacks.aarch64        2.34-40.amzn2023.0.2              amazonlinux
glibc-common.aarch64               2.34-40.amzn2023.0.2              amazonlinux
glibc-locale-source.aarch64        2.34-40.amzn2023.0.2              amazonlinux
gmp.aarch64                        1:6.2.1-2.amzn2023.0.1            amazonlinux
gnupg2-minimal.aarch64             2.3.7-1.amzn2023.0.2              amazonlinux
gzip.aarch64                       1.10-5.amzn2023.0.1               amazonlinux
kernel.aarch64                     6.1.12-17.42.amzn2023             amazonlinux
kernel-tools.aarch64               6.1.12-17.42.amzn2023             amazonlinux
libarchive.aarch64                 3.5.3-2.amzn2023.0.1              amazonlinux
libcurl-minimal.aarch64            7.85.0-1.amzn2023.0.1             amazonlinux
libsepol.aarch64                   3.4-3.amzn2023.0.2                amazonlinux
libsolv.aarch64                    0.7.22-1.amzn2023.0.1             amazonlinux
libxml2.aarch64                    2.9.14-1.amzn2023.0.1             amazonlinux
logrotate.aarch64                  3.20.1-2.amzn2023.0.2             amazonlinux
lua-libs.aarch64                   5.4.4-3.amzn2023.0.1              amazonlinux
lz4-libs.aarch64                   1.9.4-1.amzn2023.0.1              amazonlinux
openssl.aarch64                    1:3.0.5-1.amzn2023.0.3            amazonlinux
openssl-libs.aarch64               1:3.0.5-1.amzn2023.0.3            amazonlinux
pcre2.aarch64                      10.40-1.amzn2023.0.1              amazonlinux
pcre2-syntax.noarch                10.40-1.amzn2023.0.1              amazonlinux
rsync.aarch64                      3.2.6-1.amzn2023.0.2              amazonlinux
vim-common.aarch64                 2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-data.noarch                    2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-enhanced.aarch64               2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-filesystem.noarch              2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-minimal.aarch64                2:9.0.475-1.amzn2023.0.1          amazonlinux
xz.aarch64                         5.2.5-9.amzn2023.0.1              amazonlinux
xz-libs.aarch64                    5.2.5-9.amzn2023.0.1              amazonlinux
zlib.aarch64                       1.2.11-32.amzn2023.0.3            amazonlinux
```

安裝您要升級的套件。使用 `sudo dnf upgrade --releasever=latest` 和套件名稱來確保 `system-release` 套件維持不變。

```
$ sudo dnf upgrade --releasever=latest openssl openssl-libs
Last metadata expiration check: 0:01:28 ago on Wed 15 Feb 2023 02:52:21 AM UTC.
Dependencies resolved.
================================================================================
 Package          Arch        Version                     Repository       Size
================================================================================
Upgrading:
 openssl          aarch64     1:3.0.5-1.amzn2023.0.3      amazonlinux     1.1 M
 openssl-libs     aarch64     1:3.0.5-1.amzn2023.0.3      amazonlinux     2.1 M

Transaction Summary
================================================================================
Upgrade  2 Packages

Total download size: 3.2 M
```

**注意**  
使用 `sudo dnf upgrade --releasever=latest` 更新所有套件，包括 `system-release`。然後，除非您設定持續取代，否則版本會保持鎖定為新的 `system-release`。

## 使用具決定性升級的持續覆寫
<a name="deterministic-upgrade-override-persist"></a>

**注意**  
 透過確定性更新，您可以將作業系統變更整合到您的 CI/CD 管道。停用確定性更新會移除在部署之前進行測試的能力。

透過將變數值設定為*最新*，您就能使用持續覆寫來*解鎖*系統，而不是加入 `--releasever=latest`。透過一律使用 `latest`，這會將 AL2023 的行為還原至 AL2 更新模型，其中對套件管理員的任何呼叫*一律*會查看最新版本，而且不會鎖定至任何特定版本的作業系統。

**警告**  
 透過使用持續覆寫確定性更新來解鎖套件管理員，您會承擔風險，在您的應用程式與生產環境中的作業系統更新之間發現任何可能的不相容。  
 雖然不相容*的情況很*罕見，但隨著作業系統更新，您正在將新的程式碼變更整合到您的環境中，整合測試可以防止部署對生產環境造成負面影響的程式碼變更。

```
$ echo latest | sudo tee /etc/dnf/vars/releasever
latest
```

```
$ sudo dnf upgrade
Last metadata expiration check: 0:03:36 ago on Wed 15 Feb 2023 02:52:21 AM UTC.
Dependencies resolved.
================================================================================
 Package                 Arch    Version                      Repository   Size
================================================================================
Installing:
 kernel                  aarch64 6.1.73-45.135.amzn2023       amazonlinux  24 M
Upgrading:
 acl                     aarch64 2.3.1-2.amzn2023.0.1         amazonlinux  72 k
 alternatives            aarch64 1.15-2.amzn2023.0.1          amazonlinux  36 k
 amazon-ec2-net-utils    noarch  2.3.0-1.amzn2023.0.1         amazonlinux  16 k
 at                      aarch64 3.1.23-6.amzn2023.0.1        amazonlinux  60 k
 attr                    aarch64 2.5.1-3.amzn2023.0.1         amazonlinux  59 k
 audit                   aarch64 3.0.6-1.amzn2023.0.1         amazonlinux 249 k
 audit-libs              aarch64 3.0.6-1.amzn2023.0.1         amazonlinux 116 k
 aws-c-auth-libs         aarch64 0.6.5-6.amzn2023.0.2         amazonlinux  79 k
 aws-c-cal-libs          aarch64 0.5.12-7.amzn2023.0.2        amazonlinux  34 k
 aws-c-common-libs       aarch64 0.6.14-6.amzn2023.0.2        amazonlinux 119 k
 aws-c-compression-libs  aarch64 0.2.14-5.amzn2023.0.2        amazonlinux  22 k
 aws-c-event-stream-libs aarch64 0.2.7-5.amzn2023.0.2         amazonlinux  47 k
 aws-c-http-libs         aarch64 0.6.8-6.amzn2023.0.2         amazonlinux 147 k
 aws-c-io-libs           aarch64 0.10.12-5.amzn2023.0.6       amazonlinux 109 k
 aws-c-mqtt-libs         aarch64 0.7.8-7.amzn2023.0.2         amazonlinux  61 k
 aws-c-s3-libs           aarch64 0.1.27-5.amzn2023.0.3        amazonlinux  54 k
 aws-c-sdkutils-libs     aarch64 0.1.1-5.amzn2023.0.2         amazonlinux  26 k
 aws-checksums-libs      aarch64 0.1.12-5.amzn2023.0.2        amazonlinux  50 k
 awscli-2                noarch  2.7.8-1.amzn2023.0.4         amazonlinux 7.3 M
 basesystem              noarch  11-11.amzn2023.0.1           amazonlinux 7.8 k
 bash                    aarch64 5.1.8-2.amzn2023.0.1         amazonlinux 1.6 M
 bash-completion         noarch  1:2.11-2.amzn2023.0.1        amazonlinux 292 k
 bc                      aarch64 1.07.1-14.amzn2023.0.1       amazonlinux 120 k
 bind-libs               aarch64 32:9.16.27-1.amzn2023.0.1    amazonlinux 1.2 M
 bind-license            noarch  32:9.16.27-1.amzn2023.0.1    amazonlinux  14 k
 bind-utils              aarch64 32:9.16.27-1.amzn2023.0.1    amazonlinux 206 k
 binutils                aarch64 2.38-20.amzn2023.0.3         amazonlinux 4.6 M
 boost-filesystem        aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  55 k
 boost-system            aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  14 k
 boost-thread            aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  54 k
 bzip2                   aarch64 1.0.8-6.amzn2023.0.1         amazonlinux  53 k
 bzip2-libs              aarch64 1.0.8-6.amzn2023.0.1         amazonlinux  44 k
 c-ares                  aarch64 1.17.2-1.amzn2023.0.1        amazonlinux 107 k
 ca-certificates         noarch  2021.2.50-1.0.amzn2023.0.3   amazonlinux 343 k
 checkpolicy             aarch64 3.4-3.amzn2023.0.1           amazonlinux 345 k
 chkconfig               aarch64 1.15-2.amzn2023.0.1          amazonlinux 162 k
 chrony                  aarch64 4.2-7.amzn2023.0.4           amazonlinux 314 k
 cloud-init              noarch  22.2.2-1.amzn2023.1.7        amazonlinux 1.1 M
 cloud-utils-growpart    aarch64 0.31-8.amzn2023.0.2          amazonlinux  31 k
 coreutils               aarch64 8.32-30.amzn2023.0.2         amazonlinux 1.1 M
 coreutils-common        aarch64 8.32-30.amzn2023.0.2         amazonlinux 2.0 M
 cpio                    aarch64 2.13-10.amzn2023.0.1         amazonlinux 269 k
 cracklib                aarch64 2.9.6-27.amzn2023.0.1        amazonlinux  83 k
 cracklib-dicts          aarch64 2.9.6-27.amzn2023.0.1        amazonlinux 3.6 M
 crontabs                noarch  1.11-24.20190603git.amzn2023.0.1
                                                              amazonlinux  19 k
 crypto-policies         noarch  20230128-1.gitdfb10ea.amzn2023.0.1
                                                              amazonlinux  61 k
 crypto-policies-scripts noarch  20230128-1.gitdfb10ea.amzn2023.0.1
                                                              amazonlinux  81 k
...
Installing dependencies:
 amazon-linux-repo-cdn   noarch  2023.0.20230210-0.amzn2023   amazonlinux  16 k
 xxhash-libs             aarch64 0.8.0-3.amzn2023.0.1         amazonlinux  32 k
Installing weak dependencies:
 amazon-chrony-config    noarch  4.2-7.amzn2023.0.4           amazonlinux  14 k
 gawk-all-langpacks      aarch64 5.1.0-3.amzn2023.0.1         amazonlinux 207 k

Transaction Summary
================================================================================
Install    5 Packages
Upgrade  413 Packages

Total download size: 199 M
```

**注意**  
如果您使用覆寫變數 `/etc/dnf/vars/releasever`，請使用以下命令，以透過刪除覆寫值來還原預設鎖定行為。  

```
$ sudo rm /etc/dnf/vars/releasever
```

 使用持久性覆寫來使用 `latest` 而非規格版本，與 AL2 的預設行為類似。有些服務會根據 AL2 建置 AMIs，以停用此行為，並鎖定特定套件版本，如您在 AL2023 上預設取得的版本。

 建議您將執行個體取代為從新 AMI 啟動的執行個體，而不是停用確定性更新。如果執行個體替換不是選項，我們建議您使用[AWS Systems Manager 修補程式管理員](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html)等工具，協調跨機群套用更新。[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/) 也可以自動建置、修補和測試自 AL2023 基礎映像衍生的 AMIs。您也可以[接收新更新的通知](receive-update-notification.md)用來觸發自己的 AMI 建置管道。

 `latest` 在生產前環境中使用 ，然後使用 部署到生產環境，`latest`無法提供 OS 更新與應用程式之間任何問題的保護。 **新的 AL2023 版本可以在任何時間點進行，因此所有在生產承載風險`latest`中的 使用。