システムワイドなロケール設定 〜 Solaris
Solaris でのシステムワイドなロケール設定の取り扱いに関して、調べた結果を備忘録代わりにまとめておきます。
"Solaris" と表記してはいますが、基本的に OpenIndiana 等の OpenSolaris 系環境を対象としています。
Solaris 10 やそれ以前の Solaris 環境での作法とは異なる可能性がありますので、注意してください(一応、Oracle Solaris 11 に関する情報も末尾に付記してあります)。
設定格納先
Solaris の場合、システムワイドなロケール設定は /etc/default/init
ファイルに、以下のような形式で記述されています。
LANG="en_US.UTF-8"
/etc/default/init
中のコメントにも記述がありますが、/etc/TIMEZONE
は /etc/default/init
へのシンボリックリンクになっているので、/etc/default/init
中には LANG 以外にも TIMEZONE 設定等が記述されています。
設定更新方法
システムワイドなロケール設定は、/etc/default/init
の直接書き換えが必要です。
当然ルート権限が必要ですから、pfexec
経由でエディタを起動するなりしてください。
# pfexec emacs /etc/default/init
設定内容の反映契機
/etc/default/init
という名前から、既に想像が付いているかもしれませんが、このファイルは init(1M) プロセス起動時に読み込まれるファイルです。
init プロセスは、UNIX 上で動作する全てのプロセスの大本になるプロセスですから、/etc/default/init
が再度読み込まれるのは、次の起動時=再起動後ということになります。
Oracle Solaris 11 でのシステムワイドなロケール設定
Oracle Solaris 11 では、/etc/default/init
で管理されていたシステムワイドなロケール設定が、SMF 経由で管理されるようになりました(私自身は未確認)。
そのため、以下のような手順を踏むことで、再起動無しにシステムワイドなロケール設定を変更することができる模様です。
# svccfg -s svc:/system/environment:init \ setprop environment/LANG = astring: ja_JP.UTF-8 # svcadm refresh svc:/system/environment
OpenIndiana (151a7) では、利用可能なサービス一覧で svc:/system/environment:init
が列挙されませんので、Oracle Solaris 11 (あるいは 151a7 以降) に固有の機能みたいです。