Trunk: $B%$%s%9%H!<%k%U%!%$%k$N%"%/%;%98"(B

trunk で、インストールファイルのアクセス権が適切に設定されないものが
あります。

Index: instruby.rb

— instruby.rb (リビジョン 15429)
+++ instruby.rb (作業コピー)
@@ -123,8 +123,9 @@
end

def install_recursive(srcdir, dest, options = {})

  • noinst = options[:no_install]
  • glob = options[:glob] || “*”
  • opts = options.clone
  • noinst = opts.delete(:no_install)
  • glob = opts.delete(:glob) || “*”
    subpath = srcdir.size…-1
    Dir.glob("#{srcdir}/**/#{glob}") do |src|
    case base = File.basename(src)
    @@ -143,7 +144,7 @@
    makedirs(d)
    else
    makedirs(File.dirname(d))
  •  install src, d
    
  •  install src, d, opts
    
    end
    end
    end
    @@ -224,15 +225,15 @@
    if noinst = CONFIG[“no_install_files”] and noinst.empty?
    noinst = nil
    end
  • install_recursive("#{extout}/#{CONFIG[‘arch’]}", archlibdir,
    :no_install => noinst)
  • install_recursive("#{extout}/include/#{CONFIG[‘arch’]}",
    archhdrdir, :glob => “*.h”)
  • install_recursive("#{extout}/#{CONFIG[‘arch’]}", archlibdir,
    :no_install => noinst, :mode => 0755)
  • install_recursive("#{extout}/include/#{CONFIG[‘arch’]}",
    archhdrdir, :glob => “*.h”, :mode => 0644)
    end
    install?(:ext, :comm, :‘ext-comm’) do
    puts “installing extension scripts”
    hdrdir = rubyhdrdir + “/ruby”
    makedirs [rubylibdir, sitelibdir, vendorlibdir, hdrdir]
  • install_recursive("#{extout}/common", rubylibdir)
  • install_recursive("#{extout}/include/ruby", hdrdir, :glob => “*.h”)
  • install_recursive("#{extout}/common", rubylibdir, :mode => 0644)
  • install_recursive("#{extout}/include/ruby", hdrdir, :glob => “*.h”,
    :mode => 0644)
    end
    end

@@ -243,7 +244,7 @@
ridatadir = File.join(CONFIG[‘datadir’],
‘ri/$(MAJOR).$(MINOR).$(TEENY)/system’)
Config.expand(ridatadir)
makedirs [ridatadir]

  • install_recursive($rdocdir, ridatadir)
  • install_recursive($rdocdir, ridatadir, :mode => 0644)
    end
    end

@@ -324,7 +325,7 @@
noinst << “win32.h”
end
noinst = nil if noinst.empty?

  • install_recursive(“include”, rubyhdrdir, :no_install => noinst, :glob
    => “*.h”)
  • install_recursive(“include”, rubyhdrdir, :no_install => noinst, :glob
    => “*.h”, :mode => 0644)
    end

install?(:local, :comm, :man) do

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33699] trunk:
e$B%$%s%9%H!<%k%U%!%$%k$N%”%/%;%98"e(B"
on Mon, 11 Feb 2008 22:29:22 +0900, pegacorn
[email protected] writes:

|trunk e$B$G!“%$%s%9%H!<%k%U%!%$%k$N%”%/%;%98"$,E,@Z$K@_Dj$5$l$J$$$b$N$,e(B
|e$B$"$j$^$9!#e(B

e$B<h$j9~$_$^$9!#e(B

e$B$3$s$P$s$O!#e(B

In message [email protected]
on Tue, 12 Feb 2008 12:12:40 +0900,
Yukihiro M. [email protected] wrote:

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33699] trunk: e$B%$%s%9%H!<%k%U%!%$%k$N%”%/%;%98"e(B"
on Mon, 11 Feb 2008 22:29:22 +0900, pegacorn [email protected] writes:

|trunk e$B$G!“%$%s%9%H!<%k%U%!%$%k$N%”%/%;%98"$,E,@Z$K@_Dj$5$l$J$$$b$N$,e(B
|e$B$"$j$^$9!#e(B

e$B<h$j9~$_$^$9!#e(B
e$B$3$N%Q%C%A$r8+$F$$$F!"e(B

  • install_recursive(“#{extout}/#{CONFIG[‘arch’]}”, archlibdir,
    :no_install => noinst, :mode => 0755)
  • install_recursive(“#{extout}/include/#{CONFIG[‘arch’]}”,
    archhdrdir, :glob => “*.h”, :mode => 0644)

:mode =>
e$B$N@h$O%U%!%$%k$N%“%/%;%98”$@$H;W$&$N$G$9$,!“e(B0755/0644e$B$G$O$J$/e(B
e$B$Fe(B0555/0444e$B$H$$$C$?CM$K$7$?$/$J$k%1!<%9$b$”$j$^$9!#e(B

e$B$3$NJU$j!"=`%^%8%C%/!&%J%s%P!<$G$O$J$/!"2?$+%G%U%)%k%HI=$9JQ?t$+2?$+$Ke(B
e$B$G$-$J$$$b$s$G$7$g$&$+e(B?

e$B$J$+$@$G$9!#e(B

At Thu, 14 Feb 2008 00:14:24 +0900,
Takahiro K. wrote in [ruby-dev:33766]:

:mode => e$B$N@h$O%U%!%$%k$N%"%/%;%98"$@$H;W$&$N$G$9$,!“e(B0755/0644e$B$G$O$J$/e(B
e$B$Fe(B0555/0444e$B$H$$$C$?CM$K$7$?$/$J$k%1!<%9$b$”$j$^$9!#e(B

e$B$3$NJU$j!"=`%^%8%C%/!&%J%s%P!<$G$O$J$/!"2?$+%G%U%)%k%HI=$9JQ?t$+2?$+$Ke(B
e$B$G$-$J$$$b$s$G$7$g$&$+e(B?

make
installe$B$N:]$K$=$l$>$le(BINSTALL_PROG_MODEe$B$He(BINSTALL_DATA_MODEe$B$Ge(B
e$B;XDj$G$-$k$h$&$K$7$^$7$?!#e(Bconfiguree$B$G;XDj$G$-$k$[$&$,$$$$$G$7$ge(B
e$B$&$+!#e(B

pegacorn です。

From: pegacorn [email protected]
Date: Sat, 16 Feb 2008 13:47:25 +0900
Message-Id: [email protected]
/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INSTALL_PROG_MODE=0555 とすると、サブディレクトリーを作成/ファイルを
コピーする前にディレクトリーが 0555 になってしまって、
Errno::EACCES になります。

サブディレクトリーの作成に失敗するのは、fileutils の問題かもしれませんが…

まだ調べていません。

サブディレクトリーの作成に失敗するのは、fileutils の問題のようです。
ですので、先程の instruby.rb へのパッチは取り消します。

FreeBSD/Cygwin で mkdir -p -m 0555 dir1/dir2/dir3 とすると、

dir3 は 0555 になりますが、dir1, dir2 は 0755 になります。


Index: lib/fileutils.rb

— lib/fileutils.rb (リビジョン 15496)
+++ lib/fileutils.rb (作業コピー)
@@ -212,12 +212,15 @@
stack.push path
path = File.dirname(path)
end

  •  i = stack.size
    
  •  mode = options[:mode]
     stack.reverse_each do |dir|
       begin
    
  •      fu_mkdir dir, options[:mode]
    
  •      fu_mkdir dir, (mode | (i > 1 ? 0200 : 0))
       rescue SystemCallError => err
         raise unless File.directory?(dir)
       end
    
  •    i -= 1
     end
    
    end

ただ、fileutils を修正しても instruby がさらに下位のディレクトリーを
作成しようとして結局 Errno::EACCES になるので、インストールの問題は
解決しないのですが…


installing binary commands
/home/user/work-reposs/ruby/trunk/lib/fileutils.rb:243:in `mkdir’:
Permission denied - /home/user/work-usr/ruby/trunk/lib/ruby
(Errno::EACCES)

makedirs [/home/user/work-usr/ruby/trunk/lib] は成功するようになるが、

その後の makedirs [/home/user/work-usr/ruby/trunk/lib/ruby] は失敗する。

pegacorn です。

From: Nobuyoshi N. [email protected]
Date: Thu, 14 Feb 2008 00:53:01 +0900
Message-Id: [email protected]
/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Takahiro K. 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 <main>' from ./instruby.rb:375:in call’
from ./instruby.rb:375:in block (2 levels) in <main>' from ./instruby.rb:372:in each’
from ./instruby.rb:372:in block in <main>' 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

e$B$3$s$P$s$O!#e(B

INSTALL_PROG_MODE=0555 e$B$H$9$k$H!"%5%V%G%#%l%/%H%j!<$r:n@.!?%U%!%$%k$re(B
e$B%3%T!<$9$kA0$K%G%#%l%/%H%j!<$,e(B 0555 e$B$K$J$C$F$7$^$C$F!“e(B
e$B<B9T$9$k%W%m%0%i%`$N%”%/%;%98"$H!"%G%#%l%/%H%j$N%"%/%;%98"$OJ,$1$F9M$(e(B
e$B$k$Y$-$G$7$g$&!#e(B(e$B$b$C$H:Y$+$/8@$($P!"<B9T7A<0$H%9%/%j%W%H$G$bJ,$1$F9Me(B
e$B$($J$$$H$$$1$J$$4D6-$O$"$k$+$b$7$l$^$;$s!#e(B)