そのOSSって、サマータイムに対応するの?時刻参照先はどこ?

こんにちは。サイオステクノロジー OSS サポート担当何敏欽です。

2020年東京五輪・パラリンピックの暑さ対策として、サマータイム (Daylight Saving Time) 導入案が国会で検討されています。システムに導入された OSS はサマータイムに対応しているか、対応している場合、どうやって設定するか、対応していない場合、どのような影響が発生するかを確認したいですよね。今回はこれらの質問をもって、いくつの OSS を確認していきます。

サマータイムの対応有無の確認

■tomcat

tomcat はサマータイムに対応しているかどうかを確認しましたが、残念ながら、tomcat はサマータイムに対応していません。でも、焦らないてください。まずは tomcat はどこの時間を参照しているかをソースコードで確認します。

169行目、System.currentTimeMillis() を実行し、時間を取得していることがわかります。System.currentTimeMillis() の処理は、JVM で定義されています。java のソースコードを確認します。

1105行目、gettimeofday()を使用して、時間を取得していることがわかります。System.currentTimeMillis() は gettimeofday() の返り値をそのまま使いますね。つまり、tomcat は OS のシステム時刻を参照します。

tomcat は OS のシステム時刻を参照ため、tomcat 自体はサマータイムへの対応は不要で、OS 側が対応するかどうかによります。OS 側の対処としては、サマータイムに対応したタイムゾーンの追加であり、またユーザはサマータイムに対応したタイムゾーンへシステムを変更することになります。

■Apache

Apache はサマータイムに対応しているかどうかを確認しましたが、残念ながら、Apache もサマータイムに対応していません。Apache ログ出力の際の時刻の基準をソースコードから確認しましたところ、gettimeofday 関数が該当することがわかりました。

774 行目、ログへの書込時間 (%D のための文字列作成箇所) は、log_request_duration_microseconds() 内で、現在時刻と処理開始時間との差分を文字列に変換しています。%D は apr_time_now() – r->request_time から算出しています。

1092行目、実際のログ書き込みのタイミングは、config_log_transaction() 内の log_writer() 部分で実際の書き込み処理が行われています。この関数内の process_item() [log_writer()が呼ばれる前] 内で log_request_duration_microseconds() の処理が行われます。

apr_time_now は非常に多く使われていますが、中身は gettimeofday であるようです。つまり、Apache も OS のシステム時刻を参照します。Apache は tomcat と同様に OS のシステム時刻を参照ため、Apache 自体はサマータイムへの対応は不要です。

■BIND、Postfix、Dovecot、freeradius、Tomcat-Connectors

BIND、Postfix、Dovecot、freeradius、Tomcat-Connectors はサマータイムに対応するかを確認しましたところ、これらの OSS もサマータイムに対応していません。でもこれらも全部 OS のシステム時刻を参照することを確認できましたので、tomcat と同様にそれぞれの OSS 自体はサマータイムへの対応は不要で、OS 側が対応するかどうかによります。

■OpenLDAP

OpenLDAP は、内部データについては GMT を使用するため、サマータイムの影響を受けません。また、ログについては rsyslog を介しての出力となり、ログの時刻は OS のシステム時刻を参照するため、tomcat と同様に OpenLDAP 自体はサマータイムへの対応は不要で、OS 側が対応するかどうかによります。

■Apache Ant

Apache Ant 1.7 (※) は全体としては OS の時刻を参照し、FTP 機能のみ別途サマータイム対応パラメータがあります。FTP はサーバとクライアント間でファイルを転送するプロトコルであり、サーバとクライアントが異なるタイムゾーンを使用する場合、時刻ずれが発生します。時刻ずれによる問題を防ぐため、FTP がサマータイムに対応するようになったと考えられます。

Apache Ant のマニュアルに Apache Ant 1.7 より FTP 機能はサマータイムに対応すると記載されています。

FTP がサマータイムに対応するということで、どのように設定すればいいかを調べたところ、こちらの URL が参考になりました。設定方法を下記に案内します。

<project name=”ftp-test” basedir=”.”>
<property name=”ftp.server.timezone” value=”GMT”/>
(略)
<target name=”timed.test.put.older”>
(略)
<ftp action=”put”
(略)
serverTimeZoneConfig=”${ftp.server.timezone}”
>

tzdata および tzdata-java パッケージ

今後日本にサマータイムが実際に導入されれば、ローカルタイムの元情報となる日本版サマータイムを追加したタイムゾーン情報や、適用期間ルールなどの情報を含む tzdata および tzdata-java パッケージがりリリースされると予想されます。

そのため、RHEL、CentOS、Fedora 等 RedHat 系のシステムであれば、tzdata および tzdata-java パッケージをアップデートすることで対応可能と考えられます。

以上で各 OSS はサマータイムに対応するか否か、それぞれの時刻参照先及び対応方法について説明しました。

>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*