From: pegacorn Date: 2008-02-16T13:47:25+09:00 Subject: [ruby-dev:33805] Re: trunk: インストールファイルのアクセス権 ----Security_Multipart(Sat_Feb_16_13_44_50_2008_323)-- Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit pegacorn です。 From: Nobuyoshi Nakada Date: Thu, 14 Feb 2008 00:53:01 +0900 Message-Id: <20080213155310.1A68AE04D8@mail.bc9.jp> /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > Takahiro Kambe wrote in [ruby-dev:33766]: > > :mode => の先はファイルのアクセス権だと思うのですが、0755/0644ではなく > > て0555/0444といった値にしたくなるケースもあります。 > > > > この辺り、準マジック・ナンバーではなく、何かデフォルト表す変数か何かに > > できないもんでしょうか? > > make installの際にそれぞれINSTALL_PROG_MODEとINSTALL_DATA_MODEで > 指定できるようにしました。 INSTALL_PROG_MODE=0555 とすると、サブディレクトリーを作成/ファイルを コピーする前にディレクトリーが 0555 になってしまって、 Errno::EACCES になります。 # サブディレクトリーの作成に失敗するのは、fileutils の問題かもしれませんが… ## まだ調べていません。 ---- % make install INSTALL_PROG_MODE=0555 INSTALL_DATA_MODE=0444 ./miniruby -I./lib ./instruby.rb --make="make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0444 --prog-mode=0555 --installed-list .installed.list --mantype="doc" installing binary commands /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:240:in `mkdir': Permission denied - /home/user/work-usr/ruby (Errno::EACCES) from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:240:in `fu_mkdir' from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:217:in `block (2 levels) in mkdir_p' from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:215:in `reverse_each' from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:215:in `block in mkdir_p' from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:201:in `each' from /home/user/work-reposs/ruby/trunk/lib/fileutils.rb:201:in `mkdir_p' from ./instruby.rb:130:in `makedirs' from ./instruby.rb:200:in `block in
' from ./instruby.rb:375:in `call' from ./instruby.rb:375:in `block (2 levels) in
' from ./instruby.rb:372:in `each' from ./instruby.rb:372:in `block in
' from ./instruby.rb:371:in `each' from ./instruby.rb:371:in `
' *** Error code 1 Stop in /home/user/work-reposs/ruby/trunk. ---- 取り敢えず以下のようにすると… ---- Index: instruby.rb =================================================================== --- instruby.rb (リビジョン 15496) +++ instruby.rb (作業コピー) @@ -127,7 +127,7 @@ File.directory?(realdir) end end.compact! - super(dirs, :mode => $prog_mode) unless dirs.empty? + super(dirs, :mode => ($prog_mode|0200)) unless dirs.empty? end def install_recursive(srcdir, dest, options = {}) ---- 今度はインストール先にコピーしたコマンドスクリプトの shebang を 書き換えようとして Errno::EACCES になります。 ---- % make install INSTALL_PROG_MODE=0555 INSTALL_DATA_MODE=0444 ./miniruby -I./lib ./instruby.rb --make="make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0444 --prog-mode=0555 --installed-list .installed.list --mantype="doc" installing binary commands installing command scripts ./instruby.rb:162:in `initialize': Permission denied - /home/user/work-usr/ruby/trunk/bin/rake (Errno::EACCES) from ./instruby.rb:162:in `open' from ./instruby.rb:162:in `open_for_install' from ./instruby.rb:282:in `block (2 levels) in
' from ./instruby.rb:269:in `each' from ./instruby.rb:269:in `block in
' from ./instruby.rb:375:in `call' from ./instruby.rb:375:in `block (2 levels) in
' from ./instruby.rb:372:in `each' from ./instruby.rb:372:in `block in
' from ./instruby.rb:371:in `each' from ./instruby.rb:371:in `
' *** Error code 1 Stop in /home/user/work-reposs/ruby/trunk. ---- (1)INSTALL_PROG_MODE=0555 とした場合、ディレクトリーも 0555 としたい/ するべきでしょうか? (2)コピー元のコマンドスクリプトの shebang を書き換えてからコピーする ようにすると、インストール後の再ビルド,テスト等に影響しますか? # 調べずに聞いてます m(__)m -- pegacorn ----Security_Multipart(Sat_Feb_16_13_44_50_2008_323)-- Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (FreeBSD) iEYEABECAAYFAke2akIACgkQLWfoQAe94KLaggCeLAdddUw4wkJqlc0H/ezIeXlS GDkAoL280iE3NBZ/SfurkkYku2Yd2a5O =vxS1 -----END PGP SIGNATURE----- ----Security_Multipart(Sat_Feb_16_13_44_50_2008_323)----