/usr/portage が nfs な gentoo の selinux

……タイトルが日本語とはな感じですが。

複数の gentoo が稼働している環境だと /usr/portage を nfs で共用すること多いと思うんですが、nfs ゲスト側に selinux を適用したら emerge が失敗するようになりました。

/usr/portage/distfiles に書き込みができていませんでした。permission denied ですね。dmesg にはこんな感じで出てました。

[Thu May 18 20:30:49 2017] audit: type=1400 audit(1495107045.102:394): avc:  denied  { search } for  pid=2227 comm="wget" name="/" dev="0:38" ino=2 scontext=root:sysadm_r:portage_fetch_t tcontext=system_u:object_r:nfs_t tclass=dir permissive=0

最初は nfs サーバー側が 非selinux 環境なのが問題なのかと思っていたんですが、nfs ってそもそも label のエクスポートできないみたいなんですよね。だからサーバー側が selinux 環境であろうがなかろうが関係なくクライアント側でこんなコンテキストを付けてるみたいです。

# ls -dZ /usr/portage
system_u:object_r:nfs_t /usr/portage

ということは、nfs クライアント側になにか設定とか環境の作り方でミスがあるんでしょう。

結構調べて、残念な結果にたどり着きました。

 # getsebool -a
~(略)~
portage_enable_test --> off
portage_mount_fs --> off
portage_read_user_content --> off
portage_use_nfs --> off

portage_use_nfs なんて boolean が……w なのでコマンド1発で解決します。

# setsebool -P portage_use_nfs on

ちゃんとオフィシャルに書いてありましたw

https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:linux:gentoo_se_failed_to_emerge