如何解决在 EC2 实例上升级 SUSE 操作系统时出现的问题

2 分钟阅读
0

我正在 Amazon Elastic Compute Cloud(Amazon EC2)实例上升级 SUSE 操作系统(OS)。我在升级期间遇到了一些问题,例如实例状态检查失败、操作系统注销或 zypper 命令失败。

解决方法

检查实例状态检查是否失败

如果升级操作系统后实例状态检查失败,请参阅由于操作系统问题,我的 EC2 Linux 实例未通过实例状态检查。如何解决此问题?

自动检查注册是否失败(仅限托管实例)

如果您的实例是 AWS Systems Manager 控制台中的托管实例,则运行 AWSSupport-TroubleshootSUSERegistration 自动化文档。AWSSupport-TroubleshootSUSERegistration 自动化文档有助于确定升级失败的根本原因。有关详细信息,请参阅为什么我无法将运行 SUSE 的 EC2 实例注册到 SUSE 更新基础设施,以便能够安装或更新软件包?

手动验证注册是否失败

对于非托管实例的实例,请检查以下各项:

为实例注册确定的两个主要先决条件是:

  • 实例 billingProductsmarketplaceProductCodes 代码。
  • 传出连接 IP 地址必须属于 AWS IP 范围。

1.    运行以下命令,验证 billingProductsmarketplaceProductCodes 代码:

# curl -s http://169.254.169.254/latest/dynamic/instance-identity/document

下面是以下命令的输出示例:

 billingProducts" : [ "bp-********" ]

2.    检查 /etc/hosts 文件中是否存在 SMT 注册条目。查找 # Added by SMT registration do not remove, retain comment as well 行后面的条目。

每个 AWS 区域都有不同的 SMT 服务器。要在不使用 pint 工具的情况下查找某个区域的 SMT 服务器的 IP 地址,请参阅 susepubliccloudinfo.suse.com 网站上的 SMT 服务器 IP 地址列表

运行以下命令以验证注册状态:

# SUSEConnect -s

在前面的命令输出中,验证状态参数是已注册还是未注册。如果输出为未注册,则尝试重新注册实例。

要重新注册,最佳实践是移除以前的注册。运行以下命令以清理凭证和存储库:

SUSEConnect --de-register
SUSEConnect --cleanup
rm -f /etc/SUSEConnect
rm -rf /etc/zypp/credentials.d/*
rm -rf /etc/zypp/repos.d/*
rm -f /etc/zypp/services.d/*

此外,移除先前注册后在 /etc/hosts 文件中添加的 SMT 条目。否则,新注册会创建多个 SMT 条目。移除或评论以下条目:

# vi /etc/hosts

# Added by SMT registration do not remove, retain comment as well
54.246.90.215 smt-ec2.susecloud.net smt-ec2

清理条目后,运行以下命令以重新注册实例:

# registercloudguest --force-new
# SUSEConnect -s

如果注册失败,则分析 /var/log/cloudregister 中的日志,以确定失败原因。以下是日志中的错误示例:

SUSEConnect error: Errno::ENOSPC: No space left on device

解决常见注册错误

1.    运行以下命令,验证 cloud-regionsrv-client 版本是否为 9.0.0 或更高版本:

rpm -qa | grep cloud-regionsrv-client

以下是前面命令的输出示例:

cloud-regionsrv-client-9.0.3-52.16.1
cloud-regionsrv-client-plugin-ec2-1.0.0-52.16.1

运行以下命令以更新软件包:

# zypper update cloud-regionsrv-client

2.    运行以下命令,验证您的操作系统中是否存在所有必需的软件包:

# rpm -qa | grep -iE "cloud-regionsrv-client|regionServiceClientConfigEC2|ec2metadata|SUSEConnect|libzypp|ruby-common"

以下是前面命令的输出示例:

libzypp-17.31.8-150400.3.14.1.x86_64
python3-ec2metadata-4.0.0-150000.3.9.1.noarch
ruby-common-2.1-3.15.noarch
suseconnect-ng-1.0.0~git0.faee7c196dc1-150400.3.7.3.x86_64
libsuseconnect-1.0.0~git0.faee7c196dc1-150400.3.7.3.x86_64
suseconnect-ruby-bindings-1.0.0~git0.faee7c196dc1-150400.3.7.3.x86_64
regionServiceClientConfigEC2-4.1.0-150000.3.24.1.noarch
cloud-regionsrv-client-10.0.8-150000.6.86.1.noarch
cloud-regionsrv-client-plugin-ec2-1.0.2-150000.6.86.1.noarch

如果软件包较旧或缺失,并且操作系统无法访问 zypper,则离线完成升级。有关详细信息,请参阅 suse.com 网站上的公有云基础设施更新。“公有云基础设施更新”文档包括升级所需的模块和最新的注册软件包:

# wget --no-check-certificate https://52.15.49.139/late_instance_offline_update_ec2_<arch>_<slebase>.tar.gz
# sha1sum late_instance_offline_update_ec2_<arch>_<slebase>.tar.gz
# tar -xf late_instance_offline_update_ec2_<arch>_<slebase>.tar.gz
# cd <arch>
# zypper --no-refresh --no-remote --non-interactive in *.rpm

3.    确定缺少的存储库。

如果您的 SUSE 实例缺少软件存储库,则查看缺少软件存储库的 AWS 或 Azure SUSE 云实例,以强制向所有可用存储库进行新注册。

相关信息

Amazon EC2 上的 SUSE Linux Enterprise Server(SLES)常见问题解答

AWS 官方
AWS 官方已更新 10 个月前