A nova suporta o boot do pxe?

2

Estou trabalhando em um projeto baseado no OpenStack. Agora precisamos de uma máquina virtual para inicializar a partir do PXE. Não consigo encontrar nenhum documento sobre isso. A nova suporta inicialização PXE? Se sim, como criar uma imagem KVM equivalente é equivalente a uma máquina nua que inicializaria a partir do PXE?

    
por TieDad 16.01.2013 / 02:02

4 respostas

2

Depois de mais investigação, descobri que as coisas não são tão difíceis. Nós só precisamos modificar o código nova para adicionar uma linha

<boot dev=network>

no arquivo xml do vm configure. Porque nova usa o libvirt, e o libvirt suporta boot do PXE já. De qualquer forma, obrigado pela ajuda de todos.

    
por 18.01.2013 / 02:53
4

Você pode instalar o ipxe em um disco e carregá-lo usando o syslinux (ou algum outro bootloader); Isso vai te dar algo que vai se comportar exatamente como um sistema inicializado através de um BIOS PXE. A distribuição do iPXE inclui ferramentas para criar uma imagem ISO inicializável, que você pode usar para inicializar sistemas no OpenStack, ou pode criar uma imagem do disco rígido com uma configuração muito semelhante.

  1. Crie uma imagem de disco:

    $ dd if=/dev/zero of=/tmp/boot.img bs=1M count=4
    
  2. Particione a imagem:

    $ fdisk /tmp/boot.img
    
  3. Você precisará definir o número de cilindros .

  4. Crie uma única partição com o tipo b e torne-a inicializável ( n para criar, a para alternar o sinalizador de inicialização).

  5. Conecte a imagem a um dispositivo de loopback.

    # losetup -fP /tmp/boot.img
    
  6. Crie um sistema de arquivos msdos.

    # mkdosfs -I /dev/loop0p1
    
  7. Monte o sistema de arquivos.

    # mount /dev/loop0p1 /mnt
    
  8. Instale o syslinux.

    # syslinux --install /dev/loop0p1
    
  9. Copie ipxe.krn para o dispositivo (de algum lugar ... ou você o criou sozinho ou copiou do ISO do ipxe).

  10. Crie uma configuração syslinux apropriada, algo como:

    DEFAULT ipxe
    LABEL ipxe
      KERNEL ipxe.krn
    

Teste-o inicializando-o em uma instância KVM local. Faça o upload para o openstack e inicialize com ele. Observe que neste exemplo criamos uma imagem de disco muito pequena (4M), mas você também pode criar uma imagem de disco grande e, em seguida, colocar uma pequena partição nela. Tudo depende do que você está tentando realizar.

    
por 16.01.2013 / 02:09
1

A estrutura circundante da nuvem precisa suportar a passagem dessas opções. Se você estiver usando o recurso de rede privada de instância, isso o restringirá, pois a configuração atual não permite a passagem de opções extras para o daemon dnsmasq, que fornece suporte a DHCP. Você teria que modificar o código-fonte do produto para fornecer uma interface para que as opções PXE fossem inseridas e o mecanismo apropriado de passar essas opções para o processo dnsmasq subjacente.

No entanto, se você estiver usando uma rede "plana" e fornecendo seu próprio serviço DHCP, então sim - uma imagem de inicialização apropriada com suporte ao PXE pode ser usada e você terá a inicialização PXE.

A empresa em que trabalho, Nimbula , usa o KVM e o DNSmasq da mesma forma que o NOVA. Pelo menos internamente, usamos gPXE para iniciar instâncias. A imagem do disco tem o carregador gPXE no início e o restante é um espaço esparso para o tamanho desejado do volume.

Quanto ao suporte uniforme ao boot do PXE, provavelmente eu vou colocar isso em nosso produto para o nosso próximo ciclo de lançamento menor, e é possível que ele seja portado para o NOVA algum tempo depois.

    
por 17.01.2013 / 23:47
0

Para adicionar a tag <boot dev=network> aos XMLs no IceHouse v.2014.1.5, tive que adicionar a linha:

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

Antes do código (fora do loop):

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

Na linha 1195 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/config.py (eu também tive que excluir o config.pyc no mesmo diretório e reiniciar o serviço nova)

    
por 07.12.2015 / 12:47