Làm thế nào để bạn tự động phát hiện một card mạng mới trong CentOS 6 / RedHat?


46

Tôi đang sử dụng CentOS 6 trong môi trường ảo. Khi nhân bản một phiên bản ảo của CentOS, các bộ điều hợp eth cũ sẽ bị "loại bỏ" và được thay thế bằng các phiên bản MAC và địa chỉ MAC mới. Tuy nhiên, các tập tin ifcfg-ethn vẫn tồn tại. Tôi đang cố gắng tìm ra cách để CentOS tự động quét lại & tạo lại các tập tin / bộ điều hợp mạng, giống như khi cài đặt.

Mặt khác, tôi để lại quá trình tẻ nhạt như được mô tả ở đây: http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-s390info-addnetdevice.html

Tôi biết có một cách nhanh chóng để làm điều này trong GUI, nhưng chúng tôi đang sử dụng máy chủ để GUI không áp dụng trong trường hợp này. Cứu giúp?

Chỉnh sửa: @OldWolf đề xuất Kudzu, tuy nhiên Kudzu đã bị xóa kể từ Centos 5 vì vậy tôi muốn tránh điều đó. Có một quy trình mà Linux chạy trên cài đặt ban đầu - ai đó có thể giúp tôi tìm ra đó là gì để tôi có thể tự kích hoạt nó không?

Câu trả lời:


52

Với CentOS 6, mọi thứ đều được xử lý bởi udev. Đi vào /etc/udev/rules.dvà xóa các 70-persistent-net.rulestập tin và khởi động lại. Nếu bạn mở nó bằng tay, bạn sẽ thích nhất là MAC MAC gốc được liệt kê eth0và cái mới như eth1.

Bây giờ bạn cần chỉnh sửa /etc/sysconfig/network-scripts/ifcfg-eth0và cập nhật thủ công lên MAC của thẻ NIC mới của bạn.

Việc xóa tệp buộc quá trình phát hiện phải chạy lại khi khởi động mà không còn hành lý nào trong quá trình nhân bản, cụ thể là địa chỉ MAC MAC cũ.

Tôi phải làm điều đó với bản sao CentOS 6 của mình trên VMware ESXi 4.1 mọi lúc. Đó là một nỗi đau mà kudzu sẽ xử lý nó trong quá khứ với các phiên bản trước.


2
Nghe có vẻ tuyệt vời, tuy nhiên nó không hoạt động như bạn mô tả. Tệp ifcfg-eth0 cũ vẫn còn đó, với địa chỉ MAC gốc, v.v. thay vì đúng mới.
Joshua

2
Xin lỗi, tôi đã quên. Bạn cũng phải cập nhật địa chỉ mac trong ifcfg-eth0 cũng xin lỗi. Điều đó sẽ làm cho nó hoạt động. Có thể có một cách dễ dàng hơn nhưng tôi vẫn chưa tìm thấy ...
Tracy Carlton

Đây là một khởi đầu tốt. Có vẻ như có thể viết một tập lệnh sẽ tự động hóa quá trình - ngay cả các bit thủ công được mô tả - khi khởi động. Vấn đề là kích hoạt tập lệnh chỉ sau khi máy đã được sao chép / di chuyển. Vẫn chưa có câu trả lời đầy đủ cho điều này ...
Joshua

5
Đi vào /etc/udev/rules.dvà xóa 70-persistent-net.rulestập tin và KHÔNG khởi động lại. Đi vào /etc/sysconfig/network-scripts/ifcfg-eth0và cập nhật thủ công vào MAC của thẻ NIC mới của bạn. Khởi động lại và mạng sẽ trở nên sống động.

2
@ user151091 Thay vì khởi động lại, start_udevsau đó service network restartlàm việc cho tôi.
doshea

5

Bạn cũng có thể sử dụng công cụ này (Đây không phải là công cụ GUI, công cụ TUI của nó, Giao diện người dùng dựa trên văn bản)

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

Gõ lệnh trên và nhấn Enter

Sau đó, màn hình này sẽ xuất hiện

nhập mô tả hình ảnh ở đây

Chọn cấu hình thiết bị và nhấn Enter

Sau đó, màn hình này sẽ xuất hiện

nhập mô tả hình ảnh ở đây

Ở đây eth0 đề cập đến /etc/sysconfig/network-scripts/ifcfg-eth0

Bất cứ chỉnh sửa nào được thực hiện trong eth0đó sẽ ảnh hưởng đến ifcfg-eth0tệp


Mặc dù đây có thể là một câu trả lời hữu ích cho một số người / trường hợp, mục tiêu của việc này là kịch bản hoặc tự động hóa cấu hình của các bộ điều hợp mạng, không thể thực hiện được thông qua TUI / GUI. Đọc bài đăng gốc: "Tôi đang cố gắng tìm ra cách để CentOS tự động quét lại & tạo lại các tập tin / bộ điều hợp mạng, giống như khi cài đặt."
Joshua

@Joshua xin lỗi đã nhận nó ... + 1
tối đa

@max, system-config-networkdường như cũng mở giao diện này.
Acumenus 17/12/13

2
@QiFan Hãy thử lệnh nàyyum install system-config-network-tui
tối đa

1
@QiFan Để tìm hiểu gói nào chứa lệnh đó, hãy thử điều nàyyum whatprovides */system-config-network-tui
tối đa

4

Xóa tệp quy tắc liên tục:

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

Chỉnh sửa ifcfg-eth0:

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

XÓA HWADDRtoàn bộ dòng (hoặc thay đổi nó để phù hợp với địa chỉ MAC của NIC mới của bạn).

Khởi động lại hệ thống của bạn:

reboot

Nếu bạn thay đổi lại NIC, chỉ cần lặp lại bước # 1 và # 3.


Bạn có thực sự cần phải khởi động lại? Tại sao không chỉ khởi động lại dịch vụ mạng?
vgoff

Mặc dù đây có thể là một câu trả lời hữu ích cho một số người / trường hợp, mục tiêu của việc này là để kịch bản hoặc tự động hóa cấu hình của các bộ điều hợp mạng. Từ bài đăng gốc: "Tôi đang cố gắng tìm ra cách để CentOS tự động quét lại & tạo lại các tập tin / bộ điều hợp mạng, giống như khi cài đặt."
Joshua

@vgoff có, khởi động lại dịch vụ mạng rõ ràng hoạt động tốt :) Có lẽ anh ấy đang đề cập đến việc tự khởi động lại thiết bị mạng, ví dụ: "ifup eth0", v.v.
Joshua

Đó có thể là, nhưng anh ta nói 'hệ thống' không phải 'thiết bị'.
vgoff

Tôi có thể sai, nhưng tôi nghĩ rằng 'khởi động lại mạng dịch vụ' sẽ không khiến bộ điều hợp của bạn bị đổi tên sau khi bạn xóa tệp quy tắc liên tục và yêu cầu khởi động lại hoặc 'start_udev' để khiến chúng bị đổi tên.
doshea

4

Sửa đổi tệp sau khi sao chép sẽ không hoạt động cho trường hợp sử dụng của tôi, do đó tôi đã giải quyết vấn đề như sau.

Bạn cần chỉnh sửa hai tệp, xóa các tham chiếu đến các địa chỉ Mac trong mỗi tệp:

/etc/sysconfig/network-scripts/ifcfg-eth0 - xóa dòng HWADDR =.

/etc/udev/rules.d/70-persistent-net.rules - xóa khỏi ATTR {address} == tối đa và bao gồm dấu phẩy tiếp theo.

Bây giờ khi bạn sao chép VM và thay đổi mạng địa chỉ mac sẽ hoạt động vì địa chỉ Mac không bao giờ được ghi vào một trong hai tệp.


Điều này làm việc cho tôi - như đã lưu ý, địa chỉ MAC không bao giờ được ghi lại vào một trong hai tệp, vì vậy bạn có thể tiếp tục thay đổi nó và giao diện của bạn sẽ vẫn là "eth0" với cùng cấu hình. Tuy nhiên, điều này dường như chỉ hoạt động nếu bạn có một bộ điều hợp mạng, nếu không, tôi đã bị chậm khởi động lâu ở "Bắt đầu udev:" và thiết bị thứ hai của tôi được gọi là "rename3", có lẽ vì các quy tắc đề xuất cả hai thiết bị nên được gọi là "eth0 ".
doshea

Giải pháp khả thi cho 1 bộ chuyển đổi. Cũng đừng quên tạo loại kết nối là Cầu nối trong cài đặt mạng.
Cherry

3

Tôi tạo và xóa rất nhiều máy ảo CentOS 6 Tôi đã viết một số Bashfu để sửa lỗi eth0 khi nhân bản trong 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

Nếu vấn đề duy nhất của bạn là địa chỉ mac, bạn có thể chạy một cái gì đó tương tự như

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

Để cập nhật mục HWADDR.

Chỉnh sửa: Vì có vẻ như sự cố là một thay đổi thực sự trong phần cứng ảo, bạn có thể thử các cách sau. (chưa được kiểm tra và được tham khảo từ đây )

chỉnh sửa / etc / sysconfig / hwconf và xóa tất cả các tham chiếu đến NIC trước đó và chạy lại kudzu để xem liệu nó có phát hiện phần cứng mới hay không. Bạn có thể cần phải khởi động lại.


Tôi đã thử thay đổi thủ công địa chỉ MAC trên eth0 chẳng hạn, nhưng nó vẫn không hoạt động. Các lần thử tiếp theo tại "tải lại lực lượng mạng dịch vụ", "ifup eth0", v.v. sẽ luôn kết thúc bằng "Thiết bị eth0 dường như không có mặt ..." Trợ giúp?
Joshua

Bạn đang sử dụng loại ảo hóa nào và bạn đã sao chép hệ thống như thế nào?
OldWolf

