Como você detecta automaticamente uma nova placa de rede no CentOS 6 / RedHat?

46

Estou usando o CentOS 6 em um ambiente virtual. Ao clonar uma versão virtual do CentOS, os antigos adaptadores eth são "removidos" e substituídos por novos e endereços MAC de rede. No entanto, os arquivos ifcfg-ethn ainda existem. Estou tentando descobrir como fazer com que o CentOS verifique novamente e recrie automaticamente os adaptadores de rede / arquivos eth, exatamente como na instalação.

Caso contrário, fico com o tedioso processo descrito aqui: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

Eu sei que existe uma maneira rápida de fazer isso na GUI, mas estamos usando um servidor para que a GUI não se aplique neste caso. Socorro?

Edit: @OldWolf sugeriu o Kudzu, no entanto, o Kudzu foi removido a partir do Centos 5, então prefiro evitar isso. Existe um procedimento que o Linux executa na instalação inicial - alguém pode me ajudar a descobrir o que é isso, para que eu possa acioná-lo manualmente?

Joshua
fonte

Respostas:

52

Com o CentOS 6, tudo é tratado pelo udev agora. Entre /etc/udev/rules.de exclua o 70-persistent-net.rulesarquivo e reinicie. Se você o abrir antes, provavelmente verá o NIC MAC original listado como eth0e o novo como eth1.

Agora você precisa editar /etc/sysconfig/network-scripts/ifcfg-eth0e atualizar manualmente o MAC da sua nova placa NIC.

A exclusão do arquivo força o processo de detecção a ser executado novamente na inicialização sem deixar bagagem do processo de clonagem, ou seja, os endereços MAC da NIC antigos.

Eu tenho que fazer isso com meus clones do CentOS 6 no VMware ESXi 4.1 o tempo todo. É uma dor que o kudzu iria lidar com isso no passado com versões anteriores.

Tracy Carlton
fonte
2
Parecia um tracy maravilhoso, mas não funcionou como você descreveu. O antigo arquivo ifcfg-eth0 ainda estava lá, com o endereço MAC original, etc., em vez do novo endereço correto.
Joshua Joshua
2
Desculpe sim, eu tinha esquecido. Você também deve atualizar manualmente o endereço mac em ifcfg-eth0 também. Isso fará com que funcione. Pode haver uma maneira mais fácil, mas eu ainda tenho que encontrá-lo ...
Tracy Carlton
Este foi um bom começo. Parece que é possível escrever um script que automatize o processo - mesmo os bits manuais descritos - na inicialização. O problema está ativando o script somente depois que a máquina foi clonada / movida. Ainda não completa resposta a esta ...
Joshua
5
Entre /etc/udev/rules.de exclua o 70-persistent-net.rulesarquivo e NÃO reinicie. Acesse /etc/sysconfig/network-scripts/ifcfg-eth0e atualize manualmente o MAC da sua nova placa de rede. Reinicie e a rede deve ganhar vida.
2
@ user151091 Em vez de reiniciar, start_udevem seguida, service network restarttrabalhou para mim.
Doshea
5

Você também pode usar esta ferramenta (esta não é uma ferramenta GUI, sua ferramenta TUI, interface de usuário baseada em texto)

[root @ localhost ~] # sistema-configuração-rede-tui

Digite o comando acima e pressione Enter

Então esta tela aparecerá

insira a descrição da imagem aqui

Selecione Configuração do dispositivo e pressione Enter

Então esta tela aparecerá

insira a descrição da imagem aqui

Aqui eth0 se refere /etc/sysconfig/network-scripts/ifcfg-eth0

Qualquer que seja a edição feita, eth0isso afetará o ifcfg-eth0arquivo

max
fonte
Embora isso possa ser uma resposta útil para algumas pessoas / casos, o objetivo era criar scripts ou automatizar a configuração dos adaptadores de rede, o que não pode ser feito por meio de uma TUI / GUI. Leia o post original: "Estou tentando descobrir como fazer com que o CentOS faça uma nova varredura e recrie automaticamente os adaptadores de rede / arquivos eth, exatamente como na instalação".
Joshua
@Joshua desculpe entendi ... + 1
max
@max, system-config-networktambém parece abrir essa interface.
Acumenus
2
@QiFan Experimente este comandoyum install system-config-network-tui
max
1
@QiFan Para descobrir qual pacote contém esse comando, tente o seguinteyum whatprovides */system-config-network-tui
max
4

Exclua o arquivo de regras persistentes:

rm /etc/udev/rules.d/70-persistent-net.rules

Edite ifcfg-eth0:

nano /etc/sysconfig/network-scripts/ifcfg-eth0

