FreeBSD QandA 1866
Q. FreeBSD 4.2-RELEASE において、jail 環境上でシェアードメモリを使う
ソフトウェアを動かしたいのですが、たとえば PostgreSQL ならば
IpcMemoryIdGet: shmget failed (Function not implemented) key=5432010, size=144, permission=0
IpcMemoryAttach: shmat failed (Function not implemented) id=-2
FATAL 1: AttachSLockMemory: could not attach segment
とのエラーメッセージが報告されて起動できません。
カーネルは options SYSVSHM をつけて構築してありますし、jail 環境上
で ipcs -M を実行しても有意な数値が出るのに何故でしょうか。
A. 4.2-RELEASE の場合 jail の親環境でシェアードメモリがサポートされて
いたとしても、名前空間が jail 環境と親環境、あるいは別の jail 環境
で共用されていることに起因するセキュリティ上の危険性を理由として
標準状態では jail 環境からシェアードメモリへのアクセスはできません。
危険性をふまえた上でこの制限を解除するには、システム変数
jail.sysvipc_allowed を 1 にする必要があります。
コマンドラインから手動でこれをセットする場合には、次のようにします。
# sysctl -w jail.sysvipc_allowed=1
あるいは、/etc/sysctl.conf に jail.sysvipc_allowed=1 という
記述を入れれば、親環境の起動時に自動的に上のコマンドが実行される
ようになります。
詳しくは jail(8) の Sysctl MIB Entries の項目を参照してください。
なお、この制限は 4.1.1-RELEASE (正確には 2000/11/01 以前の
4.x-STABLE) 以前のバージョンにはありません。[FreeBSD-users-jp 60031]
間違い・追加情報を見付けた場合は、
修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで
お知らせください。