会社用のM3 Macが届いたので、さっそくrubyをinstallしようとしたら、エラーでハマったのでメモしておく。
エラー内容
$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl)" asdf install ruby 3.2.2 To follow progress, use 'tail -f /var/folders/nb/0lr36cbj6gx01xsgwxmwc6jh0000gn/T/ruby-build.20231203194651.23142.log' or pass --verbose Downloading ruby-3.2.2.tar.gz... -> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.2.tar.gz Installing ruby-3.2.2... ruby-build: using readline from homebrew ruby-build: using libyaml from homebrew ruby-build: using gmp from homebrew BUILD FAILED (macOS 14.1.2 using ruby-build 20230424) Inspect or clean up the working tree at /var/folders/nb/0lr36cbj6gx01xsgwxmwc6jh0000gn/T/ruby-build.20231203194651.23142.RhNS49 Results logged to /var/folders/nb/0lr36cbj6gx01xsgwxmwc6jh0000gn/T/ruby-build.20231203194651.23142.log Last 10 log lines: checking for llvm-nm... llvm-nm checking for llvm-objcopy... no checking for llvm-objdump... llvm-objdump checking for llvm-ranlib... no checking for llvm-strip... no checking for gcc... clang checking whether the C compiler works... no configure: error: in `/var/folders/nb/0lr36cbj6gx01xsgwxmwc6jh0000gn/T/ruby-build.20231203194651.23142.RhNS49/ruby-3.2.2': configure: error: C compiler cannot create executables See `config.log' for more details
ぱっと見
よく分からない。config.log も見てみるがこちらもイマイチ分からない。 ただ、llvm系の何かが足りておらず、Cコンパイラがうまく起動してないことだけは分かる。
MacのCコンパイラは Clang と呼ばれるもので、こいつはXCodeのCommandLineToolsに同梱されている。 とりあえずversionを見てみると、、、
$ clang --version Apple clang version 15.0.0 (clang-1500.0.40.1) Target: arm64-apple-darwin23.1.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
binの場所も表示されている。llvm系を確認すると、確かにinstall時のログに出ていたものが存在しないようだ。
$ ll /Library/Developer/CommandLineTools/usr/bin | grep llvm lrwxr-xr-x 1 root wheel 12B Dec 3 05:18 c++filt@ -> llvm-cxxfilt lrwxr-xr-x 1 root wheel 14B Dec 3 05:18 dwarfdump@ -> llvm-dwarfdump lrwxr-xr-x 1 root wheel 8B Dec 3 05:18 gcov@ -> llvm-cov -rwxr-xr-x 1 root wheel 12M Sep 7 07:24 llvm-cov* -rwxr-xr-x 1 root wheel 1.1M Sep 7 07:23 llvm-cxxfilt* -rwxr-xr-x 1 root wheel 23M Sep 7 07:24 llvm-dwarfdump* -rwxr-xr-x 1 root wheel 28M Sep 7 07:23 llvm-nm* -rwxr-xr-x 1 root wheel 31M Sep 7 07:24 llvm-objdump* -rwxr-xr-x 1 root wheel 166K Sep 7 07:24 llvm-otool* -rwxr-xr-x 1 root wheel 13M Sep 7 07:23 llvm-profdata* -rwxr-xr-x 1 root wheel 10M Sep 7 07:23 llvm-size* lrwxr-xr-x 1 root wheel 7B Dec 3 05:18 nm@ -> llvm-nm lrwxr-xr-x 1 root wheel 12B Dec 3 05:18 objdump@ -> llvm-objdump lrwxr-xr-x 1 root wheel 10B Dec 3 05:18 otool@ -> llvm-otool
とりあえずbinaryでversionを確認してみると、LLVMは version 15系ということがわかった。
$ llvm-cov --version Apple LLVM version 15.0.0 Optimized build. Default target: arm64-apple-darwin23.1.0 Host CPU: apple-m1
homebrewでllvmを入れる
brewにあるだろうと思って、調べてみると、現在は17系のようだ。
$ brew info llvm ==> llvm: stable 17.0.6 (bottled), HEAD [keg-only]
とりあえず入れてみる。
$ brew install llvm
以下にbinがあったので確認してみる。たくさんあるので省略しますが、install時に「no」と表示されていたものがある。
$ ll /opt/homebrew/opt/llvm/bin | grep llvm -r-xr-xr-x 1 rochefort admin 37K Nov 28 17:52 llvm-PerfectShuffle* lrwxr-xr-x 1 rochefort admin 15B Nov 28 17:52 llvm-addr2line@ -> llvm-symbolizer -rwxr-xr-x 1 rochefort admin 108K Nov 28 17:52 llvm-ar* ....(略)
気を取り直してinstall
llvm install時とbrew info 時に以下のメッセージが表示されているので、それぞれ設定する。 (なぜかbinの方のメッセージはinstall時には出ていなかった)
If you need to have llvm first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc For compilers to find llvm you may need to set: export LDFLAGS="-L/opt/homebrew/opt/llvm/lib" export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
あとは、いつものようにinstallするだけ。
$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl)" asdf install ruby 3.2.2
最初llvm/clang周りは CommandLineTools を最新にしたり、beta版を使ったり、ダウングレードしたりすれば直る可能性があるので いろいろ試していたが、どれもダメだった。
追記
Operation not permitted @ dir_s_mkdir
現象
古いrubyだとこのエラーが出る。
/private/var/folders/nb/0lr36cbj6gx01xsgwxmwc6jh0000gn/T/ruby-build.20231204201622.35404.ClJqe6/ruby-3.1.3/lib/fileutils.rb:240:in `mkdir': Operation not permitted @ dir_s_mkdir - /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk/Users (Errno::EPERM)
対応
macの Privacy & Security
設定にterminalからchownできるようにしておきます。
あとは該当ディレクトリをchown
$ sudo chown $(whoami) /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk