On Mon, Aug 17, 2020 at 01:17:03PM -0500, Douglas R. Reno via
blfs-dev wrote:
> Hi folks,
> 
> 
> Since Ruby was tagged this morning, I'd like to ask for permission
> to fix the issue that I just encountered.
> 
> First, some background information. In glibc-2.32, the glibc
> developers implemented a wrapper for lchmod() and fchmodat() for
> POSIX compatibility.  Unfortunately, the kernel is incompatible
> with these syscalls - they modify modes on symbolic links, which
> the kernel does not support. The relevant entry in the
> libc-announce email is here:
> https://sourceware.org/pipermail/libc-announce/2020/000029.html
> (look for [14578] libc: /proc-based emulation for lchmod,
> fchmodat). The Ruby FileUtils library expects that the operation
> not return EOPNOTSUPP, which is what the kernel returns if that
> syscall is attempted. This behavior is similar to what's
> implemented in musl libc (again for POSIX compatibility).
> However, lchmod() is unsupported at the kernel level. Ruby is
> expecting a POSIX compliant system, and in this case, lchmod()
> isn't supported, so it's failing. This is similar to the
> libarchive problem that I fixed yesterday, where some functions
> would output EOPNOTSUPP.
> 
> This issue is evident in the test suite, where the tests crash
> after the first portion of the test suite is complete:
> 
> # Running tests:
> 
> Leaked file descriptor: DRbTests::TestDRbTCP#test_immediate_close:
> 9 : #<IO:fd 9>
> 
>   1) Failure: TestFileUtils#test_cp_r_symlink_preserve
> [/sources/ruby-2.7.1/ruby-2.7.1/test/fileutils/test_fileutils.rb:439]:
> Exception raised: <#<Errno::ENOTSUP: Operation not supported @
> apply2files - tmp/cross2/b/l>>.
> 
>   2) Failure: TestNotImplement#test_respond_to_lchmod
> [/sources/ruby-2.7.1/ruby-2.7.1/test/ruby/test_notimp.rb:17]:
> <false> expected but was <true>.
> 
>   3) Error: TestNotImplement#test_call_lchmod: Errno::ENOTSUP:
> Operation not supported @ apply2files -
> /tmp/d20200817-26691-1iz31al/g    
> /sources/ruby-2.7.1/ruby-2.7.1/test/ruby/test_notimp.rb:60:in
> `lchmod'    
> /sources/ruby-2.7.1/ruby-2.7.1/test/ruby/test_notimp.rb:60:in
> `block in test_call_lchmod'    
> /sources/ruby-2.7.1/ruby-2.7.1/lib/tmpdir.rb:89:in `mktmpdir'    
> /sources/ruby-2.7.1/ruby-2.7.1/test/ruby/test_notimp.rb:54:in
> `test_call_lchmod'
> 
>   4) Error: TestPathname#test_lchmod: Errno::ENOTSUP: Operation
> not supported @ apply2files - l
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:820:in
> `lchmod'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:820:in
> `lchmod'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:820:in
> `block in test_lchmod'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:340:in
> `block (2 levels) in with_tmpchdir'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:339:in
> `chdir'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:339:in
> `block in with_tmpchdir'    
> /sources/ruby-2.7.1/ruby-2.7.1/lib/tmpdir.rb:89:in `mktmpdir'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:337:in
> `with_tmpchdir'
> /sources/ruby-2.7.1/ruby-2.7.1/test/pathname/test_pathname.rb:814:in
> `test_lchmod'
> 
> 
> I have a hunch that this might impact either SWIG or Subversion w/
> ruby bindings, or potentially both. The reason why I think
> Subversion's ruby bindings could be affected has to do with the
> 'svn link' function.
> 
> There is a fix for it upstream, although it requires modifications
> because it expects only Musl Libc to be affected, and FreeBSD. The
> patch needs to be modified to include standard Linux as well. The
> patch also needs to be modified to modify the
> spec/ruby/core/file/lchmod_spec.rb file to adjust to expectations
> from glibc-2.32 (false to true).
> 
> The patch can be found here:
> https://git.ruby-lang.org/ruby.git/commit/?id=a19228f878d955eaf2cce086bcf53f46fdf894b9
> 
> 
> After applying this, the normal two test failures for clock and
> getaddrinfo still continue to happen, but no other regressions are
> experienced:
> 
> 1) File.utime allows Time instances in the far future to set mtime
> and atime FAILED Expected 2446 == 559444 to be truthy but was
> false
> /sources/ruby-2.7.1/ruby-2.7.1/spec/ruby/core/file/utime_spec.rb:78:in
> `block (4 levels) in <top (required)>'
> /sources/ruby-2.7.1/ruby-2.7.1/spec/ruby/core/file/utime_spec.rb:3:in
> `<top (required)>'
> 
> 2) Socket.getnameinfo using IPv6 using a 3 element Array as the
> first argument using NI_NUMERICHOST as the flag returns an Array
> containing the numeric hostname and service name ERROR
> SocketError: getaddrinfo: Name or service not known
> /sources/ruby-2.7.1/ruby-2.7.1/spec/ruby/library/socket/socket/getnameinfo_spec.rb:111:in
> `getnameinfo'
> /sources/ruby-2.7.1/ruby-2.7.1/spec/ruby/library/socket/socket/getnameinfo_spec.rb:111:in
> `block (6 levels) in <top (required)>'
> /sources/ruby-2.7.1/ruby-2.7.1/spec/ruby/library/socket/socket/getnameinfo_spec.rb:65:in
> `<top (required)>'
> 
> Finished in 31.352756 seconds
> 
> 3746 files, 30429 examples, 171113 expectations, 1 failure, 1
> error, 0 tagged make: *** [uncommon.mk:822: yes-test-spec] Error 1
> 
> 
> I would like permission to integrate this patch into the book.
> 
> 
> - Doug
> 
As the person who tagged it, go ahead.  I only build it because one
of my latex tests uses ruby (it invokes a script from TL which uses
ruby).  In BLFS I only run a few testsuites unless I'm updating a
package.

ĸen

> -- 
> http://lists.linuxfromscratch.org/listinfo/blfs-dev
> FAQ: http://www.linuxfromscratch.org/blfs/faq.html
> Unsubscribe: See the above information page

-- 
Juliet's version of cleanliness was next to godliness, which was to
say it was erratic, past all understanding and was seldom seen.
                          -- Unseen Academicals
-- 
http://lists.linuxfromscratch.org/listinfo/blfs-dev
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page

Reply via email to