VirtualBox, nhưng tôi không nghĩ vấn đề ảo hóa. Điều này sẽ giống như tắt một hộp vật lý xuống, loại bỏ các bộ điều hợp mạng hiện có và thêm các bộ điều hợp mạng khác nhau.
Joshua

@Josh Các tập tin ifcfg- * bạn đang chỉnh sửa ở đâu vì có thể có ba bộ - hãy xem / etc / sysconfig / network-scripts và / etc / sysconfig / network / thiết bị và / etc / sysconfig / network / profile / default ( vâng, tôi biết - nó dường như là một cái gì đó để làm với công cụ mà bạn sử dụng để thiết lập bộ điều hợp). Đầu tiên nên là người tạo ra sự khác biệt, nhưng bạn cũng có thể cần phải đối phó với những người khác.
Linker3000

1
Lý do tôi hỏi và loại ảo hóa có vấn đề là nó quyết định quá trình nhân bản trông như thế nào. Một bản sao VMware trên cùng một máy chủ sẽ không thay đổi phần cứng mạng ảo trừ khi bạn bảo nó. Trong trường hợp của bạn, vấn đề không phải là địa chỉ mac cũng như quá trình nhân bản, đó là bạn đang thay đổi phần cứng ảo.
OldWolf

1

Tôi không sử dụng Vmware nhưng KVM với virsh - đây là những gì tôi đã làm.

Đã tạo hình ảnh 'cơ sở' với CentOS 6.4, đây là nguồn gốc của tất cả các bản sao của tôi. Sau lần khởi động đầu tiên tôi đã tạo một kịch bản như thế này

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

Đã thêm nó vào init với

chkconfig --add manglemac

Đã xóa tất cả các tham chiếu vào / etc / sysconfig / network-scripts / ifcfg-eth0 của HWADDR hoặc UUID, cũng đã xóa các quy tắc udev khỏi /etc/udev/rules.d/70-persistent-net.rules.

Lúc này tôi tắt máy và bắt đầu nhân bản. Tất cả đều hoạt động tốt. Kịch bản tôi thực hiện rất đơn giản nhưng hoạt động tốt, tuy nhiên nó đưa ra một vài giả định về thiết lập của bạn cho mạng (chỉ eth0).

Tôi hy vọng sẽ giúp.


0

Tôi đã làm việc với nhiều NIC và không có gì ở trên làm việc cho tôi (VMware Fusion 7 / VMware 6 trở xuống), vì vậy tôi đã viết một kịch bản. Tarball là đây .

Đây là READMEcái đi kèm với nó:

  • Tarball và các tập lệnh liên quan này sẽ thay đổi địa chỉ MAC của máy VMware CentOS 6 được sao chép gần đây của bạn (không có systemd.)
  • Tất cả những gì bạn cần làm trong máy bạn sẽ chỉ nhân bản một lần duy nhất:

    1. Tải về lshw
    2. thay thế địa chỉ MAC trong tất cả các bạn /etc/sysconfig/network-scripts/ifcfg-eth?với MACDADDY num nơi num là số giao diện mạng. Bạn cần phải làm theo mẫu đặt tên cho tập tin.
    3. chạy:

      chckconfig change_mac_address on
      

      Điều này sẽ thêm các liên kết sym ở các mức chạy phù hợp được chỉ định trong tệp

    4. Nhân bản máy như bình thường và kích hoạt nó lên. Nó sẽ thay đổi địa chỉ MAC trong mỗi ifcfg-eth?tệp của bạn ,
      • xóa tập tin udev,
      • quét lại thiết bị e1000 của bạn,
      • và khởi động lại mạng

Các vấn đề:

  • Không chắc chắn tại sao, nhưng đôi khi bạn cần khởi động lại mạng lần thứ hai để nhận được tất cả các NIC:

    /etc/init.d/network restart
    

    Đã sửa lỗi này bằng cách đặt dấu sleep 20ở đầu/etc/init.d/network

  • Đây không phải là một vấn đề đối với tôi, nhưng kịch bản dựa vào việc lshwtrả lại các NIC theo thứ tự nhưifcfg-eth?
  • Điều này giả định (các) thiết bị NIC của bạn là e1000. Tiêu chuẩn VMware?
  • Có thể đáng để chuyển đổi cách đánh số các ifcfg-eth?tệp của bạn để chúng khớp với những gì lshwđược trả lại trong trường hợp không chắc là nó không hoạt động và bạn đang làm nhiều máy có nhiều NIC.
  • Với một NIC, nó sẽ hoạt động.
  • Sau lần khởi động đầu tiên, /usr/bin/change_mac_address.plnó được chuyển đến/usr/bin/change_mac_address.pl.old
  • Điều này sẽ giữ cho nó không chạy trên mỗi lần khởi động lại mặc dù nó sẽ không làm gì nếu không có MACDADDY? trong bạnifcfg-eth?
  • Bạn cũng có thể và có lẽ nên chạy

    chkconfig change_mac_address off
    
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.