1

Клонирование виртуальных машин создает новый сетевой интерфейс на виртуальных машинах CentOS/RedHat. Мне нужно переименовать ifcfg-eth * в то же имя, что и живой интерфейс на виртуальной машине.

Я хотел бы использовать скрипт для сравнения MAC-адреса действующего сетевого адаптера (взяв его из результата 'ifconfig') tp MAC-адресов во всех существующих файлах ifcfg- * и переименовать соответствующий в ifcfg-liveNICname.

Пример:

# ifconfig
eth2      Link encap:Ethernet  HWaddr 00:50:56:8F:5B:D5

в /etc /sysconfig /network-scripts / есть 3 файла конфигурации:

ifcfg-eth0
ifcfg-Auto_eth0
ifcfg-eth1

Сценарий сравнивает MAC-адрес 00:50:56:8F:5B:D5 с MAC-адресами во всех 3 файлах и переименовывает правильный (с соответствующим MAC-адресом) в:

ifcfg-eth2

Желательно также изменить строку NAME в файле ifcfg:

NAME=eth2

но не обязательно.

Мне нужно это «исправить», чтобы я мог запустить скрипт на кучу виртуальных машин, чтобы изменить записи DNS за один раз. У меня есть сценарий для этого, но при запуске на тестовой виртуальной машине он создает новый файл ifcfg-eth2, содержащий только DNS-записи, в то время как активный интерфейс имеет другое имя в файле, например, ifcfg-eth0

Поскольку я плохо разбираюсь в сценариях, я начал с этого:

nic=$(/sbin/route -n | grep "^0.0.0.0" | rev | cut -d' ' -f1 | rev)
ifconfig -a | grep $nic`

и это все, что я получил :(

Может кто-нибудь помочь, пожалуйста?

2 ответа2

0

Если я вас правильно понимаю, вы хотите получить MAC-адрес используемой в настоящее время сетевой карты, а затем найти файл в /etc/sysconfig/network-scripts/ котором упоминается этот MAC-адрес, и переименовать этот файл в ifcfg-NIC где находится NIC сетевое устройство, найденное ранее. Если так, это должно работать:

#!/usr/bin/env bash

## Get the NIC's name
# nic=$(/sbin/route -n | awk '/^0\.0\.0\.0/{print $NF}')
nic=$(/sbin/ip route show | awk '/default/{print $5}')


## Get the NIC's MAC address
#mac=$(/sbin/ifconfig "$nic" | grep -oP 'HWaddr\s*\K[^\s]*')
mac=$(/sbin/ip link show "$nic" | grep -oP 'ether\s*\K[^\s]*')

## Get the file name. This assumes that there will only
## be one matching file. 
file=$(grep -lm 1 "$mac" /etc/sysconfig/network-scripts/*)

## Change the NAME line to the new NIC and make
## a backup copy of the file called "$file.bak".
sed -i.bak -r "s/NAME=(.*)/NAME=$nic/" "$file"

## Rename the file
mv "$file" "$(dirname "$file")"/ifcfg-"$nic"
0

Я не уверен, что понимаю, что вы хотите сделать.

Вы хотите сменить DNS-серверы? Они находятся в файле /etc/resolv.conf независимо от имени сетевой карты.

Вы хотите, чтобы все клоны имели одинаковые MAC-адреса? Разные MAC-адреса? вручную выбранные MAC-адреса? Читать дальше.

Проще всего назначить вручную MAC-адреса ваших сетевых карт для каждой (клонированной или нет) виртуальной машины.

Инструкции для этого в Интернете, см., Например, здесь. Отредактируйте файл VM .vmx, сотрите строки, начинающиеся с

  ethernetN.generatedAddress
  ethernetN.addressType
  ethernetN.generatedAddressOffset 

и поставить на их место две строки

  ethernetN.address = "00:50:56:XX:YY:ZZ"
  ethernetN.addressType = “static”

где 00:50:56:XX:YY:ZZ - это MAC-адрес, который вы хотите ввести. Теперь сохраните файл, и все готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .