2014年3月3日月曜日

Portage の userpriv feature

vmware-modules が以下のエラーで emerge できず、しばらく VMware Player を使えていなかった。
# emerge -av1 vmware-modules

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ~] app-emulation/vmware-modules-279.0  USE="-pax_kernel" 0 kB

-- snip --

>>> Compiling source in /var/tmp/portage/app-emulation/vmware-modules-279.0/work ...
 * Preparing vmblock module
make -j -l 3 HOSTCC=x86_64-pc-linux-gnu-gcc CROSS_COMPILE=x86_64-pc-linux-gnu- 'LDFLAGS=-m elf_x86_64' auto-build KERNEL_DIR=/usr/src/linux KBUILD_OUTPUT=/lib/modules/3.10.25-gentoo/build 
Using standalone build system.
Makefile:167: Makefile.normal: No such file or directory
make: *** No rule to make target `Makefile.normal'.  Stop.
 * ERROR: app-emulation/vmware-modules-279.0::gentoo failed (compile phase):
 *   emake failed
-- snip --
これはどうやらカーネルのソースツリーを参照しに行ったけれどもファイルが見つからなかったというものらしく、以下で無事 emerge できた。
# FEATURES="-userpriv" emerge -av1 vmware-modules
userpriv feature は emerge のプロセスをユーザ権限 (portage) で実行する機能で、portage ユーザに必要なパーミッションがない場合に上記のようなエラーで失敗するもよう。FEATURE="-userpriv" することにより emerge が root 権限で実行され、このパーミッション問題が解決した。
検索しても直接関わる情報が見つからなかったのは、umask をデフォルトより厳しい値 (0077) に設定していたからと思われる。また、この他にもカーネルモジュールを emerge する場合には同様の問題が発生するだろう。

ということで、今後の emerge で -userpriv されるように以下の設定を行った。
# echo 'FEATURES="-userpriv"' >> /etc/portage/env/rootpriv.conf
# ecoo 'app-emulation/vmware-modules rootpriv.conf' >> /etc/portage/package.env

0 件のコメント:

コメントを投稿