为 Azure 准备基于 Red Hat 的虚拟机

从 Hyper-V 管理器准备基于 Red Hat 的虚拟机

先决条件

本部分假定你已经从 Red Hat 网站获取 ISO 文件并将 RHEL 映像安装到虚拟硬盘 (VHD)。 有关如何使用 Hyper-V 管理器来安装操作系统映像的更多详细信息,请参阅安装 Hyper-V 角色和配置虚拟机

RHEL 安装说明

  • Azure 不支持 VHDX 格式。 Azure 仅支持固定 VHD。 可使用 Hyper-V 管理器将磁盘转换为 VHD 格式,也可以使用 convert-vhd cmdlet。 如果使用 VirtualBox,则选择“固定大小”,而不是在创建磁盘时默认动态分配选项。
  • Azure 仅支持第 1 代虚拟机。 可以将第 1 代虚拟机从 VHDX 转换为 VHD 文件格式,从动态扩展磁盘转换为固定大小磁盘。 但无法更改虚拟机的代次。 有关详细信息,请参阅是否应在 Hyper-V 中创建第 1 代或第 2 代虚拟机?
  • VHD 允许的最大大小为 1,023 GB。
  • 在安装 Linux 操作系统时,建议使用标准分区而不是逻辑卷管理器 (LVM)(通常是许多安装的默认设置)。 这种做法可以避免 LVM 名称与克隆的虚拟机冲突,尤其是当需要将操作系统磁盘附加到另一台相同的虚拟机进行故障排除时。 LVMRAID 可以在数据磁盘上使用。
  • 需要装载通用磁盘格式 (UDF) 文件系统的内核支持。 在 Azure 上首次启动时,附加到来宾的 UDF 格式媒体会将预配配置传递到 Linux 虚拟机。 Azure Linux 代理必须能够装载 UDF 文件系统才能读取其配置和预配虚拟机。
  • 早于 2.6.37 的 Linux 内核版本不支持虚拟机比较大的 Hyper-V 上的非一致性内存访问 (NUMA)。 此问题主要影响使用上游 Red Hat 2.6.32 内核的旧分发版,在 RHEL 6.6 (kernel-2.6.32-504) 中已得到解决。 运行版本低于 2.6.37 的自定义内核的系统或者版本低于 2.6.32-504 的基于 RHEL 的内核必须在 grub.conf 中的内核命令行上设置启动参数 numa=off。 有关详细信息,请参阅 Red Hat KB 436883
  • 不要在操作系统磁盘上配置交换分区。 可以配置 Linux 代理,并在临时资源磁盘上创建交换文件。 可以在以下步骤中找到有关此内容的详细信息。
  • 所有 VHD 的大小必须是 1 MB 的倍数。

从 Hyper-V 管理器准备 RHEL 6 虚拟机

  1. 在 Hyper-V 管理器中,选择虚拟机。

  2. 单击“连接”打开该虚拟机的控制台窗口。

  3. 在 RHEL 6 中,NetworkManager 可能会干扰 Azure Linux 代理。 运行以下命令卸载此包:

    复制
     # 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 中克隆虚拟机时,这些规则会引发问题:

    复制
     # 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. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
     # subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  10. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 若要执行此修改,请在文本编辑器中打开 /boot/grub/menu.lst,并确保默认内核包含以下参数:

    复制
    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

    这还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。

    除此之外,建议删除以下参数:

    复制
    rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多。 在遇到较小的虚拟机大小时,此配置可能会有问题。

    Important

    RHEL 6.5 和更早版本还必须设置 numa=off 内核参数。 请参阅 Red Hat KB 436883

  11. 请确保安全外壳 (SSH) 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改 /etc/ssh/sshd_config 以包含以下行:

    复制
    ClientAliveInterval 180
    
  12. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # sudo yum install WALinuxAgent
    
    # sudo chkconfig waagent on
    

    如果步骤 3 中没有删除 NetworkManager 包和 NetworkManager-gnome 包,则安装 WALinuxAgent 包将删除它们。

  13. 不要在操作系统磁盘上创建交换空间。

    Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,可能在取消预配虚拟机后被清空。 在上一步中安装 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.
    
  14. 通过运行以下命令取消注册订阅(如有必要):

    复制
    # sudo subscription-manager unregister
    
  15. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # sudo waagent -force -deprovision
    
    # export HISTSIZE=0
    
    # logout
    
  16. 在 Hyper-V 管理器中单击“操作” > “关闭”。 现在,准备将 Linux VHD 上传到 Azure。

从 Hyper-V 管理器准备 RHEL 7 虚拟机

  1. 在 Hyper-V 管理器中,选择虚拟机。

  2. 单击“连接” 以打开该虚拟机的控制台窗口。

  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
     NM_CONTROLLED=no
    
  5. 通过运行以下命令,确保网络服务会在引导时启动:

    复制
     # sudo chkconfig network on
    
  6. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 若要执行此修改,请在文本编辑器中打开 /etc/default/grub 并编辑 GRUB_CMDLINE_LINUX 参数。 例如:

    复制
     GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    这还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 此配置还会关闭 NIC 的新 RHEL 7 命名约定。 除此之外,建议删除以下参数:

    复制
     rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多,遇到较小的虚拟机大小时,此配置可能会有问题。

  8. 完成 /etc/default/grub 编辑后,运行以下命令以重新生成 grub 配置:

    复制
     # sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  9. 请确保 SSH 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改 /etc/ssh/sshd_config 以包含以下行:

    复制
     ClientAliveInterval 180
    
  10. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  11. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # sudo yum install WALinuxAgent
    
    # sudo systemctl enable waagent.service
    
  12. 不要在操作系统磁盘上创建交换空间。

    Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消预配虚拟机时被清空。 在上一步中安装 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.
    
  13. 如果想要取消注册订阅,运行以下命令:

    复制
    # sudo subscription-manager unregister
    
  14. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # sudo waagent -force -deprovision+user
    
    # export HISTSIZE=0
    
    # logout
    
  15. 在 Hyper-V 管理器中单击“操作” > “关闭”。 现在,准备将 Linux VHD 上传到 Azure。

从 KVM 准备基于 Red Hat 的虚拟机

从 KVM 准备 RHEL 6 虚拟机

  1. 从 Red Hat 网站上下载 RHEL 6 的 KVM 映像。

  2. 设置 root 密码。

    生成加密密码,并复制命令的输出:

    复制
     # openssl passwd -1 changeme
    

    使用 guestfish 设置 root 密码:

    复制
     # guestfish --rw -a <image-name>
     > <fs> run
     > <fs> list-filesystems
     > <fs> mount /dev/sda1 /
     > <fs> vi /etc/shadow
     > <fs> exit
    

    将 root 用户的第二个字段从“!!”更改 为加密密码。

  3. 在 KVM 中通过 qcow2 映像创建虚拟机。 将磁盘类型设置为 qcow2,将虚拟网络接口设备型号设置为 virtio。 然后启动虚拟机,并以 root 身份登录。

  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 中克隆虚拟机时,这些规则会引发问题:

    复制
     # 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. 通过运行以下命令,确保网络服务会在引导时启动:

    复制
     # chkconfig network on
    
  8. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # subscription-manager register --auto-attach --username=XXX --password=XXX
    
  9. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 若要执行此配置,请在文本编辑器中打开 /boot/grub/menu.lst,并确保默认内核包含以下参数:

    复制
     console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    

    这还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。

    除此之外,建议删除以下参数:

    复制
     rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多,遇到较小的虚拟机大小时,此配置可能会有问题。

    Important

    RHEL 6.5 和更早版本还必须设置 numa=off 内核参数。 请参阅 Red Hat KB 436883

  10. 将 Hyper-V 模块添加到 initramfs 中:

    编辑 /etc/dracut.conf 并添加以下内容:

    复制
    add_drivers+="hv_vmbus hv_netvsc hv_storvsc"
    

    重新生成 initramfs:

    复制
    # dracut -f -v
    
  11. 卸载 cloud-init:

    复制
    # yum remove cloud-init
    
  12. 确保已安装 SSH 服务器且已将其配置为在引导时启动。

    复制
    # chkconfig sshd on
    

    修改 /etc/ssh/sshd_config 以包含以下行:

    复制
    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
    # subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  14. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # yum install WALinuxAgent
    
    # chkconfig waagent on
    
  15. Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消预配虚拟机时被清空。 在上一步中安装 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.
    
  16. 通过运行以下命令取消注册订阅(如有必要):

    复制
    # subscription-manager unregister
    
  17. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # waagent -force -deprovision+user
    
    # export HISTSIZE=0
    
    # logout
    
  18. 关闭 KVM 中的虚拟机。

  19. 将 qcow2 映像转换为 VHD 格式。

