Estou tentando testar alguns softwares em um sistema big endian para garantir compatibilidade. Meu plano é usar o qemu no Ubuntu 12.04 para emular um sistema MIPS. Até agora, consegui criar o sistema de missões com sucesso, mas não consegui conectá-lo ao sistema host. Posso acessar o mundo externo a partir do sistema convidado (por exemplo, wget ou apt-get), mas minhas tentativas de configurar o samba falharam.
De acordo com isso , no QEmu 1.1 e mais recente, o auxiliar de ponte de rede pode definir tun / tap up para você sem a necessidade de scripts adicionais. Eu estou tentando usar isso desde que eu vi diferentes versões dos scripts. Agora qemu-system-mips -version
informa o seguinte:
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
Eu compilei a partir da fonte 1.4.1 e usei a versão de apt-get
. Ambos relatam a mesma coisa. Eu estou trabalhando sob a suposição de que eu tenho a versão 1.1 ou posterior, apesar do que -version
está me dizendo. De qualquer forma, a próxima instrução foi ativar o atributo setuid para o auxiliar de rede padrão:
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
Em seguida, criei um arquivo bridge.conf
em /etc/qemu/
e /usr/local/etc/qemu
com -rw-r--r--
para permissões. O conteúdo do arquivo é:
allow br0
Se eu iniciar o QEmu com o seguinte comando:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba
ou com
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
ou com
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
Eu recebo o seguinte erro:
failed to get mtu of bridge 'br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized
Justo, eu não criei a ponte br0. Eu tentei criar um com um script que eu não entendo, mas meu sistema MIPS QEmu não se conecta a nada. Veja br0, mas não obtém um endereço IP. Claramente estou fazendo algo errado aqui:
ifconfig br0 down
brctl delbr br0
ifconfig eth2 0.0.0.0 promisc up
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
dhclient br0
ifconfig br0 up
Existe uma maneira mais fácil de fazer isso? Pessoalmente, eu estaria bem apenas usando o servidor SMB em \ 10.0.2.4 \ qemu que é descrito aqui , mas que não funcionou para mim (115 erros quando tento montar o compartilhamento, presumivelmente por causa de problemas de rede).
Atualizar
Depois de criar a ponte, vejo a seguinte saída do ifconfig na máquina host:
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:10.2.32.101 Bcast:10.2.32.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8235 (8.2 KB) TX bytes:9227 (9.2 KB)
eth2 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:139517339 (139.5 MB) TX bytes:3365206 (3.3 MB)
Verificando a saída brctl show
, vejo o seguinte:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
Agora eu inicio o sistema de missões em QEmu. Se eu executar ifconfig, vejo o seguinte:
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536 errors:1 dropped:51 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55083 (53.7 KiB) TX bytes:2862 (2.7 KiB)
Interrupt:10 Base address:0x1020
E a ponte é assim:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
tap0
Infelizmente, com essa configuração, o sistema de missões perdeu a rede limitada de "modo de usuário" que já teve (ou seja, wget e apt-get não funcionam mais). O único endereço IP que vejo é para a ponte, então não sei como a missão aparecerá na rede. O host ainda aparece, no mesmo endereço IP que br0.
Atualizar
Aqui está a saída do iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination