Hiroshi Shinji
hiros****@gmail*****
2009年 7月 8日 (水) 04:15:40 JST
宍道です。 > ( make_alias() 部分は既に make_alias.c に置き換わっています。) make_alias.c 内で使用している scandir(3) は、システムコール getdents(2) を 呼び出していますが、d_type が利用できないファイルシステムもあります。 そのため、make_alias が全く動作しないシステムもあります。 getdents(2) の man page にあるテストコードを実行してみると、 ext3 の PCじょうでは、 $ ./test_i386 / --------------- nread=592 --------------- i-node# file type d_reclen d_off d_name 11 directory 24 45429244 lost+found 2842465 directory 16 63512428 dev 9997633 directory 16 291069474 home 9670913 directory 16 299722205 root <以下略> とでますが、initrd を使って起動している機器では # ./test_ppc / --------------- nread=256 --------------- i-node# file type d_reclen d_off d_name 2 ??? 16 12 . 2 ??? 16 24 .. 337 ??? 16 36 bin 30 ??? 16 48 dev 111 ??? 16 60 etc <以下略> などと出てきます。 ということで、スクリプト版の make_alias() も(現在のように コメントアウトした状態で良いので)使えるようにしておいて もらえるとありがたいです。 # alias 構文がある間は。 2009/07/06 13:58 に Tetsuo Handa<from-****@i-lov*****> さんは書きました: > 熊猫です。 > > 組込み環境だと find とか which とかを用意するのが面倒なのと、 > 処理時間を短縮することで .rpm や .deb の post install セクションで > ポリシーの初期化をしてしまおうという企みのもと、 init_policy.c の > make_exception() 部分をCプログラム化してみました。 > http://sourceforge.jp/projects/tomoyo/svn/view/branches/ccs-tools/ccstools/make_exception.c?root=tomoyo&view=co&content-type=text%2Fplain > ( make_alias() 部分は既に make_alias.c に置き換わっています。) > (↓所要時間は環境により大きく異なります。) > > −−− init_policy.sh の make_exception() 1回目−−− > real 0m10.579s > user 0m0.167s > sys 0m1.109s > > −−− make_exception.c 1回目−−− > real 0m9.431s > user 0m0.003s > sys 0m0.293s > > −−− init_policy.sh の make_exception() 2回目−−− > real 0m0.921s > user 0m0.155s > sys 0m0.833s > > −−− make_exception.c 2回目−−− > real 0m0.044s > user 0m0.017s > sys 0m0.029s > > ディスクアクセス待ちが実行時間のほとんどを占めているので > 処理時間の短縮効果はあまり無いことが判りました。 > > 重たいのは file_pattern と allow_read を登録するために > find で /usr/share 以下から fonts ディレクトリや icons ディレクトリなどを > 検索する処理だと考えています。 > > これらは学習モードで学習された後に \* に置換しても差し支えないでしょうし、 > ディレクトリ階層が意味を持たないので file_pattern を使って複数行として学習 > させるよりも path_group を使って手動で1行の @ に置換する方が適していると > 思います。 > でしたら、 ccs-savepolicy の実行前または後に何らかのコマンドを実行することで > 学習後に置換させるという方法が考えられます。(現在は ccs-patternize という > コマンドがありますが、パターンを自分で与える必要があるため、あまり使われて > いないと思います。) > > 最初から init_policy.sh に全てのプログラム用の file_pattern と allow_read が > 記述されていれば良いのですが、予め全てのパターンを網羅することは不可能です。 > さらに、予め file_pattern や allow_read を作成する方法だと、一度 > exception_policy.conf を作成した後は ccs-tools がアップデートされて > init_policy.sh に新しいパターン情報が追加されたとしても反映されません。 > > でしたら、 init_policy.sh には必要最低限のパターンのみを登録し、 > 新しい file_pattern や allow_read が追加されたら domain_policy.conf を更新する > という方法をとる方が使いやすいような気がしています。 > > つまり、 init_policy.sh を大幅に簡略化して、学習モードでざっと学習後に > パターン化を行うというアプローチに移行してはどうかというアイデアです。 > どうでしょう? > > _______________________________________________ > tomoyo-dev mailing list > tomoy****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/tomoyo-dev > -- 宍道 洋 hiros****@gmail***** http://d.hatena.ne.jp/hshinji/