备注

qemu-img 版本(>=2.2.1)中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 参考:https://bugs.launchpad.net/qemu/+bug/1490611。

复制
First convert the image to raw format:

    # qemu-img convert -f qcow2 -O raw rhel-6.9.qcow2 rhel-6.9.raw

Make sure that the size of the raw image is aligned with 1 MB. Otherwise, round up the size to align with 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))
    # qemu-img resize rhel-6.9.raw $rounded_size

Convert the raw disk to a fixed-sized VHD:

    # qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd

Or, with qemu version **2.6+** include the `force_size` option:

    # qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd

从 KVM 准备 RHEL 7 虚拟机

  1. 从 Red Hat 网站上下载 RHEL 7 的 KVM 映像。 此过程以 RHEL 7 为例。

  2. 设置 root 密码。

    生成加密密码,并复制命令的输出:

    复制
     # openssl passwd -1 changeme
    

    使用 guestfish 设置 root 密码:

    复制
     # guestfish --rw -a <image-name>
     > <fs> run
     > <fs> list-filesystems
     > <fs> mount /dev/sda1 /
     > <fs> vi /etc/shadow
     > <fs> exit
    

    将 root 用户的第二个字段从“!!”更改 为加密密码。

  3. 在 KVM 中通过 qcow2 映像创建虚拟机。 将磁盘类型设置为 qcow2,将虚拟网络接口设备型号设置为 virtio。 然后启动虚拟机,并以 root 身份登录。

  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
     NM_CONTROLLED=no
    
  6. 通过运行以下命令,确保网络服务会在引导时启动:

    复制
     # chkconfig network on
    
  7. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # subscription-manager register --auto-attach --username=XXX --password=XXX
    
  8. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 若要执行此配置,请在文本编辑器中打开 /etc/default/grub 并编辑 GRUB_CMDLINE_LINUX 参数。 例如:

    复制
     GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    此命令还会确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 此命令还会关闭 NIC 的新 RHEL 7 命名约定。 除此之外,建议删除以下参数:

    复制
     rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多,遇到较小的虚拟机大小时,此配置可能会有问题。

  9. 完成 /etc/default/grub 编辑后,运行以下命令以重新生成 grub 配置:

    复制
     # grub2-mkconfig -o /boot/grub2/grub.cfg
    
  10. 将 Hyper-V 模块添加到 initramfs 中。

    编辑 /etc/dracut.conf 并添加以下内容:

    复制
    add_drivers+="hv_vmbus hv_netvsc hv_storvsc"
    

    重新生成 initramfs:

    复制
    # dracut -f -v
    
  11. 卸载 cloud-init:

    复制
    # yum remove cloud-init
    
  12. 确保已安装 SSH 服务器且已将其配置为在引导时启动。

    复制
    # systemctl enable sshd
    

    修改 /etc/ssh/sshd_config 以包含以下行:

    复制
    PasswordAuthentication yes
    ClientAliveInterval 180
    
  13. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  14. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # yum install WALinuxAgent
    

    启用 waagent 服务:

    复制
    # systemctl enable waagent.service
    
  15. 不要在操作系统磁盘上创建交换空间。

    Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消预配虚拟机时被清空。 在上一步中安装 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.
    
  16. 通过运行以下命令取消注册订阅(如有必要):

    复制
    # subscription-manager unregister
    
  17. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # sudo waagent -force -deprovision+user
    
    # export HISTSIZE=0
    
    # logout
    
  18. 关闭 KVM 中的虚拟机。

  19. 将 qcow2 映像转换为 VHD 格式。

备注

qemu-img 版本(>=2.2.1)中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 参考:https://bugs.launchpad.net/qemu/+bug/1490611。

复制
First convert the image to raw format:

    # qemu-img convert -f qcow2 -O raw rhel-7.4.qcow2 rhel-7.4.raw

