niedziela, 15 lipca 2012

Bind, sed, hosty i dopełnianie

W ostatnim poście pisałem jak usprawnić dopełnianie nazw hostów w dużym środowisku. Polecałem wtedy polecenie "rndc dumpdb -zones". Jak się jednak okazuje, potrafi ono często zwrócić segmentation fault. Chcąc nie chcąc w takim przypadku trzeba użyć jakiegoś toola który przeleci konfiguracje bind-a. Dla mnie, najprostszym rozwiązaniem było użycie polecania sed:

$ cat bind2hostname.sh
#!/bin/bash

sed -n '
{
:loop
s/\$ORIGIN[ \t]\+\(.*\)\./\1/
T nextcheck
h
n

:nextcheck
s/^\([[:alnum:].-]\+\).*IN.*/\1/
t hostname
n
b loop

:hostname
G
s/\n/./
p
d
n
b loop
}'

Działanie skryptu jest bardzo proste. Wyszukuje wartości dla parametru ORIGIN i dokleja je do znalezionych nazw hostów. Teraz wystarczy dodać do crona polecenie podobne do tego poniżej

$ cat /etc/bind/P/+([a-z.-]) | /home/scripts/bind2hostname.sh > /etc/named_hosts.db

Można jeszcze pokusić się o dopisanie adresów ip i wrzucenie tego wszystkiego do /etc/hosts. Mi jednak tyle wystarczy, a konfiguracja binda nie zawsze jest łatwa do parsowania :)