Com o CentOS 6 e o LXC, o “ifconfig” não consegue ver a interface de rede (mas o busybox “ifconfig” funciona bem)

3

Acabei de começar a trabalhar com o LXC no CentOS 6 (por meio do adaptador libvirt). Se eu criar um contêiner LXC, não será possível ver nenhuma interface de rede ao usar as ferramentas nativas do sistema:

# ifconfig -a
#

O comportamento é muito estranho; Especificar uma interface por nomes não gera nem a saída esperada nem uma mensagem de erro. Isso é verdade mesmo para nomes de interface claramente inválidos, como este:

# ifconfig foo
#

O comando ip exibe o mesmo comportamento.

Por outro lado, se eu usar o "ifconfig" fornecido pelo busybox , tudo funcionará como esperado:

# busybox ifconfig -a

eth0      Link encap:Ethernet  HWaddr 52:54:00:E0:12:C8  
          inet6 addr: fe80::5054:ff:fee0:12c8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:268 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:17814 (17.3 KiB)  TX bytes:552 (552.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Então ... o que o busybox sabe que as ferramentas nativas não sabem? A configuração do libvirt para este ambiente é bastante normal; a definição de rede é assim:

<interface type='network'>
  <mac address='52:54:00:e0:12:c8'/>
  <source network='default'/>
  <target dev='veth0'/>
</interface>

A configuração completa é aqui se você acha que pode ajudar.

Estou correndo:

  • lxc-0.7.2-2.el6.x86_64
  • kernel-2.6.32-71.29.1.el6.x86_64

EDITAR

Mais estranho e mais estranho ... é um problema de exibição, não um problema de funcionalidade. Eu posso ver a saída de ifconfig se eu canalizar em qualquer coisa, por exemplo:

# ifconfig eth0 | cat
eth0      Link encap:Ethernet  HWaddr 52:54:00:E0:12:C8  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fee0:12c8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:573 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:37914 (37.0 KiB)  TX bytes:552 (552.0 b)

E, de fato, mesmo quando não estiver gerando a saída, strace mostra que ifconfig está escrevendo a saída para o descritor de arquivo 1 (também conhecido como stdout ), portanto não está claro porque nenhuma saída está realmente aparecendo. Isso pode ser um problema LXC ou virsh , eu acho.

    
por larsks 28.10.2011 / 02:32

1 resposta

0

Geralmente acontece esse tipo de coisa que o programa aparentemente falhando está tentando mais inteligente , consultando o driver do terminal para seu tamanho quando está configurado incorretamente ou apenas 0 (veja stty -a), ou usando o terminfo, mas com um $ TERM incorreto ou variáveis $ LC_ * (tente executar env), ou em alguns casos estranhos em que algum buffer está sendo usado, engolindo dados que não preenchem o buffer. Correndo strace no ifconfig vs a versão do busybox pode ser interessante. O ifconfig normal do Linux é realmente livre sobre esse tipo de coisa - sobre tudo o que ele faz é um acesso à informação local.

    
por 07.07.2012 / 10:38