configurando o Ubuntu 10.10 como convidado paravirtualizado no Xen no host RHEL5 - qual kernel?

5

Eu descobri a ferramenta ubuntu-vm-builder , que eu instalei e invoquei em uma estação de trabalho Ubuntu como:

sudo vmbuilder xen ubuntu --suite maverick --flavour virtual --arch amd64 --mem=512 --rootsize 8192

Esta estação de trabalho não é o host de destino pretendido da máquina virtual, no entanto; Eu gostaria de hospedar o convidado em uma máquina Red Hat Enterprise Linux 5 que está executando o Xen 3.0.3.

A saída deste comando parece ser uma pasta chamada ubuntu-xen contendo três arquivos:

  • tmpXXXXXX , um arquivo muito grande que, presumo, é a imagem da partição raiz
  • tmpYYYYYY , um arquivo um pouco grande que eu suponho ser a imagem da partição swap
  • xen.conf , um arquivo de texto

Eu copiei o arquivo xen.conf para o diretório /etc/xen do servidor RHEL sob o novo nome newvm , ajustando os caminhos de tempXXXXXX e tempYYYYYY no arquivo depois de copiá-los da estação de trabalho local para o servidor RHEL. Quando eu inicio o Gerenciador de Máquina Virtual virt-manager , posso ver a máquina newvm virtual listada embaixo da máquina Dom0.

Quando tento iniciar o newvm , recebo o erro:

Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: None')

De fato, existe uma entrada kernel = 'None' no arquivo xen.conf . Como faço para descobrir qual deve ser o caminho do kernel? Este caminho deve ser para um kernel armazenado no sistema de arquivos local do host RHEL5, ou é suposto ser um caminho dentro da imagem do convidado?

Vejo que o comando vmbuilder fornece uma opção --xen-kernel , juntamente com uma opção --xen-ramdisk , mas não tenho certeza do que usar para nenhum dos dois.

Eu acho que eu deveria ser capaz de fazer isso funcionar, já que o Ubuntu é que diz ser suportado como convidado Xen, mesmo que o estado Xen 4.0.1 docs suporta apenas um conjunto limitado de distribuições, excluindo o Ubuntu.

Atualização 1

Ao executar vmbuilder em minha estação de trabalho local, observei uma linha de saída dizendo:

Calling hook: install_kernel

e mais tarde, linhas de saída dizendo:

update-initramfs: Generating /boot/initrd.img-2.6.35-23-virtual
[...]
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.35-23-virtual /boot/vmlinuz-2.6.35-23-virtual

Portanto, no arquivo xen.conf , tentei definir as linhas:

kernel = '/boot/vmlinuz-2.6.35-23-virtual'
ramdisk = '/boot/initrd.img-2.6.35-23-virtual'

Ao tentar iniciar a VM, recebi um erro semelhante à última vez:

Error starting domain: virDomainCreate() failed POST operation failed: (xend.err 'Error creating domain: Kernel image does not exist: /boot/vmlinuz-2.6.35-23-virtual')

Isso me faz pensar que a máquina RHEL5 está procurando arquivos locais, em vez de um arquivo dentro da imagem de disco do convidado binário.

Depois de executar sudo updatedb na minha estação de trabalho, nenhum desses arquivos foi encontrado. Se a ferramenta vmbuilder tivesse tentado instalá-los, ela deve ter falhado.

Atualização 2

Consegui extrair o kernel e as imagens initrd do disco binário do convidado montando-o:

mkdir mnt_tmp
sudo mount ubuntu-xen/tmpXXXXXX mnt_tmp/ -o loop
cp mnt_tmp/boot/vmlinuz-2.6.35-23-virtual virtual_kernel_ubuntu
cp mnt_tmp/boot/initrd.img-2.6.35-23-virtual virtual_initrd_ubuntu

Esses dois arquivos copiei para o servidor RHEL5 e editei o arquivo xen.conf para apontá-los como kernel e ramdisk .

Com isso concluído, eu poderia "executar" a máquina virtual newvm de dentro de virt-manager , mas recebi a mensagem

Console Not Configured For Guest

quando clico duas vezes na entrada para abrir o Virtual Machine Console. Como sugerido por um fórum, eu adicionei a linha

vfb = [ 'type=vnc' ]

para o arquivo de configuração, recriamos a máquina virtual (um processo de ~ 10 min), e desta vez recebemos a mensagem:

Connecting to console for guest

Isso permaneceu indefinidamente; depois de selecionar Visualizar - > Console Serial, encontrei um kernel panic:

[5442621.272173] Kernel panic - not syncing: Attempted to kill the idle task!
[5442621.272179] Pid: 0, comm: swapper Tainted: G      D     2.6.35-23-virtual #41-Ubuntu
[5442621.272184] Call Trace:
[5442621.272191]  [<ffffffff815a1b81>] panic+0x90/0x111
[5442621.272199]  [<ffffffff810652ee>] do_exit+0x3be/0x3f0
[5442621.272204]  [<ffffffff815a5e20>] oops_end+0xb0/0xf0
[5442621.272211]  [<ffffffff8100ddeb>] die+0x5b/0x90
[5442621.272216]  [<ffffffff815a56c4>] do_trap+0xc4/0x170
[5442621.272221]  [<ffffffff8100ba35>] do_invalid_op+0x95/0xb0
[5442621.272227]  [<ffffffff8130851c>] ? intel_idle+0xac/0x180
[5442621.272232]  [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1
[5442621.272239]  [<ffffffff815a48fe>] ? _raw_spin_unlock_irqrestore+0x1e/0x30
[5442621.272247]  [<ffffffff8108dfb7>] ? tick_broadcast_oneshot_control+0xc7/0x120
[5442621.272253]  [<ffffffff8100ad5b>] invalid_op+0x1b/0x20
[5442621.272259]  [<ffffffff8130851c>] ? intel_idle+0xac/0x180
[5442621.272264]  [<ffffffff813084e0>] ? intel_idle+0x70/0x180
[5442621.272269]  [<ffffffff810072bf>] ? xen_restore_fl_direct_end+0x0/0x1
[5442621.272275]  [<ffffffff8148a147>] cpuidle_idle_call+0xa7/0x140
[5442621.272281]  [<ffffffff81008d93>] cpu_idle+0xb3/0x110
[5442621.272286]  [<ffffffff815873aa>] rest_init+0x8a/0x90
[5442621.272291]  [<ffffffff81b04c9d>] start_kernel+0x387/0x390
[5442621.272297]  [<ffffffff81b04341>] x86_64_start_reservations+0x12c/0x130
[5442621.272303]  [<ffffffff81b08002>] xen_start_kernel+0x55d/0x561

Atualização 3

Eu tentei uma arquitetura i386 em vez de amd64 , mas recebi o mesmo kernel panic.

Além disso, parece que o Virtual Machine Manager presta atenção ao formato do nome do arquivo do kernel; para o mesmo binário do kernel, eu tentei simplesmente nomear vmlinuz-virtual , o que jogou fora uma caixa de erro sobre um kernel inválido. Quando eu o nomeei vmlinuz-2.6.35-23-virtual , ele não emitiu o erro, mas ainda assim resultou no pânico do kernel logo em seguida.

    
por kostmo 14.12.2010 / 22:33

3 respostas

1

Você pode querer olhar para o pacote xen-tools que, se você especificar --pygrub no comando xen-create-image , ele embutirá o kernel / initrd dentro da imagem de disco do convidado, o que pode facilitar a transferência de imagens convidadas entre os sistemas.

    
por 25.01.2011 / 16:14
1

você pode querer considerar a atualização de sua infraestrutura xen, o xen 3.x possui limitações para as quais os convidados suportam. Veja o seguinte link

Já experimentou uma versão mais antiga do Ubuntu?

    
por 29.11.2012 / 06:06
0

Você deve usar (ter usado?) os kernels linux-image-virtual fornecidos pelo Ubuntu, e um hypervisor Xen mais novo (possivelmente com pygrub ou similar).

Mas sua pergunta é antiga, hoje em dia você não usaria o Ubuntu-10.10 e nos mais novos você usa o mesmo kernel no Xen (hvm e paravirt) e no bare metal.

    
por 08.07.2013 / 20:03