From: Tanaka Akira Date: 2005-01-09T03:51:19+09:00 Subject: [ruby-dev:25440] test_mkdir(TestFileUtils) fails on NetBSD 2.0 NetBSD 2.0 で test_mkdir(TestFileUtils) が失敗します。 http://www.rubyist.net/~akr/ab/netbsd-2.0/ruby-trunk/log/20050108-144001.gz 1) Error: test_mkdir(TestFileUtils): Errno::EPERM: Operation not permitted - tmp/tmp /home/akr/autobuild/tmp/autobuild/ruby-trunk/20050108-144001/lib/ruby/1.9/fileutils.rb:220:in `chmod' /home/akr/autobuild/tmp/autobuild/ruby-trunk/20050108-144001/lib/ruby/1.9/fileutils.rb:220:in `fu_mkdir' /home/akr/autobuild/tmp/autobuild/ruby-trunk/20050108-144001/lib/ruby/1.9/fileutils.rb:161:in `mkdir' /home/akr/autobuild/tmp/autobuild/ruby-trunk/20050108-144001/lib/ruby/1.9/fileutils.rb:160:in `each' /home/akr/autobuild/tmp/autobuild/ruby-trunk/20050108-144001/lib/ruby/1.9/fileutils.rb:160:in `mkdir' ./test/fileutils/test_fileutils.rb:599:in `test_mkdir' 2) Failure: test_mkdir_p(TestFileUtils) [./test/fileutils/test_fileutils.rb:670]: <4095> expected but was <493>. 調べてみると、どうやらファイルを作った時に group が親ディレクトリから 継承されるという BSD 流の挙動が想定されていないようです。 % mkdir /tmp/tst % ls -ld /tmp /tmp/tst drwxrwxrwt 6 root wheel 512 Jan 9 03:41 /tmp drwxr-xr-x 2 akr wheel 512 Jan 9 03:41 /tmp/tst % id uid=1000(akr) gid=100(users) groups=100(users) % uname -a NetBSD netbsd20.home 2.0 NetBSD 2.0 (GENERIC) #0: Wed Dec 1 10:58:25 UTC 2004 builds@build:/big/builds/ab/netbsd-2-0-RELEASE/i386/200411300000Z-obj/big/builds/ab/netbsd-2-0-RELEASE/src/sys/arch/i386/compile/GENERIC i386 Linux でも、/tmp に setgid bit を立てて BSD 流の挙動にすると test_mkdir が失敗します。 % sudo chmod g+s /tmp % ./ruby test/runner.rb test/fileutils/test_fileutils.rb Loaded suite test_fileutils.rb Started ..........F....F.......... Finished in 0.668179 seconds. 1) Failure: test_cp_r(TestFileUtils) [/home/akr/ruby/tmp-ruby/ruby/test/fileutils/fileasserts.rb:17:in `assert_same_entry' /home/akr/ruby/tmp-ruby/ruby/test/fileutils/fileasserts.rb:16:in `_wrap_assertion' /home/akr/ruby/tmp-ruby/ruby/test/fileutils/fileasserts.rb:16:in `assert_same_entry' ./test/fileutils/test_fileutils.rb:243:in `test_cp_r' ./test/fileutils/test_fileutils.rb:242:in `each' ./test/fileutils/test_fileutils.rb:242:in `test_cp_r']: entry data/a != tmp2/a 2) Failure: test_mkdir(TestFileUtils) [./test/fileutils/test_fileutils.rb:601]: <4095> expected but was <3071>. 26 tests, 251 assertions, 2 failures, 0 errors zsh: exit 1 ./ruby test/runner.rb test/fileutils/test_fileutils.rb % sudo chmod g-s /tmp % uname -a Linux serein 2.4.20-686 #1 Mon Jan 13 22:22:30 EST 2003 i686 GNU/Linux この BSD 流の挙動は POSIX で許されているため、テストが失敗するのは変で はないでしょうか。 あと、ついでですが、entry X != Y というメッセージで何が違ってるのか表 示するといいんじゃないかと思います。 -- [田中 哲][たなか あきら][Tanaka Akira]