我尝试在 Amazon Elastic Compute Cloud(Amazon EC2)实例上升级 SUSE 操作系统(OS),但收到了错误,例如实例状态检查失败、已注销的操作系统或 Zypper 命令失败。
解决方法
检查实例状态检查是否失败
有关实例状态检查失败,请参阅如何对因操作系统问题而未能通过实例状态检查的 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 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。
要验证当前的注册状态,请运行以下命令:
# SUSEConnect -s
在前面的命令输出中,验证 Status 参数是 Registered 还是 Not Registered。如果输出为 Not Registered,则尝试重新注册实例。
要从以前的注册中删除条目,请运行以下命令:
# registercloudguest --clean
要重新注册实例,请运行以下命令:
# registercloudguest --force-new
要验证当前的注册状态,请运行以下命令:
# 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'
以下是前面命令的输出示例:
libzypp-17.31.20-150400.3.40.1.x86_64
suseconnect-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
如果软件包已过期或缺失,并且操作系统无法访问 Zypper,则离线完成升级。要离线升级,请在另一台工作主机上使用 Zypper 下载 rpm 软件包,然后将 rpm 传输到非工作主机。然后,执行 Zypper 安装 rpm 软件包
-
确定缺少的存储库。
-
如果您的 SUSE 实例缺少软件存储库,则运行以下命令强制向所有可用存储库进行新注册。
# registercloudguest --force-new
# SUSEConnect --list-extensions
# zypper lr --uri
相关信息
Amazon EC2 上的 SUSE Linux Enterprise Server(SLES)常见问题解答