新星是否支持pxe启动?

我正在开发一个基于OpenStack的项目。 现在我们需要一个虚拟机从PXE启动。 我找不到任何文件。 新星是否支持PXE启动? 如果是的话,我该如何创build一个相当于从PXE启动的裸机的KVM映像?

您可以将ipxe安装到磁盘上并使用syslinux(或其他引导加载程序)加载它。 这会给你带来与PXE BIOS启动系统完全相同的东西。 iPXE发行版包含用于构build可引导的ISO映像的工具,您可以使用这些工具在OpenStack中引导系统,也可以使用非常类似的设置构build硬盘映像。

  1. 创build一个磁盘映像:

    $ dd if=/dev/zero of=/tmp/boot.img bs=1M count=4 
  2. 分割图像:

     $ fdisk /tmp/boot.img 
  3. 您将需要设置气瓶的数量 。

  4. 用typesb创build单个分区,并使其可启动( n来创build, a来切换启动标志)。

  5. 将图像连接到回送设备。

     # losetup -fP /tmp/boot.img 
  6. 创build一个msdos文件系统。

     # mkdosfs -I /dev/loop0p1 
  7. 安装文件系统。

     # mount /dev/loop0p1 /mnt 
  8. 安装syslinux。

     # syslinux --install /dev/loop0p1 
  9. ipxe.krn复制到设备上(从某个地方…你自己构build它,或者你从ipxe ISO复制它)。

  10. 创build一个合适的syslinuxconfiguration,如下所示:

     DEFAULT ipxe LABEL ipxe KERNEL ipxe.krn 

通过在本地KVM实例上启动进行testing。 将其上传到openstack并使用它进行引导。 请注意,在这个例子中,我们创build了一个非常小的(4M)磁盘映像,但是您也可以创build一个大磁盘映像,然后在其上放一个小分区。 这一切都取决于你想要完成的。

经过更多的调查,我发现事情并不那么困难。 我们只需要修改nova代码来添加一行

 <boot dev=network> 

在vm中configurationxml文件。 因为nova使用libvirt,并且libvirt已经支持PXE引导。 无论如何,感谢大家的帮助。

云周围的框架需要支持通过这些选项。 如果您使用实例专用networkingfunction,则会限制您,因为当前设置不允许向提供DHCP支持的dnsmasq守护程序传递额外的选项。 您必须修改产品的源代码,以便为要input的PXE选项提供接口,并将这些选项传递给基础的dnsmasq进程。

但是,如果您使用“平面”networking并提供自己的DHCP服务,那么是的 – 可以使用支持PXE的适当引导映像,并且您将启动PXE。

我工作的公司Nimbula使用KVM和DNSmasq,就像NOVA一样。 至less在内部,我们使用gPXE来启动实例。 磁盘映像在启动时具有gPXE加载程序,其余部分对于所需大小的卷来说是稀疏的空间。

对于启动PXE的统一支持,我可能会在我们的下一个小版本发布周期中将其引入到我们的产品中,并且有可能在某些时候将其移植到NOVA。

要将<boot dev=network>标记添加到IceHouse v.2014.1.5中的XML中,我必须添加以下行:

  os.append(etree.Element("boot", dev='network')) 

在代码之前(for循环):

  for boot_dev in self.os_boot_dev: os.append(etree.Element("boot", dev=boot_dev)) 

第1195行左右n /usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py (我也必须在同一个目录中删除config.pyc并重新启动nova服务)