如何对在 EC2 实例上升级 SUSE 操作系统时遇到的问题进行故障排除?
我尝试在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上升级 SUSE 操作系统 (OS),但收到了错误。
解决方法
检查实例状态检查是否失败
有关实例状态检查失败,请参阅如何对因操作系统问题而未能通过实例状态检查的 EC2 Linux 实例进行故障排除?
使用 susecloud-repocheck 脚本自动诊断和修复小问题
susecloud-repocheck 脚本会执行操作系统存储库检查,并更正阻止实例注册到 SUSE 更新基础设施以获取以下云计算服务的问题:
- Microsoft Azure
- AWS
- Google Cloud Platform (GCP)
- 即用即付 (PAYG) 按需型实例
有关更多信息,请参阅 SUSE GitHub 存储库中的 susecloud-repocheck。
要运行该脚本,请执行命令:
$ python3 <(curl -sL https://raw.githubusercontent.com/SUSE/susecloud-repocheck/main/sc-repocheck.py)
该脚本在 /var/log/ 目录中创建日志,名为 sc-repocheck_<YYMMDD_hhmmss>.tar.xz。
手动验证注册并解决升级失败问题
验证实例 billingProducts 或 marketplaceProductCodes 代码
对于 PAYG vanilla SUSE Linux Enterprise Server (SLES),请验证实例的 billingProducts 代码。对于 PAYG SLES for SAP Applications,请验证 marketplaceProductCodes 代码。
要验证 billingProducts 或 marketplaceProductCodes 代码,请运行以下命令:
# /usr/bin/curl --noproxy '*' -w "\n" -s -H "X-aws-ec2-metadata-token: $(curl --noproxy '*' -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 300")" http://169.254.169.254/latest/dynamic/instance-identity/document | grep -E 'billingProducts|marketplaceProductCodes'
该命令的输出如下:
billingProducts" : [ "bp-********" ]
或
"marketplaceProductCodes" : [ "***********************" ],
检查 /etc/hosts 文件中是否存在 SMT 注册条目
在 /etc/hosts 文件中,检查 # Added by SMT registration do not remove, retain comment as well 行后面的条目。
**注意:**一个 AWS 区域内存在多个 SUSE 公有云更新服务器。有关详细信息,请参阅 SUSE Public Cloud Solutions 网站上的 list of update server IP addresses for AWS Regions(AWS 各区域的更新服务器 IP 地址列表)。
要验证当前的注册状态,请运行以下命令:
# SUSEConnect -s
在前面的命令输出中,检查 Status(状态)参数是 Registered(已注册)还是 Not Registered(未注册)。如果输出为 Not Registered(未注册),则尝试重新注册实例。
要重新注册实例,请运行以下命令:
# registercloudguest --force-new
要从以前的注册中删除条目,请运行以下命令:
# registercloudguest --clean
要验证当前的注册状态,请运行以下命令:
# SUSEConnect -s
如果注册失败,请查看 /var/log/cloudregister 中的日志,以确定失败的原因。
日志中的错误示例:
SUSEConnect error: Errno::ENOSPC: No space left on device
删除 /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
对注册错误进行故障排除
要对注册错误进行故障排除,请完成以下步骤:
- 要验证您是否在操作系统中安装了所需的 cloud-regionsrv-client 和相关的依赖包,请运行以下命令:
输出示例:# rpm -qa | grep -E 'cloud-regionsrv-client|cloud-regionsrv-client-plugin-ec2|regionServiceClientConfigEC2|SUSEConnect|suseconnect-ng|python3-ec2metadata|python3-dnspython|python3-lxml|python3-cssselect|python3-M2Crypto|python3-zypp-plugin|libzypp|ruby-common'
如果软件包已过期或缺失,并且操作系统无法访问 Zypper,则离线完成升级。要离线升级,请在另一台工作主机上使用 Zypper 下载 rpm 软件包,然后将 rpm 传输到非工作主机。然后,执行 rpm 软件包的 Zypper 安装libzypp-17.31.20-150400.3.40.1.x86_64suseconnect-ng-1.6.0~git0.31371c8-150400.3.22.1.x86_64 python3-zypp-plugin-0.6.3-150000.4.2.1.noarch python3-cssselect-1.0.3-150000.3.3.1.noarch python3-M2Crypto-0.38.0-150400.7.64.x86_64 python3-lxml-4.7.1-150200.3.10.1.x86_64 regionServiceClientConfigEC2-4.1.1-150000.3.27.1.noarch ruby-common-2.1-3.15.noarch python3-ec2metadata-5.0.0-150000.3.12.1.noarch cloud-regionsrv-client-10.1.6-150000.6.105.1.noarch cloud-regionsrv-client-plugin-ec2-1.0.4-150000.6.105.1.noarch python3-dnspython-1.15.0-150000.3.2.1.noarch - 确定缺少的存储库。
- 如果您的 SUSE 实例缺少软件存储库,请运行以下命令强制向所有可用存储库进行新注册。
# registercloudguest --force-new # SUSEConnect --list-extensions # zypper lr --uri
使用 SUSE 强制进行重新注册
如果仍有问题,请参阅 SUSE 网站上的 AWS or Azure SUSE cloud instance missing software repositories(AWS 或 Azure SUSE 云实例缺少软件存储库),以强制进行重新注册。此方法仅适用于 Amazon EC2 中的 PAYG 实例。此方法不适用于自带订阅 (BYOS) 实例。
要重置并重新注册,请运行以下命令:
# rm /etc/SUSEConnect
# rm -f /etc/zypp/{repos,services,credentials}.d/*
# rm -f /usr/lib/zypp/plugins/services/*
# sed -i '/^# Added by SMT reg/,+1d' /etc/hosts
# /usr/sbin/registercloudguest --force-new
要验证注册状态,请运行以下命令:
# SUSEConnect -s
# zypper lr --uri
更新您的包
由于包过期,实例无法与 SUSE 更新基础设施通信。要解决此问题,请参阅 SUSE 网站上的 Cloud instance repos fail due to outdated packages(云实例存储库因包过期而出现故障)。
相关信息
SUSE Linux Enterprise Server (SLES) on Amazon EC2 FAQs(Amazon EC2 上的 SUSE Linux Enterprise Server (SLES) 常见问题解答)
