跳至內容

升級 EC2 執行個體上的 SUSE 作業系統時,如何疑難排解問題?

2 分的閱讀內容
0

我嘗試升級 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 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 網站上的各區域更新伺服器 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

疑難排解註冊錯誤

請完成以下步驟:

  1. 若要確認作業系統已安裝必要的 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_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

    如果套件已過時或缺少套件,且作業系統無法存取 Zypper,請執行離線升級。

    若要執行離線升級,請在另一台正常運作的主機上使用 Zypper 下載 rpm 套件,然後將套件傳輸至無法正常運作的主機。接著,使用 Zypper 安裝 rpm 套件

  2. 找出缺少的儲存庫。

  3. 如果 SUSE 執行個體缺少軟體儲存庫,請執行以下命令,強制使用可用的儲存庫重新註冊。

    # registercloudguest --force-new
    # SUSEConnect --list-extensions
    # zypper lr --uri

使用 SUSE 強制重新註冊

如果問題仍未解決,請參閱 SUSE 網站上的 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 網站上的套件過時導致雲端執行個體儲存庫無法運作。

相關資訊

Amazon EC2 上的 SUSE Linux Enterprise Server (SLES) 常見問答集

AWS 官方已更新 8 個月前