パスワードを忘れた? アカウント作成
746855 journal

Oliverの日記: Debian/mipsEEel (fakeroot編)

日記 by Oliver

パケジを作る最終段階でいちいちrootになるのは面倒くさい。かといって、パケジ内にroot.rootにより所有されたファイルがある限り、ユーザ権限では作れない。そんな為にあるのがfakerootだ。libcのコールを横取りすることにより、アプリにrootであると想わせてしまうんだ。

素直にコンパイルが通り、よろこんだのも一瞬、make -C testでrmがコケる。どうやらlibfakeroot.c:unlink()の中のnext_unlink()がglibcの本当のunlink()ではなく、自分自身を指してしまい、無限ループを30230回繰り返した後、SEGFAULTしてしまうようだ。ダミーでfstat/open/close/lstatした後にunlinkするプログラムを書いたら、それは無事に動作する。rm以外では再現不可だ。なぜだぁぁぁ

答えはなんと、rmが腐っていたっぽい。Debianから持ってきたfileutilsをコンパイルすると、そのrmではなんら問題がなかった。PS2 Linux KitのSRPMからrmを作り直しても問題なかった。もしや、オリジナルのrmはクロスコンパイルで作られてて、なにか変なシンボルが紛れこんでいた?アレだ。

無事に動いたと思ったら、何度かfork()を繰り返す内にエセroot権限を失ってしまうようだ。"fakeroot dh_testroot"するとOKだが、debian/rules内のdh_testrootがfakeroot環境化で実行されると、普通のユーザに戻ってる。普通ユーザでも、本当のrootでもperl -e 'print "$<"'は正しいのに、fakeroot化だとなにも出さない。変だ。

fakerootなんて嫌いぢゃぁぁぁ。ソフトとしてのfakerootに触ったことなかったのに、fakeroot.netドメインを所持している罰なのか?

typodupeerror

※ただしPHPを除く -- あるAdmin

読み込み中...