LS-VL(LS-XHL)上のDebianでDHCPクライアントとして失敗する話

はじめに

最近、Debianに乗せ換えたLS-VLを引っ張り出し、 アップデートをかけようとしたところ、 ネットワークからアクセスできないようになっていた。

ディスクを取り出してログを眺めてみると、 "Unable to set up timer: unexpected error"などと出ており、 DHCPクライアントのデーモンが起動に失敗しているらしい。

ネットで調べてみると、時刻があまりにおかしい場合、 DHCPクライアントが起動するのをやめるらしいとの情報があった。

対策

LS-VLは(LS-XHLも)、電池でバックアップされるRTCは 持っていないはずなので、起動時におかしな時刻になるのは仕方がない。 ただ、今までは何とかネットワークにつないで、 外部の時刻をもらうことで問題なく使えていたので、 そこから変更があると嬉しくない。

そこで、一時しのぎかもしれないが、DHCPクライアントが文句が出ない程度に 時刻を設定して、ネットワークにつなげられるようにし、 後は今までの何かに適当にやってもらうことにした。

手順

まず、"/etc/init.d/mysetyear.sh"という名前で、 以下の内容のファイルを作成する。

#! /bin/sh
### BEGIN INIT INFO
# Provides:          mysetyear
# Required-Start:       hwclock mountall
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: rectify year for dhcpclient
# Description:       rectify year for dhcpclient
### END INIT INFO

PATH=/sbin:/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start () {
        [ -x /usr/bin/logger ] && /usr/bin/logger "$(date)"
        if [ `date '+%s'` -lt `date -d '2015-01-01' '+%s'` ]; then
            date -s '2015-01-01'
        fi
        [ -x /usr/bin/logger ] && /usr/bin/logger "$(date)"
}

do_status () {
        date
}

case "$1" in
  start|"")
        do_start
        ;;
  restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
  stop)
        # No-op
        ;;
  status)
        do_status
        exit $?
        ;;
  *)
        echo "Usage: mysetyear.sh [start|stop]" >&2
        exit 3
        ;;
esac

このファイルを作成したら、以下のコマンドで実行権を付与し、 さらに起動スクリプトとして登録する。

# chmod 755 /etc/init.d/mysetyear.sh
# update-rc.d mysetyear.sh defaults

多分これで動くようになるのではないかと思われる。

(2015/04/01 作成)