Jak automatycznie wykrywasz nową kartę sieciową w CentOS 6 / RedHat?

46

Używam CentOS 6 w środowisku wirtualnym. Podczas klonowania wirtualnej wersji CentOS stare karty sieciowe są „usuwane” i zastępowane nowymi i adresami MAC. Jednak pliki ifcfg-ethn nadal istnieją. Próbuję wymyślić, jak ustawić CentOS do automatycznego ponownego skanowania i ponownego tworzenia kart sieciowych / plików eth, tak jak podczas instalacji.

W przeciwnym razie pozostaje mi żmudny proces opisany tutaj: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

Wiem, że istnieje szybki sposób na to w GUI, ale używamy serwera, więc GUI nie ma zastosowania w tym przypadku. Wsparcie?

Edycja: @OldWolf zasugerował Kudzu, jednak Kudzu został usunięty z Centos 5, więc wolałbym tego uniknąć. Istnieje procedura, którą Linux uruchamia przy pierwszej instalacji - czy ktoś może mi pomóc dowiedzieć się, co to takiego, żebym mógł ją ręcznie uruchomić?

Jozuego
źródło

Odpowiedzi:

52

Dzięki CentOS 6 wszystko jest teraz obsługiwane przez udev. Idź do /etc/udev/rules.di usuń 70-persistent-net.rulesplik i uruchom ponownie. Jeśli otworzysz go od ręki, najbardziej spodoba ci się oryginalny NIC MAC wymieniony jako eth0i nowy jako eth1.

Teraz musisz edytować /etc/sysconfig/network-scripts/ifcfg-eth0i ręcznie aktualizować MAC nowej karty sieciowej.

Usunięcie pliku zmusza proces wykrywania do ponownego uruchomienia podczas rozruchu bez pozostawiania bagażu z procesu klonowania, a mianowicie starych adresów MAC karty NIC.

Muszę to robić przez cały czas z moimi klonami CentOS 6 na VMware ESXi 4.1. Kudzu to ból, który poradziłby sobie z tym w poprzednich wersjach.

Tracy Carlton
źródło
2
Brzmiało to cudownie, ale nie działało tak, jak to opisałeś. Stary plik ifcfg-eth0 wciąż tam był, z oryginalnym adresem MAC itp. Zamiast poprawnego nowego.
Joshua
2
Przepraszam tak, zapomniałem. Musisz również RĘCZNIE zaktualizować adres mac w ifcfg-eth0, również przepraszam. To sprawi, że zadziała. Może być łatwiejszy sposób, ale jeszcze go nie znalazłem ...
Tracy Carlton,
To był dobry początek. Wydaje się, że możliwe jest napisanie skryptu, który zautomatyzuje proces - nawet opisane bity ręczne - podczas uruchamiania. Problemem jest aktywacja skryptu dopiero po sklonowaniu / przeniesieniu komputera. Nadal nie ma pełnej odpowiedzi na to ...
Joshua
5
Wejdź do /etc/udev/rules.di usuń 70-persistent-net.rulesplik i NIE uruchamiaj ponownie. Wejdź /etc/sysconfig/network-scripts/ifcfg-eth0i ręcznie zaktualizuj MAC nowej karty sieciowej. Uruchom ponownie, a sieć powinna ożyć.
2
@ user151091 Zamiast restartu, start_udevpotem service network restartpracował dla mnie.
doshea
5

Możesz także użyć tego narzędzia (To nie jest narzędzie GUI, jego narzędzie TUI, tekstowy interfejs użytkownika)

[root @ localhost ~] # system-config-network-tui

Wpisz powyższe polecenie i naciśnij klawisz Enter

Następnie pojawi się ten ekran

wprowadź opis zdjęcia tutaj

Wybierz Konfiguracja urządzenia i naciśnij Enter

Następnie pojawi się ten ekran

wprowadź opis zdjęcia tutaj

Tutaj odnosi się eth0 /etc/sysconfig/network-scripts/ifcfg-eth0

Jakakolwiek dokonana edycja eth0wpłynie na ifcfg-eth0plik

max
źródło
Chociaż może to być przydatna odpowiedź dla niektórych osób / przypadków, celem tego było skrypty lub automatyzacja konfiguracji kart sieciowych, czego nie można zrobić za pomocą TUI / GUI. Przeczytaj oryginalny post: „Próbuję wymyślić, jak CentOS automatycznie skanuje i ponownie tworzy karty sieciowe / pliki eth, tak jak podczas instalacji”.
Joshua
@Joshua przepraszam, rozumiem ... + 1
maks.
@max, system-config-networkwydaje się również otwierać ten interfejs.
Acumenus,
2
@QiFan Wypróbuj to polecenieyum install system-config-network-tui
maksymalnie
1
@QiFan Aby dowiedzieć się, który pakiet zawiera to polecenie, spróbuj tegoyum whatprovides */system-config-network-tui
maksymalnie
4

Usuń plik trwałych reguł:

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

Edytuj ifcfg-eth0:

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

USUŃ HWADDRwiersz całkowicie (lub zmień go, aby pasował do adresu MAC nowej karty sieciowej).

Uruchom ponownie system:

reboot

Jeśli ponownie zmienisz kartę sieciową, po prostu powtórz krok 1 i 3.

Martin Anderson
źródło
Czy naprawdę potrzebujesz zrestartować komputer? Dlaczego nie zrestartować usługi sieciowej?
vgoff,
Chociaż może to być przydatna odpowiedź na niektóre osoby / przypadki, celem tego było skrypty lub automatyzacja konfiguracji kart sieciowych. Z oryginalnego postu: „Próbuję wymyślić, jak ustawić CentOS do automatycznego ponownego skanowania i ponownego tworzenia kart sieciowych / plików eth, tak jak to zrobiło podczas instalacji”.
Joshua,
@vgoff tak, zrestartowanie usługi sieciowej oczywiście działa dobrze :) Być może chodzi mu o ponowne uruchomienie samego urządzenia sieciowego, np. „ifup eth0” itp.
Joshua
Być może, ale mówi „system”, a nie „urządzenie”.
vgoff,
Mogę się mylić, ale myślę, że „ponowne uruchomienie sieci serwisowej” nie spowoduje zmiany nazwy adapterów po usunięciu pliku reguł trwałych oraz że wymagane jest ponowne uruchomienie lub „start_udev”, aby zmienić ich nazwę.
doshea
4

Modyfikowanie plików po sklonowaniu nie działałoby w moim przypadku użycia, dlatego problem rozwiązałem w następujący sposób.

Musisz edytować dwa pliki, usuwając odniesienia do adresów Mac w każdym:

/etc/sysconfig/network-scripts/ifcfg-eth0 - usuń wiersz HWADDR =.

/etc/udev/rules.d/70-persistent-net.rules - usuń z ATTR {adres} == do następnego przecinka włącznie.

Teraz, gdy sklonujesz maszynę wirtualną i zmienisz adres MAC, sieć będzie działać, ponieważ adres Mac nigdy nie zostanie zapisany w żadnym z plików.

Scot Inscore
źródło
To działało dla mnie - jak wspomniano, adres MAC nigdy nie jest zapisywany z powrotem do żadnego pliku, więc możesz go ciągle zmieniać, a twój interfejs pozostanie „eth0” z tą samą konfiguracją. Wydaje się, że działa to tylko, jeśli masz jedną kartę sieciową, w przeciwnym razie mam duże opóźnienie rozruchu przy „Uruchamianiu udev:”, a moje drugie urządzenie zostało nazwane „rename3”, prawdopodobnie dlatego, że reguły sugerowały, że oba urządzenia powinny być nazwane „eth0 „.
doshea
Wykonalne rozwiązanie dla 1 adaptera. Nie zapomnij również, aby ustawić typ połączenia jako Most w ustawieniach sieci.
Cherry
3

Tworzę i usuwam tyle maszyn wirtualnych CentOS 6, że napisałem Bashfu, aby naprawić eth0 po klonowaniu w 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
źródło
1

Jeśli Twoim jedynym problemem jest adres MAC, możesz uruchomić coś podobnego do

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

Aby zaktualizować wpis HWADDR.

Edycja: Ponieważ wygląda na to, że problem jest faktyczną zmianą w sprzęcie wirtualnym, możesz wypróbować następujące rozwiązania. (nieprzetestowane i wymienione tutaj )

edytuj / etc / sysconfig / hwconf i usuń wszystkie odniesienia do poprzedniej karty sieciowej i uruchom ponownie kudzu, aby sprawdzić, czy wykryje nowy sprzęt. Może być konieczne ponowne uruchomienie.

OldWolf
źródło
Próbowałem ręcznie zmienić adres MAC na przykład na eth0, ale nadal nie działało. Kolejne próby „wymuszenia przeładowania sieci serwisowej”, „ifup eth0” itd. Zawsze kończyłyby się na „Urządzenie eth0 nie wydaje się być obecne ...” Pomoc?
Jozuego
Jakiego rodzaju wirtualizacji używasz i jak sklonowałeś system?
OldWolf,
VirtualBox, ale nie sądzę, że wirtualizacja ma znaczenie. Powinno to być jak wyłączenie fizycznego urządzenia, usunięcie istniejących kart sieciowych i dodanie innych.
Jozuego
@Josh Gdzie edytujesz pliki ifcfg- *, ponieważ możliwe są trzy zestawy - sprawdź / etc / sysconfig / network-scripts i / etc / sysconfig / networking / devices i / etc / sysconfig / networking / profiles / default ( tak, wiem - wydaje się, że jest to związane z tym, którego narzędzia używasz do konfigurowania adapterów). Pierwszy powinien być tym, który robi różnicę, ale być może będziesz musiał poradzić sobie również z innymi.
Linker3000,
1
Powodem, dla którego zapytałem i że typ wirtualizacji jest ważny, to to, że określa on, jak wygląda proces klonowania. Klon VMware na tym samym hoście nie zmieniłby sprzętu sieci wirtualnej, chyba że zostaniesz o to poproszony. W twoim przypadku problemem nie jest adres mac ani proces klonowania, lecz zmiana sprzętu wirtualnego.
OldWolf,
1

Nie używam Vmware, ale KVM z virsh - oto co zrobiłem.

Utworzono obraz „podstawowy” za pomocą CentOS 6.4, jest to źródło wszystkich moich klonów. Po pierwszym uruchomieniu utworzyłem taki skrypt

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

Dodano go do init z

chkconfig --add manglemac

Usunięto wszystkie odwołania do / etc / sysconfig / network-scripts / ifcfg-eth0 z HWADDR lub UUID, usunięto również reguły udev z /etc/udev/rules.d/70-persistent-net.rules.

W tym momencie wyłączyłem maszynę i zacząłem klonować. Wszystko działa dobrze. Skrypt, który utworzyłem, jest bardzo prosty, ale działa dobrze, jednak zawiera kilka założeń dotyczących konfiguracji sieci (tylko eth0).

Mam nadzieję, że ci pomogę

silviud
źródło
0

Miałem do czynienia z wieloma kartami sieciowymi i nic powyżej nie działało dla mnie (VMware Fusion 7 / VMware 6 i niższe), więc napisałem skrypt. Tarball jest tutaj .

Oto, co się z READMEtym wiąże:

  • Ten plik tarball i powiązane skrypty zmienią adres MAC ostatnio sklonowanego VMware CentOS 6 lub nowszej maszyny (bez systemu).
  • Wszystko, co musisz zrobić w maszynie, którą sklonujesz tylko raz:

    1. zainstalować lshw
    2. zastąpić adres MAC w cały swój /etc/sysconfig/network-scripts/ifcfg-eth?z MACDADDY num gdzie num to numer interfejsu sieciowego. Musisz postępować zgodnie ze schematem nazewnictwa pliku.
    3. biegać:

      chckconfig change_mac_address on
      

      Powinno to dodać łącza sym na odpowiednich poziomach uruchamiania określonych w pliku

    4. Sklonuj maszynę jak zwykle i odpal ją. Powinien zmienić adres MAC w każdym z twoichifcfg-eth? plików,
      • skasuj plik udev,
      • przeskanuj ponownie swoje urządzenie e1000,
      • i zrestartuj sieć

Problemy:

  • Nie wiem dlaczego, ale czasami trzeba ponownie uruchomić sieć po raz drugi, aby wszystkie karty sieciowe zostały rozpoznane:

    /etc/init.d/network restart
    

    Naprawiono to, umieszczając sleep 20na początku/etc/init.d/network

  • Nie stanowiło to dla mnie problemu, ale skrypt polega na lshwzwróceniu kart sieciowych w tej samej kolejności coifcfg-eth?
  • Zakłada się, że twoje urządzenie NIC to e1000. Standard VMware?
  • Warto może zmienić numerację ifcfg-eth?plików, aby pasowały do ​​czegolshw daje w mało prawdopodobnym przypadku, gdy to nie działa i pracujesz na wielu komputerach z wieloma kartami sieciowymi.
  • Z jedną kartą sieciową powinna po prostu działać.
  • Po pierwszym uruchomieniu /usr/bin/change_mac_address.pl jest przenoszony do/usr/bin/change_mac_address.pl.old
  • Dzięki temu nie będzie działać przy każdym ponownym uruchomieniu, nawet jeśli nic nie zrobi, jeśli nie ma MACDADDY? w Twoimifcfg-eth?
  • Możesz także i prawdopodobnie powinieneś biec

    chkconfig change_mac_address off
    
FFQ
źródło