ゾーンファイルのシリアル値更新忘れ防止策
ゾーンファイルのリソースレコードを変更したとき、うっかりシリアル値の変更を忘れてしまうことがよくあります。
これではセカンダリにゾーン転送されません。
というわけで、更新忘れを防止するスクリプトを作ってみました。
特定の文字列を unix time に置き換えるだけのもの。
既にいろんな人が作ってそうなスクリプトです。
事前準備
ゾーンファイルが格納されているディレクトリを /etc/nsd/zones とします。
# cp -a /etc/nsd/zones /etc/nsd/edit
として、/etc/nsd/edit
を編集用ディレクトリとします。
そして、/etc/nsd/edit
以下すべてのゾーンファイルのシリアル値を、以下のように編集します。
シリアル値に当たる部分を、_SERIAL_
に書き換えます。
$TTL 3600
@ IN SOA dns1.example.com. hostmaster.example.com. (
_SERIAL_ ;Serial
3600 ;Refresh
600 ;Retry
604800 ;Expire
3600 ) ;negcache
スクリプト作成
updateserial.sh
#!/bin/sh
#
# 20110908
# update serial
#
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/sbin:/usr/sbin
export PATH
#
# error
#
if [ $# = 0 ]; then
echo "usage:"
echo "${0} [file ...]"
exit 1
fi
#
# define
#
DIR_ZONES=/etc/nsd/zones
COMMENT=_SERIAL_
SERIAL=`date +%s`
#
# process
#
while [ "${1}x" != "x" ]; do
if [ -f "${1}" ]; then
sed -e "s/${COMMENT}/${SERIAL}/" ${1} > ${DIR_ZONES}/${1} && \
echo "updated : ${1}"
else
echo "file not found : ${1}"
fi
shift 1
done
パスの通ったところに置いておきます。
# ln -s updateserial.sh /usr/local/bin
使い方
編集したゾーンファイルを引数に指定します。複数指定しても OK です。
# cd /etc/nsd/edit
# updateserial.sh example.com
最後に
そもそも、このスクリプトを実行し忘れたら意味ないな、と思いました。
でも、シリアル値を手動で書き換える作業自体めんどくさいので、よしとしましょう。