Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby on cygwin 2025-07

Avatar for fd0 fd0
July 03, 2025

Ruby on cygwin 2025-07

Avatar for fd0

fd0

July 03, 2025
Tweet

More Decks by fd0

Other Decks in Technology

Transcript

  1. 2 • fd0 (Daisuke Fujimura) • 仕事では引き続き 1 ミリも Ruby

    を書いていません • YOUTRUST さんのオフィスを 見 学したかったため、 ふらっと会社帰りに寄りました 誰?
  2. 3 • 表参道.rb #106 の資料を参照してください • 今度は半年ぶりの参戦 • Cygwin というプラットフォーム向けの

    Ruby について 喋った • 3.3 以降のアップデートに苦戦してる • 今年のゆるい 目 標 : 3.4 系で動かせるようにしたい 前回まであらすじ
  3. 4 • 結果 : 3.4.3 で SEGV 発 生 原因判明

    & 対策あり • 少なくとも SIGSEGV は発 生 しなくなった • 原因 : OpenSSL 3.x • Ruby が原因ではないため、3.4.3 より以前の Cygwin 向けバイナリも同様の対策で動くはず (未確認) それからどうなった
  4. 5 • Agent に直接 gdb を扱わせて原因究明できないか?とか雑に考えてた • ChatGPT 「gdb の出

    力 をくれたら、次にやるべきコマンドを指 示 できる」 • ひたすら gdb <-> ChatGPT の伝書鳩になる • 再現する簡単な script をつくってくれた • それまでは毎回 gem install で native extension をビルドさせてた… • わかったことをバグ報告として ML に投げた [cygwin:258346] • 翌朝に OpenSSL の test 版で解消するよと有識者 [cygwin:258347] • 試してみたら 見 事に解消した ∩( ・ω・)∩バンジャーイ わかるまでの流れ
  5. 7 Thread 8 "thread_openssl*" received signal SIGSEGV, Segmentation fault. [Switching

    to Thread 3968.0x1f48] 0x0000000000000000 in ?? () (gdb) where #0 0x0000000000000000 in ?? () #1 0x00007ffe4ad2a0e4 in pthread_testcancel () at /usr/src/debug/cygwin-3.6.3-1/ winsup/cygwin/thread.cc:399 #2 pthread_rwlock_wrlock (rwlock=0xa002a9410) at /usr/src/debug/cygwin-3.6.3-1/ winsup/cygwin/thread.cc:4352 #3 0x00007ffe4ae0b0d4 in _sigfe () at sigfe.s:35 #4 0x00000003ff54e3f9 in CRYPTO_THREAD_write_lock (lock=<optimized out>) at crypto/ threads_pthread.c:110 #5 0x00000003ff541922 in init_thread_remove_handlers (handsin=handsin@entry=0x0) at crypto/initthread.c:178 #6 0x00000003ff541d43 in OPENSSL_thread_stop () at crypto/initthread.c:235 #7 0x00000003ff53fdd3 in DllMain (hinstDLL=<optimized out>, fdwReason=<optimized out>, lpvReserved=<optimized out>) at crypto/dllmain.c:38 : 問題のスタックトレース
  6. 8 • OpenSSL の OPENSSL_thread_stop() から Cygwin の pthread_testcancel() が

    call されるパスで発 生 • 2011 年に話題に挙がっていたことはあった [cygwin:194454] • Cygwin 側の OpenSSL パッケージ (test 版) は対処として DllMain() から呼び出しを削除 [cygwin-announce:012341] • かなり hacky だけど crash するよりはマシでは? [https:// github.com/msys2/MSYS2-packages/pull/3448] kwsk
  7. 9 • Patch を適 用 した Cygwin 側の OpenSSL パッケージが

    stable に なる or Patch が本家に merge されるのがいつになるかはわからな い [cygwin:258347] • というわけで↑待ち • (Cygwin 版公式パッケージである) 3.2 系は 2026/03/31 が EOL • OpenSSL 1.1 とリンクすれば動きそうだがセキュリティ的には NG ということは近々 3.4 系で出せる?