本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用版本化存储库实现确定性升级
使用确定性升级的系统
注意
包管理器的默认行为已从改为 AL2。
确定性升级是一种有效的方法,可确保对生产环境的所有更改在广泛部署之前得到充分测试。每个新的 AL2 023 AMI 都锁定到特定版本的 AL2 023。这提供了启动特定 AMI 时将安装的操作系统程序包版本的确定性行为。原地更新可以升级到特定的发布版本,确保整个实例集中的确定性行为。当你迁移到新的 AMIs 或就地更新版本时,你可以测试 CI/CD 管道中的每个版本,在部署到生产环境之前发现任何潜在的问题。
您可以使用诸如 Amazon Systems Manager Patch Manager 之类的工具来协调跨实例集的应用更新。对于 AMIs 在新 AL2 023 AMIs 发布时派生的构建,EC2 Image Builder 可以自动构建 AMIs、修补和测试,或者你可以有新的更新时收到通知知道新基础何时可 AMIs 用,或者触发自己的 AMI 构建管道。
有关将更新限制为来自特定通告的信息,请参阅 原地应用安全更新
对于原地修补,您可以使用 dnf 程序包管理器。但您运行 dnf upgrade 命令时,系统会检查 releasever 变量指定的存储库中的升级。有效版本releasever是其中一个latest或一个带有日期戳的版本,例如. 2023.9.20251117
您可以使用以下任一方法更改 releasever 的值。这些方法按系统优先级降序列出。这意味着方法 1 优先于方法 2 和 3,方法 2 优先于方法 3。
-
命令行标志中的值,
--releasever=(如果使用)。latest -
替代变量文件中指定的值,
/etc/dnf/vars/releasever(如果设置)。 -
当前安装的
system-release软件包版本。
在以下示例中,版本为2023.0.20230210:
$rpm -q system-releasesystem-release-2023.0.20230210-0.amzn2023.noarch
在新安装的系统中,替代变量不存在。由于系统锁定到 system-release 的已安装版本,所以无升级可用。
$cat /etc/dnf/vars/releasevercat: /etc/dnf/vars/releasever: No such file or directory
$sudo dnf upgradeLast 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-releasesystem-release-2023.0.20230222-0.amzn2023.noarch
$sudo dnf upgrade --releasever=2023.0.20230329Amazon 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,所以此升级的结果如下:
-
升级将替换在先前版本和新版本之间有所变化的所有已安装的软件包。
-
升级会将系统锁定到
system-release的新版本的存储库。
通过始终指定要更新到什么releasever(即 AL2 023 版本),您可以对整个舰队进行一组确定性的更改。您启动了版本A,更新为B,然后更新为C。
选择性更新确定性升级系统
注意
我们建议安装新发布版本中的所有更新,而不是选择特定更新。仅对操作系统应用部分更新,应被视为偏离采用完整更新的标准实践的例外情况。
您或许想要安装来自最近版本的选定软件包,同时仍将系统锁定到原始发行版本。
您可以使用 dnf check-update 来确认要升级的软件包。
$sudo dnf check-update --releasever=latest --securityAmazon 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-libsLast 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,除非您设置了持久取代。
在确定性升级中使用持久取代
注意
通过确定性更新,您可以将操作系统更改集成到您的 CI/CD 管道中。禁用确定性更新将丧失在部署前进行测试的能力。
您可以通过将变量值设置为--releasever=latest,使用永久覆盖来解锁系统,而不必添加latest。通过始终使用latest,这会将 AL2 023 的行为恢复到 AL2 更新模型,在这种模型中,对包管理器的任何调用都将始终查看最新版本,并且不会锁定到任何特定版本的操作系统。
警告
通过使用对确定性更新的持久覆盖来解锁程序包管理器,您将承担在生产环境中发现您的应用程序与操作系统更新之间任何可能的不兼容性的风险。
虽然不兼容性确实罕见,但通过操作系统更新,您正在将新的代码变更集成到您的环境中,集成测试可以防止部署对生产环境产生负面影响的代码变更。
$echo latest | sudo tee /etc/dnf/vars/releaseverlatest
$sudo dnf upgradeLast 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有些服务是 AMIs基于这些服务来构建的, AL2 它们会禁用此行为,并锁定到特定的软件包版本,就像你在 AL2 023 上默认获得的那样。
我们建议使用从新 AMI 启动的实例替换原有实例,而不是禁用确定性更新。如果无法进行实例替换,我们建议使用诸如 Amazon Systems Manager Patch Manager 之类的工具来协调跨实例集的应用更新。EC2 Image Builder 还可以自动构建、修补和测试您自己从 AL2 023 个基础映像中 AMIs 派生的映像。您也可以 有新的更新时收到通知,这可用于触发您自己的 AMI 构建流水线。
在预生产环境中使用 latest,然后使用 latest 部署到生产环境,并不能防范操作系统更新与您的应用程序之间的任何问题。新的 AL2 023 版本可能在任何时间点发布,因此生产latest中的所有使用都存在风险。