亚马逊 Linux 2 安全更新后,Nginx 无法正常运行,以及关于禁用 amazon-linux-extras 的备忘录
简要概括
关于 Amazon Linux 2 安全公告中的日期更新为 2022-12-06 的最新内容。
-
- 在多台 EC2 实例上使用 sudo yum -y update –security 命令更新操作系统后,
-
- 通过使用 needs-restarting -r 命令确认需要重新启动后,重新启动。
- 仅有的一台 Nginx 竟然无法启动。
你还没有使用无服务器架构吗?我在备忘录中写下这句话时已经预料到要被批评了。
临时处理
Nginx 启动时的错误消息
按照以下文章所述,先执行sudo yum -y remove nginx-mod-http-geoip删除掉不正版本的模块,然后重新启动Nginx,成功进行临时修复。
- 参考: AL2 Nginxをアップデートするとエラーを吐いて起動しない – でんとタッチ
调查
已安装的 Nginx 软件包
执行 yum list installed nginx* 在问题实例中的结果如下:
yum list installed nginx*
nginx.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-all-modules.noarch 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-core.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-filesystem.noarch 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-mod-http-geoip.x86_64 1:1.20.0-2.amzn2.0.4 @amzn2extra-nginx1 # <- これ!
nginx-mod-http-image-filter.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-mod-http-perl.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-mod-http-xslt-filter.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-mod-mail.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
nginx-mod-stream.x86_64 1:1.22.0-1.amzn2.0.1 @amzn2extra-nginx1
据说只有 nginx-mod-http-geoip 的版本是1.20.0,而其他组件是1.22.0版本,更新时出现了不匹配的版本(错误信息显示版本是1020000而不是1022000)。
由于幸运地没有使用 GeoIP,通过删除问题软件包,成功启动了 Nginx。
确认其他实例没有出现问题的原因是,它们都使用的是 Nginx 1.12.x 版本。
yum list installed nginx*
nginx.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-all-modules.noarch 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-filesystem.noarch 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-http-geoip.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-http-image-filter.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-http-perl.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-http-xslt-filter.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-mail.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
nginx-mod-stream.x86_64 1:1.12.2-2.amzn2.0.2 @amzn2extra-nginx1.12
已安装的 Yum 库
查看仓库列表时,发现问题的实例只安装了 amzn2extra-nginx1/2/x86_64,导致 Nginx 被更新到了1.2x。
yum repolist amzn2extra-nginx*
リポジトリー ID リポジトリー名 状態
amzn2extra-nginx1/2/x86_64 Amazon Extras repo for nginx1 82 # <- これ!
amzn2extra-nginx1.12/2/x86_64 Amazon Extras repo for nginx1.12 36
yum repolist amzn2extra-nginx*
リポジトリー ID リポジトリー名 状態
amzn2extra-nginx1.12/2/x86_64 Amazon Extras repo for nginx1.12 36
所有实例应该都使用相同的Ansible Playbook进行构建和运维,但为什么只有一台增加了仓库,原因不明(?)
- name: Enable amazon2 extra yum repository for nginx
ansible.builtin.command: amazon-linux-extras enable nginx1.12
changed_when: false
- name: Install Nginx
ansible.builtin.yum:
name:
- nginx
state: present
暂定处置
删除存储库(主题)
由于仓库 amzn2extra-nginx1/2/x86_64 仍然存在,可能会导致今后的安全更新出现类似的事故,因此,暂时解决方案是删除问题仓库。
由于这是通过amazon-linux-extras命令安装的存储库(主题),因此使用相同的命令进行删除可以防止不一致的发生。
根据查看的Amazon Linux和Amazon Elastic Compute Cloud资料,似乎可以通过在sudo amazon-linux-extras disable命令后指定主题ID来进行删除。
使用yum repolist显示的”仓库ID”,执行以下操作也无法删除(也不会显示错误)。
sudo amazon-linux-extras disable amzn2extra-nginx1/2/x86_64
使用amazon-linux-extras命令,选择列表中的主题名字”nginx1″进行删除。
sudo amazon-linux-extras disable nginx1
永久处理
由于Nginx 1.12已经停止支持,因此未来需要使用Nginx 1。
使用Ansible Playbook 实施删除旧主题和软件包,安装新主题nginx1与Nginx 1.22的操作。
# Nginx 1.12 をアンインストール
- name: Uninstall old nginx
ansible.builtin.shell: if nginx -v 2>&1 | grep '1\.12'; then yum -y remove nginx*; fi
changed_when: false
# 古いトピック nginx1.12 を amazon-linux-extras コマンドで無効化
- name: Disable old nginx repository with amazon-linux-extras command
ansible.builtin.command: amazon-linux-extras disable nginx1.12
changed_when: false
# 新しいトピック nginx1 を amazon-linux-extras コマンドで有効化
- name: Enable nginx repository with amazon-linux-extras command
ansible.builtin.command: amazon-linux-extras enable nginx1
changed_when: false
# Nginx 1.22 を yum でインストール
- name: Install nginx
ansible.builtin.yum:
name:
- nginx-1.22.0
state: present
update_cache: yes
# Nginx サービスの開始と自動起動設定
- name: Enable and start nginx service
ansible.builtin.service:
name: nginx
enabled: yes
state: started
以下是被删除的九个旧软件包,并安装了以下五个新软件包。
===============================================================================
Package アーキテクチャー バージョン リポジトリー
===============================================================================
インストール中:
nginx x86_64 1:1.22.0-1.amzn2.0.2 amzn2extra-nginx1
依存性関連でのインストールをします:
nginx-core x86_64 1:1.22.0-1.amzn2.0.2 amzn2extra-nginx1
nginx-filesystem noarch 1:1.22.0-1.amzn2.0.2 amzn2extra-nginx1
openssl11-libs x86_64 1:1.1.1g-12.amzn2.0.9 amzn2-core
openssl11-pkcs11 x86_64 0.4.10-6.amzn2.0.1 amzn2-core
请提供相关的网址链接。
-
- AL2 Nginxをアップデートするとエラーを吐いて起動しない – でんとタッチ
- Amazon Linux – Amazon Elastic Compute Cloud