起動時にresolv.confが何者かに上書きされた時に更に上書きをする戦い

February 7, 2015

みんなこういうのはどういう対応しているんだろう

常松先生が一瞬で解決方法を教えてくれました。
ありがとうございます!

resolv.confが圧倒的暴力によって上書きされる場合

対応としてresolv-updateみたいな雑なサービス定義をして、サーバ起動時に実行させるようにした。
ポイントはcloud-initとかそれ系のヤツが実行される前に上書いてもその後に上書きされるのでタイミングが大切。

ここの

# chkconfig: 2345 49 49

49 49の最初の数字が起動時に実行される順番で、後ろの数字が終了時に実行される順番。

$ chkconfig --add resolv-update

とすることで自動に実行されるようになる。

runlevel 3のものを確認したければ/etc/rc3.d/とか見ればわかる。

#!/bin/sh
#
# resolv-update
# create by kenjiskywalker
#
# chkconfig: 2345 49 49
# 

lock_file="/var/lock/subsys/resolv-update"
redis_port="6379"

start()
{
    # lock_fileを生成しないとshutdownの時に実行されない
    touch ${lock_file}

    # 圧倒的暴力によってresolv.confが上書きされていたら更に上書きする
    if [[ -z "`grep 'nameserver 127.0.0.1' /etc/resolv.conf`" ]]
    then
        sed -i '1s/^/nameserver 127.0.0.1\n/' /etc/resolv.conf
    fi
}

stop()
{
    # lock_fileの削除
    rm -r ${lock_file}
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    *)
        echo "Usage: $0 {start|stop}"
    ;;
esac

exit 0

Systemd?はて?