共用方式為


準備適用於 Azure 的 Oracle Linux 虛擬機器

適用於:✔️ Linux VM ✔️ 彈性擴展集

本文假設您已將 Oracle Linux 作業系統 (OS) 安裝到虛擬硬碟 (VHD)。 有多項工具可用來建立 .vhd 檔案。 一個範例是虛擬化解決方案,例如 Hyper-V。 如需指示,請參閱 安裝 Hyper-V 角色及設定虛擬機器 (VM)

Oracle Linux 安裝注意事項

  • 如需有關針對 Azure 準備 Linux 的更多祕訣,請參閱一般 Linux 安裝注意事項
  • Hyper-V 和 Azure 支援具有 Unbreakable Enterprise Kernel (UEK) 或 Red Hat Compatible Kernel 的 Oracle Linux。
  • Hyper-V 和 Azure 不支援 Oracle 的 UEK2,因為不包含必要的驅動程式。
  • Azure 不支援 VHDX 格式,只支援固定 VHD。 您可以使用 Hyper-V 管理員或 convert-vhd Cmdlet,將磁碟轉換為 VHD 格式。
  • 需要裝載了使用者定義函式 (UDF) 檔案系統的核心支援。 在 Azure 上第一次開機時,佈建組態會透過連接客體的 UDF 格式媒體傳遞至 Linux VM。 Azure Linux 代理程式必須能夠掛接 UDF 檔案系統讀取其組態並佈建 VM。
  • 安裝 Linux 系統時,我們建議您使用標準磁碟分割而不是邏輯磁碟區管理員 (LVM),後者經常是許多安裝的預設設定。 這些標準磁碟分割可避免 LVM 與複製之虛擬機器的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至其他虛擬機器時。 您也可以在資料磁碟上使用 LVM (機器翻譯) 或 RAID (機器翻譯)。
  • 早於 2.6.37 的 Linux 核心版本不支援具較大 VM 大小之 Hyper-V 上的 NUMA。 這個問題主要會影響使用上游 Red Hat 2.6.32 核心的較舊發行版本,且已在 Oracle Linux 6.6 和更新版本中加以修正。
  • 請勿在 OS 磁碟上設定交換磁碟分割。
  • Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確定原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項
  • 確定已啟用 Addons 儲存機制。 編輯檔案 /etc/yum.repos.d/public-yum-ol6.repo(Oracle Linux 6) 或 /etc/yum.repos.d/public-yum-ol7.repo(Oracle Linux 7)。 將此檔案中的行 enabled=0 變更為 [ol6_addons] 或 [ol7_addons] 底下的 enabled=1

Oracle Linux 6.X

重要

請記住,Oracle Linux 6.x 的生命週期即將結束。 Oracle Linux 6.10 版已提供延伸生命週期支援將於 2024 年 7 月結束

您必須在 OS 中完成特定組態步驟,VM 才能在 Azure 中執行。

  1. 在 Hyper-V 管理員的中間窗格中,選取 VM。

  2. 選取 [連線],以開啟 VM 的視窗。

  3. 解除安裝 NetworkManager

    sudo rpm -e --nodeps NetworkManager
    

    注意

    如果尚未安裝封裝,此命令會失敗,並出現錯誤訊息。 這個訊息是預料中的。

  4. /etc/sysconfig/ 目錄中,建立名為 network 且包含下列文字的檔案:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  5. /etc/sysconfig/network-scripts/ 目錄中,建立名為 ifcfg-eth0 且包含下列文字的檔案:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  6. 修改 udev 角色可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則可能會造成問題:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    
  7. 確定網路服務在開機時啟動:

    sudo chkconfig network on
    
  8. 安裝 python-pyasn1

    sudo yum install python-pyasn1
    
  9. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此步驟,請在文字編輯器中開啟 /boot/grub/menu.lst,並確定核心包含以下參數:

    console=ttyS0 earlyprintk=ttyS0
    

    此設定可確保所有主控台訊息都會傳送到第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。

    除了前述步驟以外,我們還建議您「移除」 下列參數:

    rhgb quiet crashkernel=auto
    

    在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。

    如果您需要,可以保留設定 crashkernel 選項。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。

  10. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 此設定通常是預設值。

  11. 執行以下命令來安裝 Azure Linux 代理程式。 最新版為 2.0.15。

    sudo yum install WALinuxAgent
    

    如果 NetworkManagerNetworkManager-gnome 套件沒有如步驟 2 所述遭到移除,則安裝 WALinuxAgent 套件會將這兩個套件移除。

  12. 請不要在 OS 磁碟上建立交換空間。

    Azure Linux 代理程式可在 VM 佈建於 Azure 後,使用附加至 VM 的本機資源磁碟自動設定交換空間。 本機資源磁碟是暫存磁碟,可能會在 VM 取消佈建時清空。 安裝 Azure Linux 代理程式 (請參閱上一個步驟) 後,請在 /etc/waagent.conf 中適當修改下列參數:

    ResourceDisk.Format=y
    ResourceDisk.Filesystem=ext4
    ResourceDisk.MountPoint=/mnt
    ResourceDisk.EnableSwap=y
    ResourceDisk.SwapSizeMB=2048    ## NOTE: set this to whatever you need it to be.
    
  13. 取消佈建 VM,並準備將其佈建於 Azure 上:

    sudo waagent -force -deprovision
    sudo export HISTSIZE=0
    sudo logout
    
  14. 在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure


Oracle Linux 7.0 和更新版本

如果您使用 Oracle Linux 7.0 或更高版本,請遵循後續各節中的步驟。

Oracle Linux 7 中的變更

準備適用於 Azure 的 Oracle Linux 7 VM 與 Oracle Linux 6 類似,但有幾項差異值得注意:

  • Azure 支援具有 Unbreakable Enterprise Kernel (UEK) 或 Red Hat Compatible Kernel 的 Oracle Linux。 建議您搭配 UEK 使用 Oracle Linux。
  • NetworkManager 套件不會再與 Azure Linux 代理程式發生衝突。 預設會安裝此套件,建議您不要將它移除。
  • GRUB2 現已作為預設的開機載入器使用,因此我們已變更編輯核心參數的程序。 (請參閱「設定步驟」一節。)
  • XFS 現為預設的檔案系統。 如果需要,您仍可使用 ext4 檔案系統。

設定步驟

  1. 在 Hyper-V 管理員中,選取 VM。

  2. 選取 [連線],以開啟 VM 的主控台視窗。

  3. /etc/sysconfig/ 目錄中,建立名為 network 且包含下列文字的檔案:

    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  4. /etc/sysconfig/network-scripts/ 目錄中,建立名為 ifcfg-eth0 且包含下列文字的檔案:

    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  5. 修改 udev 角色可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則可能會造成問題:

    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    
  6. 確定網路服務在開機時啟動:

    sudo chkconfig network on
    
  7. 安裝 python-pyasn1 套件:

    sudo yum install python3-pyasn1
    
  8. 清除目前的 yum 中繼資料並安裝任何更新:

    sudo yum clean all
    sudo yum -y update
    
  9. 修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此步驟,請在文字編輯器中開啟 /etc/default/grub 並編輯 GRUB_CMDLINE_LINUX 參數。 例如:

    GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    此修改作業也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 也會關閉具有 UEK 的 Oracle Linux 7 中對網路介面卡的命名慣例。 我們也建議您「移除」下列參數:

       rhgb quiet crashkernel=auto
    

    在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。

    如果您需要,可以保留設定 crashkernel 選項。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。

  10. 編輯完 /etc/default/grub 之後,請重建 grub 設定:

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  11. 確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 此設定通常是預設值。

  12. 安裝 Azure Linux 代理程式與相依性:

    sudo yum install WALinuxAgent
    sudo systemctl enable waagent
    
  13. 安裝 cloud-init 來處理佈建:

    sudo yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons
    
  14. 設定 cloud-initwaagent

    sudo sed -i 's/Provisioning.UseCloudInit=n/Provisioning.UseCloudInit=y/g' /etc/waagent.conf
    sudo sed -i 's/Provisioning.Enabled=y/Provisioning.Enabled=n/g' /etc/waagent.conf
    
    sudo echo "Adding mounts and disk_setup to init stage"
    sudo sed -i '/ - mounts/d' /etc/cloud/cloud.cfg
    sudo sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg
    sudo sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg
    
    echo "Allow only Azure datasource, disable fetching network setting via IMDS"
    
    sudo cat > /etc/cloud/cloud.cfg.d/91-azure_datasource.cfg <<EOF
    datasource_list: [ Azure ]
    datasource:
        Azure:
            apply_network_config: False
    EOF
    
    
    if [[ -f /mnt/resource/swapfile ]]; then
    echo Removing swapfile - Oracle Linux uses a swapfile by default
    swapoff /mnt/swapfile
    rm /mnt/swapfile -f
    fi
    
    echo "Add console log file"
    cat >> /etc/cloud/cloud.cfg.d/05_logging.cfg <<EOF
    
    # This tells cloud-init to redirect its stdout and stderr to
    # 'tee -a /var/log/cloud-init-output.log' so the user can see output
    # there without needing to look on the console.
    output: {all: '| tee -a /var/log/cloud-init-output.log'}
    EOF
    
  15. 交換組態:

    1. 請勿在作業系統磁碟上建立交換空間。

      之前會使用 Azure Linux 代理程式,在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 不過,cloud-init 現在會處理此步驟。 您不得使用 Linux 代理程式格式化資源磁碟來建立分頁檔。 適當修改 /etc/waagent.conf 中的下列參數:

      sudo sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf
      sudo sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf
      
    2. 如果您想要裝載、格式化和建立交換,您可以:

      • 每次建立 VM 時,將此程式碼當做 cloud-init 設定傳入。
      • 使用模擬到映像中的 cloud-init 指示詞,每次建立 VM 時都會執行此步驟:
      echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
      cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
      #cloud-config
      # Generated by Azure cloud image build
      disk_setup:
        ephemeral0:
          table_type: mbr
          layout: [66, [33, 82]]
          overwrite: True
      fs_setup:
        - device: ephemeral0.1
          filesystem: ext4
        - device: ephemeral0.2
          filesystem: swap
      mounts:
        - ["ephemeral0.1", "/mnt/resource"]
        - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
      EOF
      
  16. 取消佈建 VM,並準備將其佈建於 Azure 上:

    sudo cloud-init clean
    sudo rm -f /var/log/waagent.log
    sudo waagent -force -deprovision
    sudo rm -f ~/.bash_history
    sudo export HISTSIZE=0
    

    注意

    如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。

  17. 在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure

您現在可以開始使用您的 Oracle Linux .vhd 在 Azure 中建立新的 VM。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM