คุณจะตรวจจับการ์ดเครือข่ายใหม่ใน CentOS 6 / RedHat โดยอัตโนมัติได้อย่างไร


46

ฉันใช้ CentOS 6 ในสภาพแวดล้อมเสมือนจริง เมื่อทำการโคลน CentOS เวอร์ชันเสมือนอะแดปเตอร์ eth เดิมจะถูก "ลบ" และแทนที่ด้วยอันใหม่และที่อยู่ MAC สุทธิ อย่างไรก็ตามไฟล์ ifcfg-ethn ยังคงมีอยู่ ฉันกำลังพยายามหาวิธีที่จะทำให้ CentOS ทำการสแกนซ้ำอีกครั้งโดยอัตโนมัติ & สร้างอะแดปเตอร์เครือข่าย / ไฟล์ eth เหมือนที่ติดตั้ง

มิฉะนั้นฉันก็เหลือกระบวนการที่น่าเบื่อตามที่อธิบายไว้ที่นี่: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

ฉันรู้ว่ามีวิธีที่รวดเร็วในการทำเช่นนี้ใน GUI แต่เรากำลังใช้เซิร์ฟเวอร์ดังนั้น GUI ไม่ได้ใช้ในกรณีนี้ ช่วยด้วย?

แก้ไข: @OldWolf แนะนำ Kudzu อย่างไรก็ตาม Kudzu ถูกลบออกจาก Centos 5 ดังนั้นฉันค่อนข้างจะหลีกเลี่ยง มีขั้นตอนที่ลีนุกซ์ทำงานกับการติดตั้งครั้งแรก - มีคนช่วยฉันหาว่ามันคืออะไรเพื่อที่ฉันจะสามารถทริกเกอร์มันเองได้?

คำตอบ:


52

ด้วย CentOS 6 everthing ถูกจัดการโดย udev ตอนนี้ เข้าไป/etc/udev/rules.dและลบ70-persistent-net.rulesไฟล์และรีบูต ถ้าคุณเปิดมัน berfore มือคุณมากที่สุด likey จะเห็นเดิม NIC MAC ระบุว่าเป็นและคนใหม่เป็นeth0eth1

ตอนนี้คุณต้องแก้ไข/etc/sysconfig/network-scripts/ifcfg-eth0และอัปเดต MAC ของการ์ด NIC ใหม่ด้วยตนเอง

การลบไฟล์จะบังคับให้กระบวนการตรวจจับทำงานได้อีกครั้งในขณะบูตโดยไม่มีสัมภาระเหลือจากกระบวนการโคลนนิ่งนั่นคือที่อยู่ NIC MAC แบบเก่า

ฉันต้องทำกับ CentOS 6 โคลนของฉันบน VMware ESXi 4.1 ตลอดเวลา มันเป็นความเจ็บปวดที่คุดสุจะจัดการกับรุ่นก่อนหน้าในอดีต


2
ฟังเทรซี่ที่ยอดเยี่ยม แต่มันไม่ทำงานตามที่คุณอธิบาย ไฟล์ ifcfg-eth0 เก่ายังคงอยู่ที่นั่นพร้อมที่อยู่ MAC ดั้งเดิม ฯลฯ แทนไฟล์ใหม่ที่ถูกต้อง
Joshua

2
ขอโทษใช่ฉันลืมไปแล้ว คุณต้องอัปเดตที่อยู่ mac ด้วยตนเองใน ifcfg-eth0 ด้วยเช่นกัน ที่จะทำให้มันใช้งานได้ อาจจะมีวิธีที่ง่าย แต่ฉันยังไม่พบมัน ...
เทรซี่คาร์ลตัน

นี่เป็นการเริ่มต้นที่ดี ดูเหมือนว่าจะเป็นไปได้ที่จะเขียนสคริปต์ที่จะทำให้กระบวนการโดยอัตโนมัติ - แม้บิตคู่มืออธิบาย - ในการบูท ปัญหาคือการเปิดใช้งานสคริปต์เฉพาะหลังจากที่เครื่องได้รับการโคลน / ย้าย คำตอบยังคงไม่มีที่สมบูรณ์ในการนี้ ...
โจชัว

5
เข้าไป/etc/udev/rules.dและลบ70-persistent-net.rulesไฟล์และอย่ารีบูต เข้าไป/etc/sysconfig/network-scripts/ifcfg-eth0และอัปเดตเป็น MAC ของการ์ด NIC ใหม่ของคุณด้วยตนเอง รีบูตและเครือข่ายควรมีชีวิตอยู่

2
@ user151091 แทนที่จะรีบูตstart_udevแล้วก็ใช้service network restartงานได้สำหรับฉัน
doshea

5

คุณสามารถใช้เครื่องมือนี้ได้เช่นกัน (นี่ไม่ใช่เครื่องมือ GUI, เครื่องมือ TUI, ส่วนต่อประสานข้อความผู้ใช้)

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

พิมพ์คำสั่งด้านบนแล้วกด Enter

จากนั้นหน้าจอนี้จะปรากฏขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

เลือกการกำหนดค่าอุปกรณ์และกด Enter

จากนั้นหน้าจอนี้จะปรากฏขึ้น

ป้อนคำอธิบายรูปภาพที่นี่

นี่ eth0 หมายถึง /etc/sysconfig/network-scripts/ifcfg-eth0

การแก้ไขที่ทำในeth0สิ่งนั้นจะส่งผลต่อifcfg-eth0ไฟล์


แม้ว่านี่อาจเป็นคำตอบที่มีประโยชน์สำหรับบางคน / กรณีเป้าหมายของเรื่องนี้คือการเขียนสคริปต์หรือกำหนดค่าอะแดปเตอร์เครือข่ายโดยอัตโนมัติซึ่งไม่สามารถทำได้ผ่าน TUI / GUI อ่านโพสต์ต้นฉบับ: "ฉันกำลังพยายามหาวิธีที่จะทำให้ CentOS ทำการสแกนซ้ำอีกครั้งโดยอัตโนมัติ & สร้างอะแดปเตอร์เครือข่าย / ไฟล์ Eth เช่นเดียวกับที่ติดตั้ง"
Joshua

@Joshua ขอโทษนะ ... + 1
สูงสุด

@max system-config-networkดูเหมือนเพิ่งเปิดอินเทอร์เฟซนี้
คิวเมนตัส

2
@QiFan ลองใช้คำสั่งนี้yum install system-config-network-tui
สูงสุด

1
@QiFan หากต้องการทราบว่าแพ็คเกจใดที่มีคำสั่งนั้นให้ลองใช้งานyum whatprovides */system-config-network-tui
สูงสุด

4

ลบไฟล์กฎถาวร:

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

แก้ไข ifcfg-eth0:

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

ลบHWADDRบรรทัดทั้งหมด (หรือเปลี่ยนให้ตรงกับที่อยู่ MAC ของ NIC ใหม่ของคุณ)

รีบูตระบบของคุณ:

reboot

หากคุณเปลี่ยน NIC อีกครั้งเพียงทำซ้ำขั้นตอนที่ 1 และ # 3


คุณต้องรีบู๊ตจริงๆหรือไม่? ทำไมไม่เพิ่งเริ่มบริการเครือข่ายใหม่
vgoff

แม้ว่านี่อาจเป็นคำตอบที่มีประโยชน์สำหรับบางคน / กรณีเป้าหมายของการทำเช่นนี้คือสคริปต์หรือกำหนดค่าอะแดปเตอร์เครือข่ายโดยอัตโนมัติ จากโพสต์ต้นฉบับ: "ฉันกำลังพยายามหาวิธีที่จะทำให้ CentOS ทำการสแกนซ้ำอีกครั้งโดยอัตโนมัติ & สร้างอะแดปเตอร์เครือข่าย / ไฟล์ Eth เช่นเดียวกับที่ติดตั้ง"
Joshua

@vgoff ใช่รีสตาร์ทบริการเครือข่ายอย่างเห็นได้ชัดทำงานได้ดี :) บางทีเขาหมายถึงการเริ่มต้นอุปกรณ์เครือข่ายตัวเองเช่น "ifup eth0" ฯลฯ
โจชัว

อาจเป็นได้ แต่เขาบอกว่า 'ระบบ' ไม่ใช่ 'อุปกรณ์'
vgoff

ฉันอาจจะผิด แต่ฉันคิดว่า 'การบริการเครือข่ายเริ่มต้นใหม่' จะไม่ทำให้อะแดปเตอร์ของคุณถูกเปลี่ยนชื่อหลังจากที่คุณลบไฟล์กฎถาวรและจำเป็นต้องรีบูตหรือ 'start_udev' เพื่อให้พวกเขาเปลี่ยนชื่อ
doshea

4

การแก้ไขไฟล์หลังจากโคลนจะไม่ทำงานสำหรับกรณีการใช้งานของฉันดังนั้นฉันแก้ไขปัญหาดังต่อไปนี้

คุณต้องแก้ไขไฟล์สองไฟล์โดยลบการอ้างอิงถึงที่อยู่ Mac ในแต่ละไฟล์:

/etc/sysconfig/network-scripts/ifcfg-eth0 - ลบบรรทัด HWADDR =

/etc/udev/rules.d/70-persistent-net.rules - ลบออกจาก ATTR {address} == สูงสุดและรวมถึงเครื่องหมายจุลภาคถัดไป

ตอนนี้เมื่อคุณโคลน VM และเปลี่ยนเครือข่ายที่อยู่ mac จะทำงานเป็นที่อยู่ Mac ไม่เคยถูกเขียนไปยังไฟล์ใดไฟล์หนึ่ง


สิ่งนี้ใช้งานได้สำหรับฉัน - ตามที่ระบุไว้ที่อยู่ MAC จะไม่ถูกเขียนกลับไปที่ไฟล์ใดไฟล์หนึ่งดังนั้นคุณสามารถเปลี่ยนแปลงได้เรื่อย ๆ และส่วนต่อประสานของคุณจะยังคง "eth0" ด้วยการตั้งค่าเดียวกัน สิ่งนี้ดูเหมือนว่าจะใช้งานได้หากคุณมีอะแดปเตอร์เครือข่ายเพียงตัวเดียวมิฉะนั้นฉันจะได้รับความล่าช้าในการบูตนานที่ "Starting udev:" และอุปกรณ์ตัวที่สองของฉันถูกเรียกว่า "rename3" น่าจะเป็นเพราะกฎต่างๆ "
doshea

โซลูชันที่ใช้การได้สำหรับอะแด็ปเตอร์ 1 ตัว นอกจากนี้อย่าลืมที่จะทำให้ประเภทการเชื่อมต่อเป็นสะพานในการตั้งค่าเน็ต
Cherry

3

ฉันสร้างและลบเครื่องเสมือน CentOS 6 จำนวนมากฉันเขียน Bashfu เพื่อแก้ไข eth0 เมื่อทำการโคลนใน 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

1

หากปัญหาเดียวของคุณคือที่อยู่ mac คุณสามารถเรียกใช้สิ่งที่คล้ายกับ

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

เพื่ออัพเดตรายการ HWADDR

แก้ไข:เนื่องจากดูเหมือนว่าปัญหาคือการเปลี่ยนแปลงจริงในฮาร์ดแวร์เสมือนคุณสามารถลองทำสิ่งต่อไปนี้ (ยังไม่ทดลองและอ้างอิงจากที่นี่ )

แก้ไข / etc / sysconfig / hwconf และลบการอ้างอิงทั้งหมดไปยัง NIC และ rerun kudzu ก่อนหน้าเพื่อดูว่าตรวจพบฮาร์ดแวร์ใหม่หรือไม่ คุณอาจต้องรีบูต


ฉันพยายามเปลี่ยนที่อยู่ MAC ด้วยตนเองใน eth0 เช่น แต่ก็ยังไม่ทำงาน ความพยายามครั้งต่อไปที่ "service network-reload", "ifup eth0" ฯลฯ จะสิ้นสุดใน "Device eth0 ดูเหมือนจะไม่ปรากฏ ... " ช่วยไหม?
Joshua

คุณใช้ virtualization ประเภทใดและคุณโคลนระบบได้อย่างไร
OldWolf

VirtualBox แต่ฉันไม่คิดว่า virtualization มีความสำคัญ นี่ควรเป็นเหมือนการปิดกล่องทางกายภาพเอาอะแดปเตอร์เครือข่ายที่มีอยู่ออก
โจชัว

@Josh ไฟล์ ifcfg- * ที่คุณแก้ไขอยู่อาจมีอยู่สามชุด - ลองดู / etc / sysconfig / network-script และ / etc / sysconfig / networking / devices และ / etc / sysconfig / networking / profiles / default ( ใช่ฉันรู้ว่ามันเป็นเรื่องเกี่ยวกับเครื่องมือที่คุณใช้ในการตั้งค่าอะแดปเตอร์) สิ่งแรกควรเป็นสิ่งที่สร้างความแตกต่าง แต่คุณอาจต้องจัดการกับคนอื่นด้วย
Linker3000

1
เหตุผลที่ฉันถามและประเภทของการจำลองเสมือนมีความสำคัญเพราะมันเป็นตัวกำหนดว่ากระบวนการโคลนนั้นเป็นอย่างไร VMware โคลนบนโฮสต์เดียวกันจะไม่เปลี่ยนฮาร์ดแวร์เครือข่ายเสมือนเว้นแต่คุณจะบอก ในกรณีของคุณปัญหาไม่ใช่ที่อยู่ mac หรือกระบวนการโคลนนั่นคือคุณกำลังเปลี่ยนฮาร์ดแวร์เสมือน
OldWolf

1

ฉันไม่ได้ใช้ Vmware แต่ KVM กับ virsh - นี่คือสิ่งที่ฉันทำ

สร้างภาพ 'ฐาน' ด้วย CentOS 6.4 นี่คือที่มาของโคลนทั้งหมดของฉัน หลังจากบูตครั้งแรกฉันสร้างสคริปต์เช่นนี้

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

เพิ่มมันเพื่อเริ่มต้นด้วย

chkconfig --add manglemac

ลบการอ้างอิงทั้งหมดไปยัง / etc / sysconfig / network-script / ifcfg-eth0 ของ HWADDR หรือ UUID ลบกฎ udev ออกจาก /etc/udev/rules.d/70-persistent-net.rules ด้วย

ณ จุดนี้ฉันปิดเครื่องและเริ่มโคลน ทำงานได้ดีทั้งหมด สคริปต์ที่ฉันทำนั้นง่ายมาก แต่ใช้งานได้ดีอย่างไรก็ตามมันมีข้อสมมติฐานบางประการเกี่ยวกับการตั้งค่าของคุณสำหรับเครือข่าย (eth0 เท่านั้น)

ฉันหวังว่าจะช่วย


0

ฉันกำลังจัดการกับ NIC หลายตัวและไม่มีอะไรข้างต้นทำงานให้ฉัน (VMware Fusion 7 / VMware 6 และต่ำกว่า) ดังนั้นฉันจึงเขียนสคริปต์ tarball เป็นที่นี่

นี่คือสิ่งREADMEที่มาพร้อมกับมัน:

  • tarball และสคริปต์ที่เกี่ยวข้องนี้จะเปลี่ยนที่อยู่ MAC ของ VMware CentOS 6 ที่เพิ่งถูกโคลนของคุณหรือต่ำกว่าเครื่อง (ไม่มี systemd)
  • สิ่งที่คุณต้องทำในเครื่องคุณจะโคลนจากครั้งเดียวเท่านั้น:

    1. ติดตั้ง lshw
    2. แทนที่ที่อยู่ MAC ในทั้งหมดของคุณ /etc/sysconfig/network-scripts/ifcfg-eth?ด้วย MACDADDY num โดยที่numคือหมายเลขของอินเทอร์เฟซเครือข่าย คุณต้องทำตามรูปแบบการตั้งชื่อสำหรับไฟล์
    3. วิ่ง:

      chckconfig change_mac_address on
      

      นี่ควรเพิ่มลิงค์ sym ที่ระดับการทำงานที่เหมาะสมที่ระบุในไฟล์

    4. โคลนเครื่องตามปกติและเปิดเครื่องขึ้น ควรเปลี่ยนที่อยู่ MAC ในแต่ละifcfg-eth?ไฟล์ ของคุณ
      • ลบไฟล์ udev
      • สแกนอุปกรณ์ e1000 ของคุณอีกครั้ง
      • และรีสตาร์ทเครือข่าย

ปัญหา:

  • ไม่แน่ใจว่าทำไม แต่บางครั้งคุณต้องรีสตาร์ทเครือข่ายเป็นครั้งที่สองเพื่อรับ NIC ทั้งหมดที่ได้รับการยอมรับ:

    /etc/init.d/network restart
    

    แก้ไขปัญหานี้โดยใส่sleep 20จุดเริ่มต้นของ/etc/init.d/network

  • นี่ไม่ใช่ปัญหาสำหรับฉัน แต่สคริปต์อาศัยการlshwส่งคืน NIC ในลำดับเดียวกับifcfg-eth?
  • สิ่งนี้ถือว่าอุปกรณ์ NIC ของคุณคือ e1000 มาตรฐาน VMware?
  • มันอาจคุ้มค่าที่จะเปลี่ยนหมายเลขifcfg-eth?ไฟล์ของคุณเพื่อให้ตรงกับสิ่งที่lshwให้กลับมาในเหตุการณ์ที่ไม่น่าเป็นไปได้ที่มันไม่ทำงานและคุณกำลังทำเครื่องจำนวนมากที่มี NIC จำนวนมาก
  • ด้วยหนึ่ง NIC มันควรจะทำงาน
  • หลังจากการเริ่มต้นครั้งแรก/usr/bin/change_mac_address.plจะถูกย้ายไปที่/usr/bin/change_mac_address.pl.old
  • นี่จะป้องกันไม่ให้ทำงานในการรีบูตแต่ละครั้งแม้ว่ามันจะไม่ทำอะไรเลยหากไม่มี MACDADDY? ในของคุณifcfg-eth?
  • คุณสามารถและควรจะเรียกใช้

    chkconfig change_mac_address off
    
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.