彷徨えるフジワラ

年がら年中さまよってます

システムワイドなロケール設定 〜 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 が再度読み込まれるのは、次の起動時=再起動後ということになります。

つまり、Solaris でのシステムワイドなロケール設定の変更は、再起動後にしか有効になりません

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 以降) に固有の機能みたいです。