Make sure that the size of the raw image is aligned with 1 MB. Otherwise, round up the size to align with 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))
    # qemu-img resize rhel-7.4.raw $rounded_size

Convert the raw disk to a fixed-sized VHD:

    # qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd

Or, with qemu version **2.6+** include the `force_size` option:

    # qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd

从 VMware 准备基于 Red Hat 的虚拟机

先决条件

本部分假设已在 VMware 中安装了 RHEL 虚拟机。 有关如何在 VMware 中安装操作系统的详细信息,请参阅 VMware 来宾操作系统安装指南

  • 在安装 Linux 操作系统时,建议使用标准分区而不是 LVM,这通常是许多安装的默认设置。 这种做法可以避免 LVM 名称与克隆的虚拟机名称冲突,尤其是在需要将操作系统磁盘附加到另一台虚拟机进行故障排除时。 如果需要,可以在数据磁盘上使用 LVM 或 RAID。
  • 不要在操作系统磁盘上配置交换分区。 可将 Linux 代理配置为在临时资源磁盘上创建交换文件。 可以在下面的步骤中找到有关此操作的详细信息。
  • 创建虚拟硬盘时,选择“将虚拟磁盘存储为单个文件”。

从 VMware 准备 RHEL 6 虚拟机

  1. 在 RHEL 6 中,NetworkManager 可能会干扰 Azure Linux 代理。 请运行以下命令来卸载该包:

    复制
     # sudo rpm -e --nodeps NetworkManager
    
  2. 在包含以下文本的 /etc/sysconfig/ 目录中创建一个名为 network 的文件:

    复制
     NETWORKING=yes
     HOSTNAME=localhost.localdomain
    
  3. 创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件并添加以下文本:

    复制
     DEVICE=eth0
     ONBOOT=yes
     BOOTPROTO=dhcp
     TYPE=Ethernet
     USERCTL=no
     PEERDNS=yes
     IPV6INIT=no
    
  4. 移动(或删除)udev 规则,以避免产生以太网接口的静态规则。 在 Azure 或 Hyper-V 中克隆虚拟机时,这些规则会引发问题:

    复制
     # 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
    
  5. 通过运行以下命令,确保网络服务会在引导时启动:

    复制
     # sudo chkconfig network on
    
  6. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  7. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
     # subscription-manager repos --enable=rhel-6-server-extras-rpms
    
  8. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 为此,请在文本编辑器中打开 /etc/default/grub 并编辑 GRUB_CMDLINE_LINUX 参数。 例如:

    复制
     GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0"
    

    这还可确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 除此之外,建议删除以下参数:

    复制
     rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多,遇到较小的虚拟机大小时,此配置可能会有问题。

  9. 将 Hyper-V 模块添加到 initramfs 中:

    编辑 /etc/dracut.conf 并添加以下内容:

    复制
     add_drivers+="hv_vmbus hv_netvsc hv_storvsc"
    

    重新生成 initramfs:

    复制
     # dracut -f -v
    
  10. 请确保 SSH 服务器已安装且已配置为在引导时启动(默认采用此配置)。 修改 /etc/ssh/sshd_config 以包含以下行:

    复制
    ClientAliveInterval 180
    
  11. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # sudo yum install WALinuxAgent
    
    # sudo chkconfig waagent on
    
  12. 不要在操作系统磁盘上创建交换空间。

    Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消预配虚拟机时被清空。 在上一步中安装 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.
    
  13. 通过运行以下命令取消注册订阅(如有必要):

    复制
    # sudo subscription-manager unregister
    
  14. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # sudo waagent -force -deprovision+user
    
    # export HISTSIZE=0
    
    # logout
    
  15. 关闭虚拟机,并将 VMDK 文件转换为 .vhd 文件。

备注

qemu-img 版本(>=2.2.1)中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 参考:https://bugs.launchpad.net/qemu/+bug/1490611。

复制
First convert the image to raw format:

    # qemu-img convert -f vmdk -O raw rhel-6.9.vmdk rhel-6.9.raw

Make sure that the size of the raw image is aligned with 1 MB. Otherwise, round up the size to align with 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))
    # qemu-img resize rhel-6.9.raw $rounded_size

Convert the raw disk to a fixed-sized VHD:

    # qemu-img convert -f raw -o subformat=fixed -O vpc rhel-6.9.raw rhel-6.9.vhd

Or, with qemu version **2.6+** include the `force_size` option:

    # qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-6.9.raw rhel-6.9.vhd

从 VMware 准备 RHEL 7 虚拟机

  1. 创建或编辑 /etc/sysconfig/network 文件并添加以下文本:

    复制
     NETWORKING=yes
     HOSTNAME=localhost.localdomain
    
  2. 创建或编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件并添加以下文本:

    复制
     DEVICE=eth0
     ONBOOT=yes
     BOOTPROTO=dhcp
     TYPE=Ethernet
     USERCTL=no
     PEERDNS=yes
     IPV6INIT=no
     NM_CONTROLLED=no
    
  3. 通过运行以下命令,确保网络服务会在引导时启动:

    复制
     # sudo chkconfig network on
    
  4. 注册 Red Hat 订阅,以通过运行以下命令来启用来自 RHEL 存储库中的包的安装:

    复制
     # sudo subscription-manager register --auto-attach --username=XXX --password=XXX
    
  5. 在 grub 配置中修改内核引导行,使其包含 Azure 的其他内核参数。 若要执行此修改,请在文本编辑器中打开 /etc/default/grub 并编辑 GRUB_CMDLINE_LINUX 参数。 例如:

    复制
     GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
    

    此配置还会确保所有控制台消息都发送到第一个串行端口,从而可以协助 Azure 支持人员调试问题。 此外,还会关闭 NIC 的新 RHEL 7 命名约定。 除此之外,建议删除以下参数:

    复制
     rhgb quiet crashkernel=auto
    

    图形引导和无人参与引导不适用于云环境,在该环境中我们想要将所有日志都发送到串行端口。 如果需要,可以保留配置的 crashkernel 选项。 请注意,此参数可以将虚拟机中的可用内存量减少 128 MB 或更多,遇到较小的虚拟机大小时,此配置可能会有问题。

  6. 完成 /etc/default/grub 编辑后,运行以下命令以重新生成 grub 配置:

    复制
     # sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  7. 将 Hyper-V 模块添加到 initramfs 中。

    编辑 /etc/dracut.conf,添加内容:

    复制
     add_drivers+="hv_vmbus hv_netvsc hv_storvsc"
    

    重新生成 initramfs:

    复制
     # dracut -f -v
    
  8. 请确保已安装 SSH 服务器且将其配置为在引导时启动。 此设置通常是默认设置。 修改 /etc/ssh/sshd_config 以包含以下行:

    复制
     ClientAliveInterval 180
    
  9. WALinuxAgent 包 WALinuxAgent-<version> 已推送到 Red Hat extras 存储库。 通过运行以下命令启用 extras 存储库:

    复制
     # subscription-manager repos --enable=rhel-7-server-extras-rpms
    
  10. 通过运行以下命令来安装 Azure Linux 代理:

    复制
    # sudo yum install WALinuxAgent
    
    # sudo systemctl enable waagent.service
    
  11. 不要在操作系统磁盘上创建交换空间。

    Azure Linux 代理可使用在 Azure 上预配虚拟机后附加到虚拟机的本地资源磁盘自动配置交换空间。 请注意,本地资源磁盘是临时磁盘,并可能在取消预配虚拟机时被清空。 在上一步中安装 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.
    
  12. 如果想要取消注册订阅,运行以下命令:

    复制
    # sudo subscription-manager unregister
    
  13. 运行以下命令可取消对虚拟机的预配并且对其进行准备以便在 Azure 上进行预配:

    复制
    # sudo waagent -force -deprovision+user
    
    # export HISTSIZE=0
    
    # logout
    
  14. 关闭虚拟机,将 VMDK 文件转换为 VHD 格式。

备注

qemu-img 版本(>=2.2.1)中有一个已知 bug,会导致 VHD 格式不正确。 QEMU 2.6 中已修复此问题。 建议使用 qemu-img 2.2.0 或更低版本,或者更新到 2.6 或更高版本。 参考:https://bugs.launchpad.net/qemu/+bug/1490611。

复制
First convert the image to raw format:

    # qemu-img convert -f vmdk -O raw rhel-7.4.vmdk rhel-7.4.raw

Make sure that the size of the raw image is aligned with 1 MB. Otherwise, round up the size to align with 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))
    # qemu-img resize rhel-7.4.raw $rounded_size

Convert the raw disk to a fixed-sized VHD:

    # qemu-img convert -f raw -o subformat=fixed -O vpc rhel-7.4.raw rhel-7.4.vhd

Or, with qemu version **2.6+** include the `force_size` option:

    # qemu-img convert -f raw -o subformat=fixed,force_size -O vpc rhel-7.4.raw rhel-7.4.vhd

使用 kickstart 文件自动从 ISO 准备基于 Red Hat 的虚拟机

从 kickstart 文件准备 RHEL 7 虚拟机

  1. 创建包括以下内容的 kickstart 文件,并保存该文件。 有关 kickstart 安装的详细信息,请参阅 Kickstart 安装指南

    复制
    # Kickstart for provisioning a RHEL 7 Azure VM
    
    # System authorization information
      auth --enableshadow --passalgo=sha512
    
    # Use graphical install
    text
    
    # Do not 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
    
    # Disable the root account
    usermod root -p '!!'
    
    # Configure swap in WALinuxAgent
    sed -i 's/^\(ResourceDisk\.EnableSwap\)=[Nn]$/\1=y/g' /etc/waagent.conf
    sed -i 's/^\(ResourceDisk\.SwapSizeMB\)=[0-9]*$/\1=2048/g' /etc/waagent.conf
    
    # Set the cmdline
    sed -i 's/^\(GRUB_CMDLINE_LINUX\)=".*"$/\1="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"/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
    NM_CONTROLLED=no
    EOF
    
    # Deprovision and prepare for Azure
    waagent -force -deprovision+user
    
    %end
    
  2. 将 kickstart 文件放在安装系统可以访问的位置。

  3. 在 Hyper-V 管理器中,创建新的虚拟机。 在“连接虚拟硬盘”页上,选择“稍后附加虚拟硬盘”,并完成新建虚拟机向导。

  4. 打开虚拟机设置:

    a. 将新的虚拟硬盘附加到虚拟机。 请务必选择“VHD 格式”和“固定大小”。

    b. 将安装 ISO 附加到 DVD 光驱。

    c. 将 BIOS 设置为从 CD 启动。

  5. 启动虚拟机。 当安装指南出现时,请按 Tab 键来配置启动选项。

  6. 在启动选项的末尾输入 inst.ks=<the location of the kickstart file> ,并按 Enter键。

  7. 等待安装完成。 完成后,虚拟机会自动关闭。 Linux VHD 现已准备好上传到 Azure。

已知问题

使用非 Hyper-V 虚拟机监控程序时,初始 RAM 磁盘未包含 Hyper-V 驱动程序

在某些情况下,Linux 安装程序可能无法在初始 RAM 磁盘(initrd 或 initramfs)中包含 Hyper-V 驱动程序,除非 Linux 检测到它正在 Hyper-V 环境中运行。

使用不同虚拟化系统(即 Virtualbox、Xen 等)来准备 Linux 映像时,可能需要重新生成 initrd 以确保至少 hv_vmbus 和 hv_storvsc 内核模块可在初始 RAM 磁盘上使用。 至少在基于上游 Red Hat 分发的系统上这是一个已知问题。

要解决此问题,请将 Hyper-V 模块添加到 initramfs 并进行重新生成:

编辑 /etc/dracut.conf 并添加以下内容:

复制
    add_drivers+="hv_vmbus hv_netvsc hv_storvsc"

重新生成 initramfs:

复制
    # dracut -f -v

有关详细信息,请参阅有关 重新生成 initramfs的信息。

后续步骤

现在,可以使用 Red Hat Enterprise Linux 虚拟硬盘在 Azure 中创建新的虚拟机。 如果这是第一次将 .vhd 文件上传到 Azure,请参阅创建和上传包含 Linux 操作系统的虚拟硬盘中的步骤 2 和步骤 3。

有关已通过认证可运行 Red Hat Enterprise Linux 的虚拟机监控程序的更多详细信息,请参阅 Red Hat 网站