REMOVA a HWADDRlinha completamente (ou altere-a para corresponder ao endereço MAC da sua nova NIC).

Reinicie seu sistema:

reboot

Se você alterar a NIC novamente, basta repetir as etapas 1 e 3.

Martin Anderson
fonte
Você realmente precisa reiniciar? Por que não apenas reiniciar o serviço de rede?
precisa
Embora isso possa ser uma resposta útil para algumas pessoas / casos, o objetivo era criar scripts ou automatizar a configuração dos adaptadores de rede. Da postagem original: "Estou tentando descobrir como fazer com que o CentOS faça uma nova varredura e recrie automaticamente os adaptadores de rede / arquivos eth, exatamente como na instalação".
19712 Joshua
@vgoff sim, reiniciar o serviço de rede, obviamente, funciona bem :) Talvez ele esteja se referindo a reinicialização do próprio dispositivo de rede, por exemplo, "ifup eth0" etc.
Joshua
Pode ser, mas ele diz "sistema", não "dispositivo".
vgoff 19/11/12
Posso estar errado, mas acho que a 'reinicialização da rede de serviço' não fará com que seus adaptadores sejam renomeados após a remoção do arquivo de regras persistente e que é necessária uma reinicialização ou 'start_udev' para que eles sejam renomeados.
Doshea
4

A modificação de arquivos após o clone não funcionaria no meu caso de uso, portanto resolvi o problema da seguinte maneira.

Você precisa editar dois arquivos, removendo as referências aos endereços Mac em cada um:

/etc/sysconfig/network-scripts/ifcfg-eth0 - remova a linha HWADDR =.

/etc/udev/rules.d/70-persistent-net.rules - remova do ATTR {endereço} == até e incluindo a próxima vírgula.

Agora, quando você clona a VM e altera o endereço MAC, a rede funcionará porque o endereço Mac nunca é gravado em nenhum arquivo.

Scot Inscore
fonte
Isso funcionou para mim - como observado, o endereço MAC nunca é gravado de volta em nenhum arquivo, portanto você pode alterá-lo e sua interface permanecerá "eth0" com a mesma configuração. Porém, isso parece funcionar apenas se você tiver um adaptador de rede; caso contrário, recebi um longo atraso de inicialização em "Iniciando o udev:" e meu segundo dispositivo foi chamado "rename3", provavelmente porque as regras sugeriam que os dois dispositivos deveriam ser chamados "eth0 "
Doshea
Solução viável para 1 adaptador. Também não se esqueça de fazer o tipo de conexão como Bridge nas configurações de rede.
Cherry
3

Crio e excluo tantas máquinas virtuais do CentOS 6 que escrevi alguns Bashfu para corrigir o eth0 ao clonar no VirtualBox.

   [root@jp-xm-base ~]# cat fixeth0.sh
if grep -q eth1 /etc/udev/rules.d/70-persistent-net.rules; then
   sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules;
   sed -i 's/eth1/eth0/g' /etc/udev/rules.d/70-persistent-net.rules;
   ETHERNET=`grep eth0 /etc/udev/rules.d/70-persistent-net.rules | awk -F"," '{print $4}' | awk -F"\"" '{print $2}'`;
   echo Ethernet Addr: $ETHERNET;
   sed -i 's/HWADDR=".*"/HWADDR="'$ETHERNET'"/' /etc/sysconfig/network-scripts/ifcfg-eth0;
   /sbin/start_udev
   /sbin/service network restart;
fi
Electrawn
fonte
1

Se o seu único problema for o endereço mac, você poderá executar algo semelhante a

TEST=`ifconfig | grep eth | awk '{ print $5}'`; sed "s/HWADDR.*/HWADDR\=$TEST/g" ifcfg-eth0 > TMP; mv TMP ifcfg-eth0

Para atualizar a entrada HWADDR.

Editar: Como parece que o problema é uma mudança real no hardware virtual, você pode tentar o seguinte. (não testado e referenciado a partir daqui )

edite / etc / sysconfig / hwconf e remova todas as referências à NIC anterior e execute novamente o kudzu para verificar se ele detecta o novo hardware. Pode ser necessário reiniciar.

OldWolf
fonte
Tentei alterar manualmente o endereço MAC no eth0, por exemplo, mas ele ainda não funcionou. Tentativas subseqüentes de "recarregar a força da rede de serviço", "ifup eth0" etc. sempre terminariam em "O dispositivo eth0 não parece estar presente ..." Ajuda?
Joshua Joshua
Que tipo de virtualização você está usando e como você clonou o sistema?
OldWolf
VirtualBox, mas acho que a virtualização não importa. Isso deve ser como desligar uma caixa física, remover os adaptadores de rede existentes e adicionar outros.
Joshua
@ Josh Onde estão os arquivos ifcfg- * que você está editando, pois existem três conjuntos - confira / etc / sysconfig / network-scripts e / etc / sysconfig / networking / devices e / etc / sysconfig / networking / profiles / default ( sim, eu sei - parece haver algo a ver com quais ferramentas você usa para configurar os adaptadores). O primeiro deve ser o que faz a diferença, mas você também pode precisar lidar com os outros.
precisa saber é o seguinte
1
O motivo pelo qual perguntei e o tipo de virtualização é importante é que ele determina a aparência do processo de clonagem. Um clone do VMware no mesmo host não altera o hardware da rede virtual, a menos que você o solicite. No seu caso, o problema não é o endereço mac nem o processo de clonagem, é que você está alterando o hardware virtual.
OldWolf
1

Não estou usando Vmware, mas o KVM com virsh - foi o que fiz.

Criou uma imagem 'base' com o CentOS 6.4, esta é a fonte de todos os meus clones. Após a primeira inicialização, criei um script como este

cat /etc/init.d/manglemac 
#!/bin/bash
#
# manglemac        This starts and stops mangle-mac
#
# chkconfig: 2345 11 88
# description: This obtains tha mac of eth0 and writes into ifcfg

mac=$(grep -H . /sys/class/net/*/address | grep eth0 | cut   -d ':' -f2-10)
match_mac=$(grep $mac /etc/sysconfig/network-scripts/ifcfg-eth0)

if [ -z "$match_mac" ];
then
   echo HWADDR=$mac >> /etc/sysconfig/network-scripts/ifcfg-eth0
fi

Adicionado para iniciar com

chkconfig --add manglemac

Excluiu todas as referências em / etc / sysconfig / network-scripts / ifcfg-eth0 de HWADDR ou UUID, também excluiu as regras do udev de /etc/udev/rules.d/70-persistent-net.rules.

Nesse ponto, desliguei a máquina e comecei a clonar. Tudo funciona bem. O script que eu criei é muito simples, mas funciona bem, no entanto, ele faz algumas suposições sobre sua configuração de rede (somente eth0).

Espero que ajude.

silviud
fonte
0

Eu estava lidando com várias NICs e nada acima funcionou para mim (VMware Fusion 7 / VMware 6 e abaixo), então escrevi um script. O tarball está aqui .

Aqui está o READMEque vem com ele:

  • Esse tarball e os scripts relacionados alterarão o endereço MAC da sua máquina VMware CentOS 6 ou abaixo clonada recentemente (sem systemd.)
  • Tudo o que você precisa fazer na máquina é que você clonará apenas uma vez:

    1. instalar lshw
    2. substitua o endereço MAC em todo o seu /etc/sysconfig/network-scripts/ifcfg-eth?por MACDADDY num onde num é o número da interface de rede. Você precisa seguir o padrão de nomenclatura para o arquivo.
    3. corre:

      chckconfig change_mac_address on
      

      Isso deve adicionar links sym nos níveis de execução adequados especificados no arquivo

    4. Clone a máquina normalmente e ligue-a. Ele deve alterar o endereço MAC em cada um dos seus ifcfg-eth?arquivos,
      • apague o arquivo udev,
      • verifique novamente o seu dispositivo e1000,
      • e reinicie a rede

Problemas:

  • Não sei por que, mas às vezes você precisa reiniciar a rede uma segunda vez para obter todas as NICs reconhecidas:

    /etc/init.d/network restart
    

    Corrigido isso colocando um sleep 20no início de/etc/init.d/network

  • Isso não foi um problema para mim, mas o script depende do lshwretorno das NICs na mesma ordem em queifcfg-eth?
  • Isso pressupõe que o (s) seu (s) dispositivo (s) NIC são e1000. Padrão VMware?
  • Pode valer a pena alternar a numeração dos seus ifcfg-eth?arquivos para que eles correspondam ao que lshwestá sendo devolvido no caso improvável de que não funcione e você esteja executando muitas máquinas com muitas NICs.
  • Com uma placa de rede, ela deve funcionar.
  • Após a primeira inicialização, ele /usr/bin/change_mac_address.plé movido para/usr/bin/change_mac_address.pl.old
  • Isso impedirá que ele seja executado em cada reinicialização, mesmo que não faça nada se não houver MACDADDY? na tuaifcfg-eth?
  • Você também pode e provavelmente deve executar

    chkconfig change_mac_address off
    
QFA
fonte