如何解决在 EC2 实例上升级 SUSE 操作系统时出现的问题
我正在 Amazon Elastic Compute Cloud(Amazon EC2)实例上升级 SUSE 操作系统(OS)。我在升级期间遇到了一些问题,例如实例状态检查失败、操作系统注销或 zypper 命令失败。
解决方法
检查实例状态检查是否失败
如果升级操作系统后实例状态检查失败,请参阅由于操作系统问题,我的 EC2 Linux 实例未通过实例状态检查。如何解决此问题?
自动检查注册是否失败(仅限托管实例)
如果您的实例是 AWS Systems Manager 控制台中的托管实例,则运行 AWSSupport-TroubleshootSUSERegistration 自动化文档。AWSSupport-TroubleshootSUSERegistration 自动化文档有助于确定升级失败的根本原因。有关详细信息,请参阅为什么我无法将运行 SUSE 的 EC2 实例注册到 SUSE 更新基础设施,以便能够安装或更新软件包?
手动验证注册是否失败
对于非托管实例的实例,请检查以下各项:
为实例注册确定的两个主要先决条件是:
- 实例 billingProducts 或 marketplaceProductCodes 代码。
- 传出连接 IP 地址必须属于 AWS IP 范围。
1. 运行以下命令,验证 billingProducts 或 marketplaceProductCodes 代码:
# 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 云实例,以强制向所有可用存储库进行新注册。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 1 年前