azure 创建redhat镜像帮助的更多相关文章

  1. Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  2. 使用Windows Azure创建Linux系统虚拟机-上

    创建虚拟机来运行Linux 当您在Azure管理门户中使用映像图库时,创建运行Linux的虚拟机很容易.本指南告诉您如何做到这一点,假设你没有使用过Azure. 注意: 即使你不需要使用过Azure虚 ...

  3. 如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程

    对于经常鼓捣电脑的童鞋来说,装系统是一件极其平常的事情,不过系统装多了之后,我们会感到比较烦躁,因为每一次装系统意味着驱动的重新安装,程序的重新安装,每次这么鼓捣几次,半天时间就花在这上面了,效率是在 ...

  4. 基于Dockerfile创建docker镜像

    0.先创建一个文件夹img mkdir img 1.Linux上新建3个文件 2.文件内容分别写入 (1)Dockerfile中 # 基于的基础镜像centos FROM centos # 维护该镜像 ...

  5. Mycat 镜像-创建 Docker 镜像

    将 Mycat-server 创建到镜像,使其能够进行容器化部署,我们需要创建 Dockerfile 并在文件中安装其依赖项,使用 centos 做为 base 镜像,并安装 jdk 依赖即可,因此创 ...

  6. 标记,上传并下载自己创建的镜像 image

    1. 首先使用 docker images 查看已有镜像: 2. 获得 docker-whale 的 IMAGE ID,然后为 docker-whale 镜像 image 打上标签 Tag.使用命令: ...

  7. docker创建nginx镜像

    注意:此处不是用的dockerfile创建的镜像,只是用来搞一搞 首先你的系统里面要安装docker,这里就不重复介绍了,可以看之前的文章: 然后再搞一个基础镜像 docker pull regist ...

  8. 利用war包和Tomcat镜像创建Web镜像

      from hub.c.163.com/library/tomcat:tag #代表以tomcat镜像为基础 MAINTAINER huhuixin 18611551449@163.com #代表所 ...

  9. 创建Spark镜像文件

    创建Spark镜像文件 1.将spark容器提交到新的镜像中 $>docker commit 01a25bdf1499 myrepos:centos-spark 2.将centos-spark镜 ...

随机推荐

  1. vijos1842(火柴排队)

    描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi) ...

  2. JavaScript-Tool:jquery.qrcode.js

    ylbtech-JavaScript-Tool:jquery.qrcode.js 1.返回顶部 1. 插件描述:jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jqu ...

  3. mysql数据库备份bat脚本

    @ECHO off TITLE databaseBackup E: REM : 源数据库: IP 端口 用户名 密码 SET DB_HOST=192.168.1.1 SET DB_PORT=3306 ...

  4. Httpclient: 多层翻页网络爬虫实战(以搜房网为例)

    参考:http://blog.csdn.net/qy20115549/article/details/52912532 一.创建数据表 #创建表:用来存储url地址信息 create table so ...

  5. Bootstrap表格分页(二)

    本文使用Bootstrap-table来对表格进行分页,关于Bootstrap-table以及下载插件包请点击官网:http://bootstrap-table.wenzhixin.net.cn 首先 ...

  6. jQuery 字母大小写转换

    "ABC".toLowerCase()//转小写 "abc".toUpperCase()//转大写

  7. E20190308-hm

    sweep vt. 扫除; 打扫,清理; 彻底搜索; 掠过; vi. 打扫; 扫过; 蜿蜒; 大范围伸展; n. 打扫; 延伸; 挥动; 全胜;

  8. [Xcode 实际操作]一、博主领进门-(10)Xcode右侧界面介绍

    目录:[Swift]Xcode实际操作 本文将演示Xcode右侧界面介绍. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 右上角第三个[辅助编辑器]按钮,将代码切 ...

  9. 网络工程师HCNA认证学习笔记Day1

    企业网络 企业网络远程互联是广域网WAN互联,而非互联网Internet小型企业网络:一个路由器.交换机.AP大型企业网络:核心层.汇聚层.接入层.考虑可用性.稳定性.扩展性.安全性.可管理,冗余. ...

  10. E. XOR and Favorite Number (莫队板子题)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int read() { , ...