主に 3.1.0, 3.1.1, 3.1.2
あたりだけども。
※追記:記事の最後に capstone がどこからきたのか、を追記しました。 結論からいうと環境によっては Ruby 3.1.2 など capstone で問題が起きるバージョンは諦めてコンテナとかで動かしましょう。
M1 mac で rbenv install 3.1.2 をするとコケる
こうなる。
❯ rbenv install 3.1.2 To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20230202173652.73375.log' or pass --verbose Downloading openssl-3.0.7.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e Installing openssl-3.0.7... Installed openssl-3.0.7 to /Users/donbulinux/.anyenv/envs/rbenv/versions/3.1.2 Downloading ruby-3.1.2.tar.gz... -> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz Installing ruby-3.1.2... ruby-build: using readline from homebrew ruby-build: using gmp from homebrew BUILD FAILED (macOS 13.1 using ruby-build 20230202) Inspect or clean up the working tree at /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20230202173652.73375.JiWKux Results logged to /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20230202173652.73375.log Last 10 log lines: transdb.h updated linking shared-library libruby.3.1.dylib ld: library not found for -lcapstone clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [libruby.3.1.dylib] Error 1 make: *** Waiting for unfinished jobs.... transform_mjit_header: making external definition static inline: rb_vm_lvar_exposed, Init_vm_stack_canary, rb_vm_opt_cfunc_p, rb_vm_opt_mod, rb_vm_ic_hit_p, rb_vm_splat_array, rb_vm_defined, rb_vm_cc_general, rb_aliased_callable_method_entry, rb_find_defined_class_by_owner, rb_vm_call_ivar_attrset_p, rb_iseq_only_kwparam_p, rb_iseq_only_optparam_p, rb_vm_set_ivar_idx, rb_vm_setinstancevariable, rb_vm_setclassvariable, rb_vm_getclassvariable, rb_vm_rewrite_cref, rb_vm_get_cref, rb_vm_block_ep_update, rb_vm_cref_new_toplevel, rb_vm_cref_dup_without_refinements, rb_vm_frame_block_handler, rb_vm_cframe_keyword_p, rb_vm_ep_local_ep transform_mjit_header: making declaration static inline: rb_vm_lvar_exposed, rb_vm_lvar_exposed, Init_vm_stack_canary, rb_vm_rewrite_cref, rb_vm_frame_block_handler, rb_vm_block_ep_update, rb_vm_ep_local_ep transform_mjit_header: SKIPPED to transform: __sigbits, isspecial, isrune, isphonogram, isnumber, isideogram, ishexnumber, digittoint, toupper, tolower, toascii, isxdigit, isupper, isspace, ispunct, isprint, islower, isgraph, isdigit, iscntrl, isblank, isalpha, isalnum, __wcwidth, __isctype, __istype, isascii, __sincospi, __sincospif, __sincos, __sincosf, __inline_isnormall, __inline_isnormald, __inline_isnormalf, __inline_signbitl, __inline_signbitd, __inline_signbitf, __inline_isnanl, __inline_isnand, __inline_isnanf, __inline_isinfl, __inline_isinfd, __inline_isinff, __inline_isfinitel, __inline_isfinited, __inline_isfinitef, __darwin_fd_clr, __darwin_fd_set, __darwin_fd_isset, __darwin_check_fd_set, __sputc ln -sf ../../../.ext/include/arm64-darwin22/rb_mjit_min_header-3.1.2.h include/ruby-3.1.0/arm64-darwin22/rb_mjit_min_header-3.1.2.h
JIT ォ〜? となったのでよくよくエラーを見ていた所、 ld: library not found for -lcapstone
が出ている。 -lcapstone って何ヨ!
capstone
こういうことらしい、なんかしらの依存性の解決で一緒にインストールされるっぽい。
記事の通り、 capstone だけ依存性を無視して削除して試してみる。
❯ brew uninstall --ignore-dependencies capstone Uninstalling /opt/homebrew/Cellar/capstone/4.0.2... (25 files, 14.7MB)
おっ、できた。
#リトライ
❯ rbenv install 3.1.2 To follow progress, use 'tail -f /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/ruby-build.20230202185126.14100.log' or pass --verbose Downloading openssl-3.0.7.tar.gz... -> https://dqw8nmjcqpjn7.cloudfront.net/83049d042a260e696f62406ac5c08bf706fd84383f945cf21bd61e9ed95c396e Installing openssl-3.0.7... Installed openssl-3.0.7 to /Users/donbulinux/.anyenv/envs/rbenv/versions/3.1.2 Downloading ruby-3.1.2.tar.gz... -> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz Installing ruby-3.1.2... ruby-build: using readline from homebrew ruby-build: using gmp from homebrew Installed ruby-3.1.2 to /Users/donbulinux/.anyenv/envs/rbenv/versions/3.1.2 NOTE: to activate this Ruby version as the new default, run: rbenv global 3.1.2 ❯ rbenv versions * system 2.5.1 2.6.5 2.7.6 3.1.0 3.1.2
おっできた。
なにこれ
上記記事にもリンクが存在しておりましたが、どうも JIT 有効化時の問題のようです。
Just to update everybody, we're in the process of porting YJIT to Rust and hoping to upstream that next month. This should fix the capstone issue as the library will only be used when building in dev mode.
という事で実際 Ruby 3.1.3 以降なら大丈夫らしい。
ちなみに fish 使ってる兄貴が書いていたワークアラウンド試してみたけどダメでした、しゃーなし。 可能なら Ruby 3.1.3 以上にしたほうがよさそう。
その他
SIP 無効化しているとインストールできない、というヤツを過去に見た記憶があったのでソレかと思っていた。
今使っている M1、変更したタイミングで SIP 無効化したとかやった訳ではないので悩んでいたのであった。 これじゃなくてよかったー。
capstone がどこからきたのか
qemu 入れた覚えないんだけどな、と悩んでいたのだけど理由が判明した。
Lima で Docker 環境を構築しており、 lima 起動しようとしてエラーが出た。
❯ less /Users/donbulinux/.lima/docker_x86_64/ha.stderr.log {"level":"debug","msg":"Creating iso file /Users/donbulinux/.lima/docker_x86_64/cidata.iso","time":"2023-02-03T19:46:07+09:00"} {"level":"debug","msg":"Using /var/folders/np/w6ml9cp529j92kms59xq43lr0000gn/T/diskfs_iso3020372545 as workspace","time":"2023-02-03T19:46:07+09:00"} {"level":"debug","msg":"OpenSSH version 9.0.1 detected","time":"2023-02-03T19:46:07+09:00"} {"level":"debug","msg":"AES accelerator seems available, prioritizing aes128-gcm@openssh.com and aes256-gcm@openssh.com","time":"2023-02-03T19:46:07+09:> {"level":"debug","msg":"Start udp server listening on: 127.0.0.1:62323","time":"2023-02-03T19:46:07+09:00"} {"level":"debug","msg":"Start tcp server listening on: 127.0.0.1:60347","time":"2023-02-03T19:46:07+09:00"} {"level":"fatal","msg":"failed to run [/opt/homebrew/bin/qemu-system-x86_64 -M none -accel help]: stdout=\"\", stderr=\"dyld[24516]: Library not loaded:> /Users/donbulinux/.lima/docker_x86_64/ha.stderr.log lines 1-7/7 (END)
これだー! ここで qemu 使っている。 で、現状本記事の通り capstone
を削除していたので、試しに brew で確認してみた。
❯ brew install qemu Running `brew update --auto-update`... ==> Auto-updated Homebrew! Updated 4 taps (aquasecurity/trivy, homebrew/core, homebrew/cask and homebrew/bundle). ==> New Formulae cargo-make clang-build-analyzer juicefs m1ddc qdmr xcdiff cargo-release crfsuite libaribcaption opencl-clhpp-headers tetra ==> New Casks capslocknodelay lotus pokemon-tcg-live spotify4bigsur ulbow copilot-for-xcode monofocus rive spybuster You have 65 outdated formulae and 2 outdated casks installed. You can upgrade them with brew upgrade or list them with brew outdated. Warning: qemu 7.2.0 is already installed and up-to-date. To reinstall 7.2.0, run: brew reinstall qemu
まあそうだね、したら reinstall 叩いてみましょ!
❯ brew reinstall qemu ==> Fetching dependencies for qemu: capstone, pcre2, glib, ca-certificates, libunistring, guile, libidn2, unbound, gnutls, jpeg-turbo, ncurses and xz ==> Fetching capstone ==> Downloading https://ghcr.io/v2/homebrew/core/capstone/manifests/4.0.2 Already downloaded: /Users/donbulinux/Library/Caches/Homebrew/downloads/d8caa83b6b16573878067f49634ea8c0e94c617b48dd9516b31f0cea46b40cb9--capstone-4.0.2.bottle_manifest.json ==> Downloading https://ghcr.io/v2/homebrew/core/capstone/blobs/sha256:4a7f3c31862791da2c3e9436880a84953ad61a7764fbac208fb6b6999ee139dc Already downloaded: /Users/donbulinux/Library/Caches/Homebrew/downloads/329e70ea4654b595a9262a2fee26cd57393ff14964cb74e24ae00e89c8207610--capstone--4.0.2.arm64_ventura.bottle.tar.gz ...
アオオッ!!
ということで capstone どこからきたのか、 qemu とは……の答えは Lima でした。 死ぞ。