ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: "alanwu (Alan Wu)" <noreply@ruby-lang.org>
To: ruby-core@neon.ruby-lang.org
Subject: [ruby-core:110842] [Ruby master Bug#19115] OpenSSL fails to autoload (macOS)
Date: Mon, 21 Nov 2022 16:47:45 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-100198.20221121164744.5760@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-19115.20221109131523.5760@ruby-lang.org

Issue #19115 has been updated by alanwu (Alan Wu).


I've submitted a [PR](https://github.com/ruby/ruby/pull/6756) to fix this issue and I thought I'd also post some updates.

Here is a script to summarize the mechanics of the bug:

```ruby
puts RUBY_DESCRIPTION # ruby 3.2.0dev (2022-01-20) [wasm32-wasi]

autoload :Ripper, 'ripper' # can resolve to ripper.so, which is builtin
p [autoload?(:Ripper), defined?(Ripper), Object.const_defined?(:Ripper)]
# => [nil, nil, false]

# Compare with a library that's an .rb file
autoload :Abbrev, 'abbrev' # can resolve to ripper.so, which is builtin
p [autoload?(:Abbrev), defined?(Abbrev), Object.const_defined?(:Abbrev)]
# => ["abbrev", "constant", true]
```

It's specific to builds configured with `--with-static-linked-ext`.
Since WASM builds use this option you can reproduce the issue in a browser!

https://try.ruby-lang.org/playground/#code=puts+RUBY_DESCRIPTION+%23+ruby+3.2.0dev+(2022-01-20)+%5Bwasm32-wasi%5D%0A%0A%23+Setup+an+autoload+for+a+constant+to+load%0A%23+a+statically+linked+extension%0Aautoload+%3ARipper%2C+'ripper'+%23+can+resolve+to+ripper.so%2C+which+is+builtin%0Ap+%5Bautoload%3F(%3ARipper)%2C+defined%3F(Ripper)%2C+Object.const_defined%3F(%3ARipper)%5D%0A%23+%3D%3E+%5Bnil%2C+nil%2C+false%5D%0A%0A%23+Compare+with+a+library+that's+an+.rb+file%0Aautoload+%3AAbbrev%2C+'abbrev'+%23+can+resolve+to+ripper.so%2C+which+is+builtin%0Ap+%5Bautoload%3F(%3AAbbrev)%2C+defined%3F(Abbrev)%2C+Object.const_defined%3F(%3AAbbrev)%5D%0A%23+%3D%3E+%5B%22abbrev%22%2C+%22constant%22%2C+true%5D&engine=cruby-3.2.0dev

For native builds, the issue impacts RubyGems can make it think OpenSSL
is unavailable even though it is. The error is the same as mentioned in [Bug #18876]:

```
ERROR:  While executing gem ... (Gem::Exception)
    OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
```

Also, some corrections for my mistakes in [Bug #18876].
I thought `defined? AutoloadConst` would trigger loading but it's supposed
to behave more like checking whether loading is necessary.
I also thought the issue was fixed on master but it was actually due to me
not including Ripper in my test build which made `ripper` resolve to `ripper.rb`
when the issue could only reproduce with `.so` features like `ripper.so` that are statically linked.


----------------------------------------
Bug #19115: OpenSSL fails to autoload (macOS)
https://bugs.ruby-lang.org/issues/19115#change-100198

* Author: thomthom (Thomas Thomassen)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.2, 3.2.0dev
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Related discussion: https://bugs.ruby-lang.org/issues/18876

We are seeing OpenSSL failing to autoload with the Ruby build we've been using. (We first observed this when using `Gem.install` that relies on autoload of OpenSSL). Our last working build was Ruby 2.7.2 with similar config.

This causes RubyGems' `HAVE_OPENSSL` constant to be incorrectly initialized, and subsequent calls to `Gem.install` fails. There might be other scenarios that fail as a result of that, but we've not managed to identified that.

```
 module Gem
   HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:
```

Our Ruby 3.1.2 config:

```
'--prefix=/Users/user/.conan/data/ruby/3.1.2/sketchup/stable/build/bd95825b99dcb274d0e577fbdc953653a9ea0fb9' 
'--with-openssl-dir=/Users/user/.conan/data/openssl/1.1.1q/sketchup/stable/package/93ae0b0e7eebe0611c04d3e0d9bbf49fbce92332' 
'--with-libyaml-dir=/Users/user/.conan/data/libyaml/0.2.5/sketchup/stable/package/a56a950abed2e10dbdc26845400f0a034d97c454' 
'--disable-install-doc' 
'--disable-install-rdoc' 
'--enable-shared' 
'--enable-load-relative' 
'--with-static-linked-ext' 
'--without-debug' 
'--without-gdbm' 
'--without-gettext' 
'--without-irb' 
'--without-mkmf' 
'--without-rdoc' 
'--without-readline' 
'--without-tk' 
'--bindir=${prefix}/bin' 
'--sbindir=${prefix}/bin' 
'--libexecdir=${prefix}/bin' 
'--libdir=${prefix}/lib' 
'--includedir=${prefix}/include' 
'--oldincludedir=${prefix}/include' 
'--datarootdir=${prefix}/share' 'cflags=-mmacosx-version-min=10.14 -fdeclspec' 'cxxflags=-mmacosx-version-min=10.14 -fdeclspec' 'LDFLAGS=-mmacosx-version-min=10.14 -fdeclspec'
```

We also tested with latest build from master (November 8th 2022):

```
./ruby -ve 'p RbConfig::CONFIG["configure_args"]'
ruby 3.2.0dev (2022-11-07T19:35:21Z master b14f133054) [x86_64-darwin20]
" '--prefix=/Users/vmehta/ruby/ruby-master/' '--with-openssl-dir=/Users/vmehta/.conan/data/openssl/1.1.1q/sketchup/stable/package/f2d937af1fa19d5fc4095849a65d1927e9e75ae7/' '--with-libyaml-dir=/Users/vmehta/.conan/data/libyaml/0.2.5/sketchup/stable/package/3fc084e254210603a5c5aece184b2d45e2509b30' '--disable-install-doc' '--disable-install-rdoc' '--enable-shared' '--enable-load-relative' '--with-static-linked-ext' '--without-debug' '--without-gdbm' '--without-gettext' '--without-irb' '--without-mkmf' '--without-rdoc' '--without-readline' '--without-tk'"
```

Using an RVM of Ruby 3.1.2 this appear to work as expected. But using out configuration, that we've used for the Ruby 2.x versions are now failing. We haven't been able to figure out the reason for this.



-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2022-11-21 16:47 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-09 13:15 [ruby-core:110670] [Ruby master Bug#19115] OpenSSL fails to autoload (macOS) thomthom (Thomas Thomassen)
2022-11-10 12:02 ` [ruby-core:110681] " thomthom (Thomas Thomassen)
2022-11-16  0:26 ` [ruby-core:110772] " alanwu (Alan Wu)
2022-11-16 13:25 ` [ruby-core:110775] " thomthom (Thomas Thomassen)
2022-11-16 16:56 ` [ruby-core:110781] " alanwu (Alan Wu)
2022-11-21 16:47 ` alanwu (Alan Wu) [this message]
2022-12-05 14:16 ` [ruby-core:111209] [Ruby master Bug#19115] RubyGems fails to detect OpenSSL in --with-static-linked-ext builds thomthom (Thomas Thomassen)
2022-12-05 21:58 ` [ruby-core:111214] " alanwu (Alan Wu)
2023-01-04 13:17 ` [ruby-core:111624] " thomthom (Thomas Thomassen) via ruby-core
2023-03-25  6:03 ` [ruby-core:113013] " nagachika (Tomoyuki Chikanaga) via ruby-core

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-100198.20221121164744.5760@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    --cc=ruby-core@neon.ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).