亚马逊 Linux 2 安全更新后,Nginx 无法正常运行,以及关于禁用 amazon-linux-extras 的备忘录

简要概括

关于 Amazon Linux 2 安全公告中的日期更新为 2022-12-06 的最新内容。

    1. 在多台 EC2 实例上使用 sudo yum -y update –security 命令更新操作系统后,

 

    1. 通过使用 needs-restarting -r 命令确认需要重新启动后,重新启动。

 

    仅有的一台 Nginx 竟然无法启动。

你还没有使用无服务器架构吗?我在备忘录中写下这句话时已经预料到要被批评了。

临时处理

Nginx 启动时的错误消息

nginx: [emerg] “/usr/lib64/nginx/modules/ngx_http_geoip_module.so”模块版本应为1022000而非1020000(位于/usr/share/nginx/modules/mod-http-geoip.conf文件的第1行)。

按照以下文章所述,先执行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
广告
将在 10 秒后关闭
bannerAds