среда, 27 октября 2010 г.

Перенос DHCP-сервера

Встала задача - перенести настройки с DHCP-сервера Windows на DHCP-сервер в Linux. Основные настройки можно перенести и вручную, а вот таблицу с привязками имени, MAC- и IP-адреса каждого компьютера переносить вручную мне было лень. Было лень настолько, что я принялся писать конвейер для командной строки, который преобразует мне всю таблицу из одного формата в другой.

Для начала я снял дамп настроек DHCP-сервера в Windows:
netsh dhcp server \\11.11.11.1 dump > dump.txt
Потом я перенёс этот файл в Linux, сменил его кодировку и после получаса мучений, наваял такой конвейер (для того, чтобы увидеть целиком, придётся, видимо, скопировать его и вставить в текстовый редактор):
grep "Dhcp Server" dump.txt | \
  cut - -f8,9,10 -d" " | \
  grep domain | \
  cut -d. -f1-4 | \
  sed -e 's/\"//g' - | \
  sed -e 's/\(.*\) \(.*\) \(.*\)/\2 \1 \3/g' - | \
  sed - -e 's/^\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)/\1\2:\3\4:\5\6:\7\8:\9/g' | \
  sed - -e 's/:\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)\([0-9a-f]\)/:\1\2:\3\4/g' | \
  sed -e 's/\(.*\) \(.*\) \(.*\)/\thost \3 {\n\t\thardware ethernet \1;\n\t\tfixed-address \2;\n\t}/g' - \
  > hosts.txt
Эта строчка находит в файле dump.txt строки вида:
Dhcp Server 11.11.11.1 Scope 11.0.0.0 Add reservedip 11.11.11.11 00AABBCCDDEE "computer.domain" "" "DHCP"
И переделывает их в строки вида:
host computer {
  hardware ethernet 00:AA:BB:CC:DD:EE;
  fixed-address 11.11.11.11;
}
Которые записывает в текстовый файл hosts.txt.

Комментариев нет: