2009年4月 9日

[gentoojp-users:02131] Re: うるう秒

黒田です。
アドバイスありがとうございます。

問題を整理するため、もう一度インストールからやり直しました。
gentoo handbook にしたがってインストールします。
install-x86-minimal-2008.0.iso を使って、
ほぼ書いてあるとおりに進めました。
途中、ゾーンファイルは(リンクでなく)コピーした後、

date コマンドで手元の時計(今回はこれが基準)に合わせました。
# cp /usr/share/zoneinfo/right/Japan /etc/localtime
# ls -l /usr/share/zoneinfo/right/Japan /etc/localtime
-rw-r--r-- 1 root root 791 Apr 10 2009 /etc/localtime
-rw-r--r-- 2 root root 791 Feb 14 2008 /usr/share/zoneinfo/right/Japan
# date MMDDhhmmYYYY
# cat /etc/conf.d/clock | grep TIMEZONE
TIMEZONE="right/Japan"

その後、rubyをインストールし教えてもらったコマンドを試しました。
$ TZ=/usr/share/zoneinfo/right/Japan ruby -e 't = Time.now; p t,t.getutc,t.tv_sec'
Thu Apr 09 13:43:02 +0900 2009 →手元の時計と一致
Thu Apr 09 04:43:02 UTC 2009 →手元の時計 -9h =OK
1239252205

$ TZ=/usr/share/zoneinfo/Japan ruby -e 't = Time.now; p t,t.getutc,t.tv_sec'
Thu Apr 09 13:43:35 +0900 2009 →手元の時計 +23s
Thu Apr 09 04:43:35 UTC 2009 →手元の時計 -9h +23s =OK
1239252215

教えてもらったリンク先に書かれているように
1行目と2行目では、ちょうど 9 時間の差があり、
Japan では、手元の時計に対して 23 秒差あるのが正解だと思うので、
いずれも問題なく期待したとおりの結果でした。

また他のサイトから得た情報で、
「2009年1月1日9時0秒 の UNIX time を得る」を試したところ
$ perl -e 'use POSIX; printf("%d\n", mktime(0, 0, 9, 1, 0, 109));'
1230768023
これもOKです。

この時点では、
sys-libs/glibc-2.6.1
sys-libs/timezone-data-2007k
↑↑ ここまではOKです。↑↑

↓↓ ここからが問題です。↓↓
ここで、更新をかけ(*1)、再度確認します。
# emerge -au world
更新後は、
sys-libs/glibc-2.8_p20080602-r1
sys-libs/timezone-data-2009b

ゾーンファイル確認
$ ls -l /usr/share/zoneinfo/right/Japan /etc/localtime
-rw-r--r-- 1 root root 811 Apr 9 16:16 /etc/localtime
-rw-r--r-- 2 root root 811 Apr 9 13:54 /usr/share/zoneinfo/right/Japan
TIMEZONE="right/Japan" としてあるので、自動的にコピーされたようです。

$ TZ=/usr/share/zoneinfo/right/Japan ruby -e 't = Time.now; p t,t.getutc,t.tv_sec'
Thu Apr 09 16:23:30 +0900 2009 →手元の時計と一致
Thu Apr 09 07:23:06 UTC 2009 →手元の時計 -9h -24s =NG
1239261810

$ TZ=/usr/share/zoneinfo/Japan ruby -e 't = Time.now; p t,t.getutc,t.tv_sec'
Thu Apr 09 16:25:00 +0900 2009 →手元の時計と一致
Thu Apr 09 07:25:00 UTC 2009 →手元の時計 -9h =NG
1239261899

2009年1月1日9時0秒 の UNIX time を得る
$ perl -e 'use POSIX; printf("%d\n", mktime(0, 0, 9, 1, 0, 109));'
1230768000
やはり、うるう秒を考慮していないようです。

また教えてもらったリンク先では、ゾーンファイルに問題があったようなので、
$ wget ftp://elsie.nci.nih.gov/pub/tzdata2009d.tar.gz
ダウンロードして手動で作成してみましたが、状況は変わりませんでした。

ということで行き詰ってしまいました。
また時間があるときに色々やってみたいと思います。
ちなみに、上記で「right/Japan」としているところを「Japan」として設定して
いれば(普通はそうすると思いますが)、今回の問題は表面には出てこないかも
しれません。しかしこれだと clockspeed が使えない・・・。
おとなしく ntp にしようと思いますが、やはり気持ち悪いです・・・。

*1: 以下は、emerge -au world で更新されたパッケージです
[ebuild N ] app-arch/lzma-utils-4.32.7 USE="-nocxx"
[ebuild U ] sys-devel/gnuconfig-20080928 [20070724]
[ebuild U ] dev-libs/gmp-4.2.4 [4.2.2]
[ebuild U ] sys-devel/autoconf-wrapper-6 [4-r3]
[ebuild U ] sys-libs/timezone-data-2009b [2007k]
[ebuild U ] app-arch/bzip2-1.0.5-r1 [1.0.5]
[ebuild U ] app-arch/cpio-2.9-r2 [2.9-r1]
[ebuild U ] sys-kernel/linux-headers-2.6.27-r2 [2.6.23-r3]
[ebuild U ] sys-devel/m4-1.4.12 [1.4.11]
[ebuild U ] dev-libs/mpfr-2.4.1_p1 [2.3.0_p4]
[ebuild U ] net-misc/iputils-20071127 [20070202] USE="-ipv6*"
[ebuild U ] app-shells/bash-3.2_p39 [3.2_p17-r1] USE="-examples%"
[ebuild U ] sys-apps/less-418 [416]
[ebuild U ] sys-libs/readline-5.2_p13 [5.2_p7]
[ebuild N ] virtual/pager-0
[ebuild U ] dev-libs/openssl-0.9.8k [0.9.8g-r2]
[ebuild U ] sys-apps/texinfo-4.13 [4.8-r5]
[ebuild U ] sys-apps/sed-4.1.5-r1 [4.1.5]
[ebuild U ] sys-devel/flex-2.5.35 [2.5.33-r3]
[ebuild U ] sys-apps/findutils-4.4.0 [4.3.11]
[ebuild N ] dev-perl/Locale-gettext-1.05
[ebuild U ] app-arch/gzip-1.3.12-r1 [1.3.12]
[ebuild U ] sys-apps/gawk-3.1.6 [3.1.5-r5]
[ebuild U ] app-arch/tar-1.20 [1.19-r1]
[ebuild U ] net-misc/wget-1.11.3 [1.10.2] USE="-ipv6*"
[ebuild U ] sys-apps/net-tools-1.60_p20071202044231-r1 [1.60-r13]
[ebuild U ] sys-devel/autoconf-2.63 [2.61-r1]
[ebuild N ] sys-apps/help2man-1.36.4 USE="nls"
[ebuild N ] sys-devel/bc-1.06.95 USE="readline -libedit -static"
[ebuild U ] sys-apps/which-2.19 [2.16]
[ebuild U ] sys-devel/automake-1.10.2 [1.10.1]
[ebuild U ] sys-devel/libtool-1.5.26 [1.5.24]
[ebuild U ] sys-apps/acl-2.2.47 [2.2.45]
[ebuild U ] sys-apps/groff-1.20.1-r1 [1.19.2-r1] LINGUAS="-ja%"
[ebuild U ] sys-process/psmisc-22.6 [22.5-r2] USE="-ipv6*"
[ebuild U ] sys-apps/coreutils-6.10-r2 [6.10-r1]
[ebuild U ] sys-apps/man-1.6f-r3 [1.6e-r3] USE="-lzma%"
[ebuild U ] net-misc/rsync-3.0.5 [2.6.9-r6] USE="iconv%* -ipv6* -xattr%"
[ebuild U ] sys-devel/binutils-2.18-r3 [2.18-r1]
[ebuild NS ] dev-lang/python-2.5.2-r7 [2.4.4-r13] USE="berkdb gdbm ncurses readline ssl threads xml -build -doc -examples -ipv6 -sqlite -tk -ucs2 -wininst"
[ebuild U ] sys-libs/cracklib-2.8.13 [2.8.10]
[ebuild U ] sys-apps/file-4.23 [4.21-r1]
[ebuild U ] sys-apps/module-init-tools-3.5 [3.4]
[ebuild U ] sys-fs/udev-124-r1 [115-r1]
[ebuild NS ] sys-devel/gcc-4.3.2-r3 [4.1.2] USE="fortran mudflap nls openmp (-altivec) -bootstrap -build -doc (-fixed-point) -gcj -gtk (-hardened) -ip28 -ip32r10k -libffi (-multilib) -multislot (-n32) (-n64) -nocxx -nopie -objc -objc++ -objc-gc -test -vanilla"
[ebuild U ] sys-libs/glibc-2.8_p20080602-r1 [2.6.1]
[ebuild U ] sys-libs/pam-1.0.4 [0.99.9.0]
[ebuild N ] sys-auth/pambase-20081028 USE="cracklib sha512 -consolekit -debug -gnome-keyring -mktemp -passwdqc (-selinux) -ssh"
[ebuild U ] sys-apps/shadow-4.1.2.2 [4.0.18.1-r1] USE="-audit%"
[ebuild U ] sys-apps/busybox-1.13.2 [1.8.2]
[ebuild U ] net-misc/openssh-5.2_p1-r1 [4.7_p1-r6] USE="-pkcs11%"
[ebuild U ] sys-apps/man-pages-3.19 [2.76] LINGUAS="-cs% -da% -de% -es% -fr% -it% -ja% -nl% -pl% -ro% -ru% -zh_CN%"
[ebuild N ] sys-apps/man-pages-posix-2003a
[ebuild N ] sys-libs/e2fsprogs-libs-1.41.3-r1 USE="nls"
[ebuild U ] sys-apps/util-linux-2.14.1 [2.13.1.1] USE="(-uclibc)"
[ebuild U ] sys-fs/e2fsprogs-1.41.3-r1 [1.40.8]
[blocks b ] <sys-fs/e2fsprogs-1.41 ("<sys-fs/e2fsprogs-1.41" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[uninstall ] sys-libs/com_err-1.40.8
[blocks b ] sys-libs/com_err ("sys-libs/com_err" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)
[uninstall ] sys-libs/ss-1.40.8
[blocks b ] sys-libs/ss ("sys-libs/ss" is blocking sys-libs/e2fsprogs-libs-1.41.3-r1)

On Thu, 9 Apr 2009 08:34:43 +0900
MATSUU Takuto <matsuu@xxxxx> wrote:

> 松鵜です。
>
> 手元の環境はsys-libs/glibc-2.8_p20080602-r1なのですが、
> 以下で表示される日時が異なるのを確認しました。
>
> $ TZ=/usr/share/zoneinfo/right/Japan ruby -e 't = Time.now; p
> t,t.getutc,t.tv_sec'
> $ TZ=/usr/share/zoneinfo/Japan ruby -e 't = Time.now; p t,t.getutc,t.tv_sec'
>
> clockspeedでは未確認です。このあたりはどうでしょう?
>
> 参考: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/22849
>
> ちなみに、今回の問題とはおそらく無関係ですが、
> gentoo handbookには昔は、
> # ln -sf /usr/share/zoneinfo/Japan /etc/localtime
> と書かれていましたが、今は
> # cp /usr/share/zoneinfo/Japan /etc/localtime
> になっているはずです。参考まで。
>
> 2009/4/9 kuroda <kuroda@xxxxx>:
> > 1点間違いがありました。
> > 一番下の方の
> > # ln -sf /usr/share/zoneinfo/GMT /etc/localtime
> > の場合は変化があり、
> > # date(05:35:00に打ち込み)
> > Wed Apr 8 20:34:36 GMT 2009
> > でした。
> >
> > 黒田
> >
> >
> > On Thu, 09 Apr 2009 05:29:11 +0900
> > kuroda <kuroda@xxxxx> wrote:
> >
> >> 初めまして、黒田と申します。
> >>
> >> 時刻調整に、clockspeed を使っています。
> >> http://www.gentei.org/~yuuji/support/uu/200207/part5.html
> >> この場合、うるう秒に対応させる必要があるようで、
> >> # ln -sf /usr/share/zoneinfo/right/Japan /etc/localtime
> >> としています。
> >> ちなみに、
> >> # ln -sf /usr/share/zoneinfo/Japan /etc/localtime
> >> に切り替えると、(うるう秒を考慮しない)24秒進んだ時刻になります。
> >> ゾーンファイルの中身を見ても、「right」の方にはうるう秒らしきものが挿入
> >> されており、合点して使っていました。少なくとも数年はこれで問題ありません
> >> でした。
> >>
> >> ところが、先日
> >> # emerge -u world
> >> してから、うるう秒に対応しなくなってしまいました。
> >> # date
> >> と打つと、24秒進んだ時刻を表示し、ゾーンファイルを切り替えても、
> >> # ln -sf /usr/share/zoneinfo/right/Japan /etc/localtime
> >> # ln -sf /usr/share/zoneinfo/Japan /etc/localtime
> >> どちらも同じ結果(24秒進んだ時刻)を返すようになってしまいました。
> >>
> >> 色々試したところ、glibcをマスクすれば、
> >> # cat /etc/portage/package.mask
> >> >sys-libs/glibc-2.6.1
> >> OKということを確認しましたが、あまりよい解決策とは思えません。
> >> そこで、今回初めて ntp を試してみたところ、影響なく正常でした。
> >> もう clockspeed はやめて、ntp にしようかと思い始めているところですが、何
> >> か釈然としません。
> >>
> >> 今までの「/etc/localtime の指すゾーンファイルを切り替えることによって、
> >> 時刻が変化する」というメカニズムは、今後は機能しないと考えたほうがよいの
> >> でしょうか?
> >> ちなみに、現在の ntp 環境では、
> >> # ln -sf /usr/share/zoneinfo/right/Japan /etc/localtime
> >> # ln -sf /usr/share/zoneinfo/Japan /etc/localtime
> >> # ln -sf /usr/share/zoneinfo/GMT /etc/localtime
> >> どれに切り替えても変化なく、正しい時刻を返します。
> >> ntp を使った場合は、こういうものなのでしょうか?
> >>
> >> 何かアドバイスをいただけると幸いです。
> >> よろしくお願いします。
> >>
> >> 黒田
> >>
> >
> >
> >

投稿者 xml-rpc : 2009年4月 9日 17:51
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/84069
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。