準備適用於 Azure 的 Red Hat 型虛擬機器
適用於:✔️ Linux VM ✔️ 彈性擴展集 ✔️ 統一擴展集
在本文中,您將了解如何準備 Red Hat Enterprise Linux (RHEL) 虛擬機器 (VM) 以在 Azure 中使用。 本文涵蓋的 RHEL 版本為 6.X、7.X 和 8.X。 本文涵蓋的準備作業使用 Hyper-V、以核心為基礎的 VM (KVM) 及 VMware 等 Hypervisor。
如需參加 Red Hat 的 Cloud Access 方案之資格需求的詳細資訊,請參閱 Red Hat Cloud Access 網站與在 Azure 上執行 RHEL。 如需自動化建置 RHEL 映像的方式,請參閱 Azure Image Builder。
注意
請注意已處於生命週期結束 (EOL),且 Red Hat 不再支援的版本。 於 EOL 或之後上傳的映像,將會根據合理的商務義務支援。 如需詳細資訊,請參閱 Red Hat 產品生命週期。
Hyper-V 管理員
本節說明如何使用 Hyper-V 管理員準備 RHEL 6、RHEL 7 或 RHEL 8 VM。
必要條件
本節假設您已經從 Red Hat 網站取得 ISO 檔案並將 RHEL 映像安裝至虛擬硬碟 (VHD)。 如需有關如何使用 Hyper-V 管理員來安裝作業系統映像的詳細資訊,請參閱安裝 Hyper-V 角色和設定虛擬機器。
RHEL 安裝注意事項
- Azure 不支援 VHDX 格式。 Azure 只支援固定 VHD。 您可以使用 Hyper-V 管理員將磁碟轉換為 VHD 格式,或者使用
convert-vhd
Cmdlet。 如果您使用 VirtualBox,請選取 [固定大小] ,而不是預設在建立磁碟時動態配置的選項。 - Azure 支援 Gen1 (BIOS 開機) 和 Gen2 (UEFI 開機) VM。
- 允許的 VHD 大小上限為 1,023 GB。
- 必須在核心中啟用 vfat 核心模組。
- 邏輯磁碟區管理員 (LVM) 受到支援,而且可在 OS 磁碟或 Azure VM 中的資料磁碟上使用。 通常建議在 OS 磁碟 (而不是 LVM) 上使用標準磁碟分割。 此練習可避免 LVM 名稱與複製的 VM 發生衝突,特別是為了疑難排解而需要將作業系統磁碟連結至另一部相同 VM 時。 如需詳細資訊,請參閱 LVM 和 RAID 文件。
- 需要掛接通用磁碟格式 (UDF) 檔案系統的核心支援。。 在 Azure 上初次開機時,連結至客體的 UDF 格式媒體會將佈建組態傳遞至 Linux VM。 Azure Linux 代理程式必須能夠掛接 UDF 檔案系統讀取其組態並佈建 VM。 如果缺少此步驟,佈建會失敗。
- 請勿在作業系統磁碟上設定交換磁碟分割。 如需詳細資訊,請參閱下列步驟。
- Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確定原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱下列步驟。 另請參閱 Linux 安裝注意事項。
注意
Cloud-init >= 21.2 會移除 UDF 需求。 不過,若未啟用 UDF 模組,就無法在佈建期間裝載 CD-ROM,進而無法套用自訂資料。 因應措施是利用使用者資料來套用自訂資料。 與自訂資料不同,使用者資料並未經過加密。 如需詳細資訊,請參閱使用者資料格式。
使用 Hyper-V 管理員的 RHEL 6
重要
2020 年 11 月 30 日,RHEL 6 已結束維護階段。 維護階段後面接著為延長生命階段。 當 RHEL 6 即將結束完整/維護階段時,強烈建議您升級至 RHEL 7、8 或 9。 如果您必須停留在 RHEL 6,建議您新增 RHEL 延長生命週期支援附加元件。
在 Hyper-V 管理員中,選取 VM。
選取 [連線],以開啟 VM 的主控台視窗。
在 RHEL 6 中,
NetworkManager
可能會對 Azure Linux 代理程式造成干擾。 解除安裝此套件:sudo rpm -e --nodeps NetworkManager
建立或編輯
/etc/sysconfig/network
檔案,然後新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
移動 (或移除) udev 規則可防止產生乙太網路介面的靜態規則。 在 Azure 或 Hyper-V 中複製 VM 時,這些規則會造成問題:
警告
許多 'v5' 和更新的 VM 大小都需要加速網路。 如果未啟用,NetworkManager 會將相同的 IP 位址指派給所有虛擬功能介面。 若要防止重複的 IP 位址,請務必在移轉至較新的大小時包含此 udev 規則。
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
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo chkconfig network on
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要進行這項修改,請在文字編輯器中開啟
/boot/grub/menu.lst
。 確定預設核心包含以下參數:console=ttyS0 earlyprintk=ttyS0
此動作也會確保所有主控台訊息都會傳送到第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。
我們也建議您移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量。 對於較小的 VM 大小,此設定可能會有問題。確定已安裝安全殼層 (SSH) 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改
/etc/ssh/sshd_config
以包含下面一行:ClientAliveInterval 180
安裝 Azure Linux 代理程式:
sudo yum install WALinuxAgent sudo chkconfig waagent on
如果
NetworkManager
和NetworkManager-gnome
套件在步驟 3 沒有遭到移除,則安裝 WALinuxAgent 套件會將這兩個套件移除。請勿在作業系統磁碟上建立交換空間。
Azure Linux 代理程式可在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 本機資源磁碟是暫存磁碟,可能會在 VM 取消佈建時清空。 在上一個步驟安裝 Azure Linux 代理程式後,請在
/etc/waagent.conf
中適當修改下列參數:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
取消註冊訂用帳戶 (如有必要):
sudo subscription-manager unregister
取消佈建 VM,並準備將其佈建於 Azure 上:
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。
sudo waagent -force -deprovision sudo export HISTSIZE=0
在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure。
使用 Hyper-V 管理員的 RHEL 7
在 Hyper-V 管理員中,選取 VM。
選取 [連線],以開啟 VM 的主控台視窗。
建立或編輯
/etc/sysconfig/network
檔案,然後新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo systemctl enable network
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟
/etc/default/grub
,然後編輯GRUB_CMDLINE_LINUX
參數。 例如:GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ENABLE_BLSCFG=true
注意
如果
/etc/default/grub
有 ENABLE_BLSCFG=false 而不是ENABLE_BLSCFG=true
,依賴開機載入器規格 (BLS) 來管理開機項目和組態的工具 (例如 grubedit 或 gubby) 可能無法在 RHEL 8 和 9 中正常運作。 如果沒有ENABLE_BLSCFG
,預設行為是false
。此項修改也將確保所有主控台訊息都會傳送給第一個序列埠,並且啟用與序列主控台的互動,以協助 Azure 支援團隊進行問題偵錯程序。 此組態也會關閉新的 RHEL 7 對網路介面卡 (NIC) 的命名慣例。
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。編輯完
/etc/default/grub
之後,請執行下列命令重建 grub 組態:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
注意
如果您要上傳已啟用 UEFI 的 VM,則更新 grub 的命令為
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
。確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改
/etc/ssh/sshd_config
以包含下面一行:ClientAliveInterval 180
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安裝 Azure Linux 代理程式、
cloud-init
和其他必要的公用程式:sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
設定
cloud-init
來處理佈建:設定
cloud-init
的waagent
:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=auto/g' /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
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請在
/etc/waagent.conf
組態中設定Provisioning.Agent=disabled
。設定掛接:
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
設定 Azure 資料來源:
sudo 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" #RHEL uses a swapfile by default swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
設定
cloud-init
記錄:sudo echo "Add console log file" sudo 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
交換組態:
請勿在作業系統磁碟上建立交換空間。
之前會使用 Azure Linux 代理程式,在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 此動作現在由
cloud-init
處理。 您不得使用 Linux 代理程式格式化資源磁碟來建立分頁檔。 適當修改/etc/waagent.conf
中的下列參數:ResourceDisk.Format=n ResourceDisk.EnableSwap=n
如果您想要裝載、格式化和建立交換,您可以:
每次建立 VM 時,將此程式碼當做
cloud-init
組態傳入。 建議您採用此方法。使用模擬到映像中的
cloud-init
指示詞,每次建立 VM 時都會執行此步驟。sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf sudo 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
如果您要取消註冊訂用帳戶,請執行下列命令:
sudo subscription-manager unregister
取消佈建 VM,並準備將其佈建於 Azure 上:
警告
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。 執行
waagent -force -deprovision+user
命令會將來源機器轉譯為無法使用。 此步驟僅供您建立一般化映像。sudo rm -f /var/log/waagent.log sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure。
使用 Hyper-V 管理員的 RHEL 8+
在 Hyper-V 管理員中,選取 VM。
選取 [連線],以開啟 VM 的主控台視窗。
確定網路管理員服務在開機時啟動:
sudo systemctl enable NetworkManager.service
將網路介面設定為在開機時自動啟動,並使用動態主機設定通訊協定:
sudo nmcli con mod eth0 connection.autoconnect yes ipv4.method auto
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
修改 grub 組態中的核心開機那一行,使其包含更多用於 Azure 並且啟用序列主控台的核心參數。
移除目前的 GRUB 參數:
sudo grub2-editenv - unset kernelopts
在文字編輯器中編輯
/etc/default/grub
,然後新增下列參數:GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 earlyprintk=ttyS0 net.ifnames=0" GRUB_TERMINAL_OUTPUT="serial console" GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
此項修改也將確保所有主控台訊息都會傳送給第一個序列埠,並且啟用與序列主控台的互動,以協助 Azure 支援團隊進行問題偵錯程序。 此組態也會關閉對 NIC 的新命名慣例。
我們建議您也移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。編輯完
/etc/default/grub
之後,請執行下列命令重建 grub 組態:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
針對已啟用 UEFI 的 VM,執行下列命令:
sudo grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改
/etc/ssh/sshd_config
以包含下面一行:ClientAliveInterval 180
安裝 Azure Linux 代理程式、
cloud-init
和其他必要的公用程式:sudo yum install -y WALinuxAgent cloud-init cloud-utils-growpart gdisk hyperv-daemons sudo systemctl enable waagent.service sudo systemctl enable cloud-init.service
設定
cloud-init
來處理佈建:設定
cloud-init
的waagent
:sudo sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /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
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請在
/etc/waagent.conf
組態中設定Provisioning.Agent=disabled
。設定掛接:
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
設定 Azure 資料來源:
sudo 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" #RHEL uses a swapfile by defaul swapoff /mnt/resource/swapfile rm /mnt/resource/swapfile -f fi
設定
cloud-init
記錄:sudo echo "Add console log file" sudo 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
交換組態:
請勿在作業系統磁碟上建立交換空間。
之前會使用 Azure Linux 代理程式,在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 此動作現在由
cloud-init
處理。 您不得使用 Linux 代理程式格式化資源磁碟來建立分頁檔。 適當修改/etc/waagent.conf
中的下列參數:ResourceDisk.Format=n ResourceDisk.EnableSwap=n
每次建立 VM 時,將此程式碼當做
cloud-init
組態傳入。 建議您採用此方法。使用模擬到映像中的
cloud-init
指示詞,每次建立 VM 時都會執行此步驟。sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf sudo 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.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"] EOF
如果您要取消註冊訂用帳戶,請執行下列命令:
sudo subscription-manager unregister
執行下列命令,以取消佈建 VM,並準備將其佈建於 Azure 上:
sudo cloud-init clean sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo sudo rm -f /var/log/waagent.log sudo export HISTSIZE=0
警告
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。 執行
waagent -force -deprovision+user
命令會將來源機器轉譯為無法使用。 此步驟僅供您建立一般化映像。在 Hyper-V 管理員中,選取 [動作]>[關閉]。 您現在可以將 Linux VHD 上傳至 Azure。
KVM
本節說明如何使用 KVM 來準備 RHEL 6 或 RHEL 7 散發版本以上傳至 Azure。
使用 KVM 的 RHEL 6
重要
2020 年 11 月 30 日,RHEL 6 已結束維護階段。 維護階段後面接著為延長生命階段。 當 RHEL 6 即將結束完整/維護階段時,強烈建議您升級至 RHEL 7、8 或 9。 如果您必須停留在 RHEL 6,建議您新增 RHEL 延長生命週期支援附加元件。
從 Red Hat 網站下載 RHEL 6 的 KVM 映像。
設定根密碼。
產生加密的密碼,並複製命令的輸出:
sudo openssl passwd -1 changeme
使用 guestfish 設定根密碼:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
將根使用者的第二個欄位從
!!
變更為加密的密碼。在 KVM 中從 qcow2 映像建立 VM。 將磁碟類型設定為 qcow2,再將虛擬網路介面裝置模型設定為 virtio。 然後啟動 VM 並以 root 身分登入。
建立或編輯
/etc/sysconfig/network
檔案,然後新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
移動 (或移除) 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
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparently bonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo chkconfig network on
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要進行這項設定,請在文字編輯器中開啟
/boot/grub/menu.lst
。 確定預設核心包含以下參數:console=ttyS0 earlyprintk=ttyS0
此步驟也會確保所有主控台訊息都會傳送到第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。
我們也建議您移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。將 Hyper-V 模組新增至 initramfs:
編輯
/etc/dracut.conf
檔案並新增下列內容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
解除安裝
cloud-init
:sudo yum remove cloud-init
確定您已安裝 SSH 伺服器,並已設定為在開機時啟動:
sudo chkconfig sshd on
修改
/etc/ssh/sshd_config
以包含下面幾行:PasswordAuthentication yes ClientAliveInterval 180
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
安裝 Azure Linux 代理程式:
sudo yum install WALinuxAgent sudo chkconfig waagent on
Azure Linux 代理程式可在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 本機資源磁碟是暫存磁碟,可能會在 VM 取消佈建時清空。 在上一個步驟安裝 Azure Linux 代理程式後,請在
/etc/waagent.conf
中適當修改下列參數:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
取消註冊訂用帳戶 (如有必要):
sudo subscription-manager unregister
執行下列命令以取消佈建 VM,並準備將其佈建於 Azure 上。
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。
sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
在 KVM 中關閉 VM。
將 qcow2 映像轉換成 VHD 格式。
注意
qemu-img 版本 >=2.2.1 中已知的錯誤 (bug) 會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議您使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 如需詳細資訊,請參閱此網站。
先將映像轉換成原始格式:
sudo qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw
確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-6.9.raw $rounded_size
將原始磁碟轉換成固定大小的 VHD:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
或者,使用 qemu 版本 2.6+,包含
force_size
選項:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
使用 KVM 的 RHEL 7
從 Red Hat 網站下載 RHEL 7 的 KVM 映像。 此程序會使用 RHEL 7 做為範例。
設定根密碼。
產生加密的密碼,並複製命令的輸出:
sudo openssl passwd -1 changeme
使用 guestfish 設定根密碼:
sudo guestfish --rw -a <image-name> > <fs> run > <fs> list-filesystems > <fs> mount /dev/sda1 / > <fs> vi /etc/shadow > <fs> exit
將根使用者的第二個欄位從
!!
變更為加密的密碼。在 KVM 中從 qcow2 映像建立 VM。 將磁碟類型設定為 qcow2,再將虛擬網路介面裝置模型設定為 virtio。 然後啟動 VM 並以 root 身分登入。
建立或編輯
/etc/sysconfig/network
檔案,然後新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo systemctl enable network
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要進行此設定,請在文字編輯器中開啟
/etc/default/grub
,然後編輯GRUB_CMDLINE_LINUX
參數。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此命令也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 而且也會關閉新的 RHEL 7 對 NIC 的命名慣例。 我們也建議您移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。編輯完
/etc/default/grub
之後,請執行下列命令重建 grub 組態:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
將 Hyper-V 模組新增至 initramfs。
編輯
/etc/dracut.conf
並加入內容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
解除安裝
cloud-init
:sudo yum remove cloud-init
確定您已安裝 SSH 伺服器,並已設定為在開機時啟動:
sudo systemctl enable sshd
修改
/etc/ssh/sshd_config
以包含下面幾行:PasswordAuthentication yes ClientAliveInterval 180
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安裝 Azure Linux 代理程式:
sudo yum install WALinuxAgent
啟用
waagent
服務:sudo systemctl enable waagent.service
安裝
cloud-init
。按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 12 「安裝
cloud-init
來處理佈建」。交換組態:
- 請勿在作業系統磁碟上建立交換空間。
- 按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 13 「交換組態」。
取消註冊訂用帳戶 (如有必要):
sudo subscription-manager unregister
按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 15 「取消佈建」來取消佈建。
在 KVM 中關閉 VM。
將 qcow2 映像轉換成 VHD 格式。
注意
qemu-img 版本 >=1.1.1 中已知的錯誤 (bug) 會導致 VHD 的格式不正確。 此問題已在 QEMU 1.6 中修正。 建議您使用 qemu-img 1.1.0 或更舊版本,或更新至 1.6 或更新版本。 如需詳細資訊,請參閱此網站。
先將映像轉換成原始格式:
sudo qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw
確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-7.4.raw $rounded_size
將原始磁碟轉換成固定大小的 VHD:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
或者,使用 qemu 版本 1.6+,包含
force_size
選項:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
VMware
本節說明如何從 VMware 準備 RHEL 6 或 RHEL 7 散發版本。
必要條件
本節假設您已在 VMware 中安裝 RHEL VM。 如需有關如何在 VMware 中安裝作業系統的資訊,請參閱 VMware 客體作業系統安裝指南。
- 安裝 Linux 作業系統時,我們建議您使用標準磁碟分割而不是 LVM (這通常是許多安裝的預設設定)。 使用磁碟分割可避免 LVM 與複製之虛擬機器的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至其他虛擬機器時。 如果需要,可以在資料磁碟上使用 LVM 或 RAID。
- 請勿在作業系統磁碟上設定交換磁碟分割。 您可以設定 Linux 代理程式以在暫存資源磁碟上建立交換檔。 如需詳細資訊,請參閱下列步驟。
- 建立 VHD 時,請選取 [將虛擬磁碟儲存為單一檔案] 。
使用 VMware 的 RHEL 6
重要
2020 年 11 月 30 日,RHEL 6 已結束維護階段。 維護階段後面接著為延長生命階段。 當 RHEL 6 即將結束完整/維護階段時,強烈建議您升級至 RHEL 7、8 或 9。 如果您必須停留在 RHEL 6,建議您新增 RHEL 延長生命週期支援附加元件。
在 RHEL 6 中,
NetworkManager
可能會對 Azure Linux 代理程式造成干擾。 解除安裝此套件:sudo rpm -e --nodeps NetworkManager
在
/etc/sysconfig/
目錄中,建立名為 network 且包含下列文字的檔案:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no
移動 (或移除) 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
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparently bonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo chkconfig network on
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-6-server-extras-rpms
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此步驟,請在文字編輯器中開啟
/etc/default/grub
並編輯GRUB_CMDLINE_LINUX
參數。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0"
此步驟也會確保所有主控台訊息都會傳送到第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 我們也建議您移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。將 Hyper-V 模組新增至 initramfs:
編輯
/etc/dracut.conf
檔案並新增下列內容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
確定已安裝 SSH 伺服器,並已設定為在開機時啟動 (這通常為預設值)。 修改
/etc/ssh/sshd_config
以包含下面一行:ClientAliveInterval 180
安裝 Azure Linux 代理程式:
sudo yum install WALinuxAgent sudo chkconfig waagent on
請勿在作業系統磁碟上建立交換空間。
Azure Linux 代理程式可在 VM 佈建於 Azure 後,使用連結至 VM 的本機資源磁碟自動設定交換空間。 本機資源磁碟是暫存磁碟,可能會在 VM 取消佈建時清空。 在上一個步驟安裝 Azure Linux 代理程式後,請在
/etc/waagent.conf
中適當修改下列參數:ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be.
取消註冊訂用帳戶 (如有必要):
sudo subscription-manager unregister
執行下列命令,以取消佈建 VM,並準備將其佈建於 Azure 上:
注意
如果您要移轉特定的 VM,但不想建立一般化映像,請略過取消佈建步驟。
sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user sudo rm -f ~/.bash_history sudo export HISTSIZE=0
關閉 VM,並將 VMDK 檔案轉換成 .vhd 檔案。
注意
qemu-img 版本 >=2.2.1 中已知的錯誤 (bug) 會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議您使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 如需詳細資訊,請參閱此網站。
先將映像轉換成原始格式:
sudo qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw
確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-6.9.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-6.9.raw $rounded_size
將原始磁碟轉換成固定大小的 VHD:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd
或者,使用 qemu 版本 2.6+,包含
force_size
選項:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd
使用 VMware 的 RHEL 7
建立或編輯
/etc/sysconfig/network
檔案,然後新增下列文字:NETWORKING=yes HOSTNAME=localhost.localdomain
建立或編輯
/etc/sysconfig/network-scripts/ifcfg-eth0
檔案,然後新增下列文字:DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes
注意
當您使用加速網路時,建立的合成介面必須設定為使用 udev 規則的非受控。 此動作這可防止
NetworkManager
將與主要介面相同的 IP 指派給它。加以套用:
sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF
確定網路服務在開機時啟動:
sudo systemctl enable network
註冊您的 Red Hat 訂用帳戶,以便從 RHEL 存放庫安裝套件:
sudo subscription-manager register --auto-attach --username=XXX --password=XXX
修改 grub 組態中的核心開機那一行,使其額外包含用於 Azure 的核心參數。 若要執行此修改,請在文字編輯器中開啟
/etc/default/grub
,然後編輯GRUB_CMDLINE_LINUX
參數。 例如:GRUB_CMDLINE_LINUX="console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
此組態也會確保所有主控台訊息都會傳送給第一個序列埠,以協助 Azure 支援團隊進行問題偵錯程序。 也會關閉新的 RHEL 7 對 NIC 的命名慣例。 此外,我們還建議您移除下列參數:
rhgb quiet crashkernel=auto
在雲端環境中,您會將所有記錄傳送到序列埠,因此不適合使用圖形化和無訊息開機。 如果需要,您可以保留
crashkernel
選項的設定。 此參數會減少 VM 中約 128 MB 或以上的可用記憶體數量,這可能會對較小型的 VM 造成問題。編輯完
/etc/default/grub
之後,請執行下列命令重建 grub 組態:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
將 Hyper-V 模組新增至 initramfs:
編輯
/etc/dracut.conf
,新增內容:add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
確定您已安裝 SSH 伺服器,並已設定為在開機時啟動。 此設定通常是預設值。 修改
/etc/ssh/sshd_config
以包含下面一行:ClientAliveInterval 180
WALinuxAgent 套件
WALinuxAgent-<version>
已推送至 Red Hat extras 儲存機制。 啟用額外的存放庫:sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
安裝 Azure Linux 代理程式:
sudo yum install WALinuxAgent sudo systemctl enable waagent.service
安裝
cloud-init
:按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 12 「安裝
cloud-init
來處理佈建」。交換組態:
- 請勿在作業系統磁碟上建立交換空間。
- 按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 13 「交換組態」。
如果您要取消註冊訂用帳戶,請執行下列命令:
sudo subscription-manager unregister
按照「從 Hyper-V 管理員準備 RHEL 7 VM」中的步驟 15 「取消佈建」來取消佈建。
關閉 VM,並將 VMDK 檔案轉換成 VHD 格式。
注意
qemu-img 版本 >=2.2.1 中已知的錯誤 (bug) 會導致 VHD 的格式不正確。 此問題已在 QEMU 2.6 中修正。 建議您使用 qemu-img 2.2.0 或更舊版本,或更新至 2.6 或更新版本。 如需詳細資訊,請參閱此網站。
先將映像轉換成原始格式:
sudo qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw
確認原始映像的大小符合 1 MB, 否則將大小四捨五入為 1 MB︰
MB=$((1024*1024)) size=$(qemu-img info -f raw --output json "rhel-7.4.raw" | \ gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}') rounded_size=$((($size/$MB + 1)*$MB)) sudo qemu-img resize rhel-7.4.raw $rounded_size
將原始磁碟轉換成固定大小的 VHD:
sudo qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd
或者,使用 qemu 版本 2.6+,包含
force_size
選項:sudo qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd
啟動檔案
本節說明如何使用 kickstart 檔案從 ISO 準備 RHEL 7 發行版本。
從啟動檔案的 RHEL 7
建立包含以下內容的 kickstart 檔案,然後儲存此檔案。 如需有關 kickstart 安裝的資訊,請參閱 Kickstart 安裝指南。
# Kickstart for provisioning a RHEL 7 Azure VM # System authorization information auth --enableshadow --passalgo=sha512 # Use graphical install text # Don't run the Setup Agent on first boot firstboot --disable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp # Root password rootpw --plaintext "to_be_disabled" # System services services --enabled="sshd,waagent,NetworkManager" # System timezone timezone Etc/UTC --isUtc --ntpservers 0.rhel.pool.ntp.org,1.rhel.pool.ntp.org,2.rhel.pool.ntp.org,3.rhel.pool.ntp.org # Partition clearing information clearpart --all --initlabel # Clear the MBR zerombr # Disk partitioning information part /boot --fstype="xfs" --size=500 part / --fstyp="xfs" --size=1 --grow --asprimary # System bootloader configuration bootloader --location=mbr # Firewall configuration firewall --disabled # Enable SELinux selinux --enforcing # Don't configure X skipx # Power down the machine after install poweroff %packages @base @console-internet chrony sudo parted -dracut-config-rescue %end %post --log=/var/log/anaconda/post-install.log #!/bin/bash # Register Red Hat Subscription subscription-manager register --username=XXX --password=XXX --auto-attach --force # Install latest repo update yum update -y # Enable extras repo subscription-manager repos --enable=rhel-7-server-extras-rpms # Install WALinuxAgent yum install -y WALinuxAgent # Unregister Red Hat subscription subscription-manager unregister # Enable waaagent at boot-up systemctl enable waagent # Install cloud-init yum install -y cloud-init cloud-utils-growpart gdisk hyperv-daemons # Configure waagent for cloud-init sed -i 's/Provisioning.Agent=auto/Provisioning.Agent=cloud-init/g' /etc/waagent.conf sed -i 's/ResourceDisk.Format=y/ResourceDisk.Format=n/g' /etc/waagent.conf sed -i 's/ResourceDisk.EnableSwap=y/ResourceDisk.EnableSwap=n/g' /etc/waagent.conf echo "Adding mounts and disk_setup to init stage" sed -i '/ - mounts/d' /etc/cloud/cloud.cfg sed -i '/ - disk_setup/d' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - mounts' /etc/cloud/cloud.cfg sed -i '/cloud_init_modules/a\\ - disk_setup' /etc/cloud/cloud.cfg # Disable the root account usermod root -p '!!' # Configure swap using cloud-init 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"] - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.device-timeout=2,x-systemd.requires=cloud-init.service", "0", "0"] EOF # Set the cmdline sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0"/g' /etc/default/grub # Enable SSH keepalive sed -i 's/^#\(ClientAliveInterval\).*$/\1 180/g' /etc/ssh/sshd_config # Build the grub cfg grub2-mkconfig -o /boot/grub2/grub.cfg # Configure network cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp TYPE=Ethernet USERCTL=no PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes NM_CONTROLLED=yes EOF sudo cat <<EOF>> /etc/udev/rules.d/68-azure-sriov-nm-unmanaged.rules # Accelerated Networking on Azure exposes a new SRIOV interface to the VM. # This interface is transparentlybonded to the synthetic interface, # so NetworkManager should just ignore any SRIOV interfaces. SUBSYSTEM=="net", DRIVERS=="hv_pci", ACTION!="remove", ENV{NM_UNMANAGED}="1" EOF # Deprovision and prepare for Azure if you are creating a generalized image sudo cloud-init clean --logs --seed sudo rm -rf /var/lib/cloud/ sudo rm -rf /var/lib/waagent/ sudo rm -f /var/log/waagent.log sudo waagent -force -deprovision+user rm -f ~/.bash_history export HISTSIZE=0 %end
將 kickstart 檔案放在可存取它的安裝系統。
在 Hyper-V 管理員中建立新的 VM。 在 [連接虛擬硬碟] 頁面上,選取 [稍後連結虛擬硬碟],並完成 [新增虛擬機器精靈]。
開啟 VM 設定:
將新的 VHD 連結至 VM。 請務必選取 [VHD 格式] 和 [固定大小]。
將安裝 ISO 連接到 DVD 光碟機。
將 BIOS 設定成從 CD 開機。
啟動 VM。 當安裝指南出現時,請選取 Tab 鍵以設定開機選項。
在開機選項結尾輸入
inst.ks=<the location of the kickstart file>
,然後選取 Enter 鍵。等待安裝完成。 完成後,VM 會自動關閉。 您現在可以將 Linux VHD 上傳至 Azure。
已知問題
已知下列問題。
使用非 Hyper-V Hypervisor 時,初始 RAM 磁碟未包含 Hyper-V 驅動程式
在某些情況下,Linux 安裝程式可能不會在初始 RAM 磁碟 (initrd 或 initramfs) 中包含 Hyper-V 的驅動程式,除非 Linux 偵測到自己在 Hyper-V 環境中執行。
使用不同的虛擬化系統 (例如 VirtualBox 或 Xen) 來準備 Linux 映像時,您可能需要重建 initrd,以確保在初始 RAM 磁碟上至少有 hv_vmbus
和 hv_storvsc
核心模組可以使用。 在以上游 Red Hat 發行版本為基礎的系統上已知有此問題。
若要解決這個問題,請將 Hyper-V 模組新增至 initramfs 並加以重建︰
編輯 /etc/dracut.conf
檔案並新增下列內容:
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
重建 initramfs:
sudo dracut -f -v
如需詳細資訊,請參閱重建 initramfs。
相關內容
- 您現在可以開始使用您的 RHEL VHD 在 Azure 中建立新的 VM。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM。
- 如需已通過認證可執行 RHEL 之 Hypervisor 的詳細資訊,請參閱 Red Hat 網站。
- 若要深入了解如何使用生產環境就緒的 RHEL BYOS 映像,請移至自備訂用帳戶的文件頁面。