Ubuntu 16.04 (Xenial) 以降のタイムゾーン設定方法
debconf を使う場合は、次のようにする。
sudo ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime
sudo dpkg-reconfigure -f noninteractive tzdata
16.04 以降の推奨方法
これらのチケットによると、
- Bug #1554806 “Change of behavior: “dpkg-reconfigure -f nonintera...” : Bugs : tzdata package : Ubuntu
- #813226 - tzdata config script ignores /etc/timezone on non-interactive configuration - Debian Bug report logs
Thus the preferred approach for changing the timzone is indeed the change of the /etc/localtime symlink, followed by dpkg-reconfigure.
とのことで、ubuntu 16.04 以降 (tzdata 2016a-1 以降) は、/etc/localtime に symlink をはり dpkg-reconfigure をするのが推奨される方法らしい。よって巷の古い記事にある /etc/timezone を変更するような方法では意図した挙動にならない。
背景を少し調べたメモ
debconfについて- Debian (Ubuntu) のパッケージは
.debフォーマットだが、debconfはパッケージごとに必要な設定を管理する統合的なフレームワーク。 - ユーザーとインタラクティブに設定値をやり取りしたり、それをデーターベースに保存してり読み込んだりする。
- debconf 論 の内容がわかりやすい
- ソース
- トラッカー
- Debian (Ubuntu) のパッケージは
dpkg-reconfigure- debconf でインストール済みのパッケージの再設定と反映をさせるコマンド
- dpkg-reconfigure · master · Debconf Maintainers / debconf · GitLab にソースあある
- dpkg-query –control-path your_pkg でそのパッケージの管理スクリプトのパスが返されるが、dpkg-reconfigure はそれらを再度実行するような処理をしている
- 設定は
config、そのほかpostrmはパッケージ削除後の処理、postinitはインストール後の処理っぽい - postrm, config, postinit の順で処理を呼び出している
- 設定は
tzdata- Linux はローカルタイムゾーンとして
/etc/localtimeをみにいく。/etc/localtimeには/usr/share/zoneinfo/*への symlink を置く必要がある。 tzdataは/usr/share/zoneinfoを debian のマナーで管理する。debconf でデフォルトを保存したりしている。(ので、/etc/localtimeへの symlink はっただけでdpkg-reconfigureをしないと中途半端になる)- ソース
- トラッカー
- 参考
- Linux はローカルタイムゾーンとして
systemd は?
timedatectl という systemd 由来のコマンドもある。
# タイムゾーン名確認
$ timedatectl list-timezones | grep Tokyo
Asia/Tokyo
# 設定
$ sudo timedatectl set-timezone Asia/Tokyo
# 確認
$ timedatectl
Local time: ...snip
systemd を使える環境ならばこちらの方法に寄せるべきなのか、debconf を使ったほうがよいのか、どちらが良いのかはよくわからない。