애플 실리콘(ARM) M2 맥북 homebrew 및 ruby x86_64 버전 재설치 삽질 기록 (react native pod install 오류)
테스트해보고 싶은 라이브러리가 있어 0.76 버전 리액트 네이티브 프로젝트를 생성해 봤는데 pod install 과정에서 다음과 같은 오류가 발생했다.
### Error
LoadError - dlopen(/Users/{name}/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/ffi-1.16.3/lib/ffi_c.bundle, 0x0009): tried: '/Users/{name}/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/ffi-1.16.3/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/{name}/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/ffi-1.16.3/lib/ffi_c.bundle' (no such file), '/Users/{name}/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/ffi-1.16.3/lib/ffi_c.bundle' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64')) - /Users/{name}/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/gems/ffi-1.16.3/lib/ffi_c.bundle
루비 자체의 문제보다는 시스템 아키텍쳐와 맞지 않아서 발생하는 오류라는 것을 알게 되었다.
RN 프로젝트를 돌리는 등 여러 이유로 보통 Rosetta로 프로그램이나 터미널을 실행하는데 brew와 루비 설치 과정에서 꼬인 것 같아 homebrew와 ruby를 x86_64(인텔칩 환경)에 맞게 다시 설치하기로 결정했다.
1. 기존 Homebrew 제거
GPT는 다음과 같은 명령어를 제공했는데 내 맥에서는 작동되지 않았다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
어쩔 수 없이 수동으로 기존 homebrew를 제거하게 되었다.
이때 기존에 brew로 설치해 둔 프로그램들을 기억해 두면 더 좋다. (homebrew를 삭제하기 때문, brew list로 확인 가능)
# 1. ARM 경로에 설치된 Homebrew 디렉토리 삭제
sudo rm -rf /opt/homebrew
# 2. 남아있는 Homebrew 관련 설정 제거
sudo rm -rf /usr/local/Homebrew
sudo rm -rf ~/.homebrew
2. .zshrc 파일에서 기존 Homebrew 경로 삭제
터미널 환경 설정 파일인 .zshrc에 Homebrew 경로가 포함되어 있다면 주석 처리를 한다.
나의 경우에는 다음 코드블럭의 두 줄이 homebrew가 포함되어 있어 해당 부분을 제거해 주었다.
코드를 지워도 무방하지만 재설치 후 다시 경로를 수정해서 넣어주어야 하기 때문에 주석으로 처리하는 게 더 편하다.
(알고 싶지 않았음...)
# Homebrew 경로 설정 제거
# export PATH=/opt/homebrew/bin:$PATH
# eval $(/opt/homebrew/bin/brew shellenv)
3. x86_64 경로에 Homebrew 재설치
# x86_64 아키텍처로 Homebrew 설치
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
설치 후 brew 명령어가 정상적으로 작동하는지 확인해 본다.
4. .zshrc 파일에 새로운 Homebrew 경로 추가
x86_64 아키텍처로 Homebrew가 잘 설치되었다면 다시 .zshrc에 Homebrew 새 경로를 적용한다.
# .zshrc 파일에 Homebrew 경로 추가
export PATH="/usr/local/bin:$PATH"
eval "$(/usr/local/bin/brew shellenv)"
이 설정을 추가한 후 터미널을 다시 시작한다.
5. rbenv와 Ruby 설치
rbenv와 Ruby 등을 설치한다.
기존에 homebrew를 통해 설치했던 다른 항목들도 위에서 homebrew 자체를 제거했기 때문에 재설치 과정이 필요하다. (watchman 등)
# rbenv 및 관련 라이브러리 설치
brew install rbenv ruby-build
# .zshrc에 rbenv 초기화 코드 추가
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
# 터미널 재시작 또는 .zshrc를 다시 로드하여 rbenv 적용
source ~/.zshrc
6. Ruby 설치 및 글로벌 버전 설정
rbenv를 통해 Ruby를 설치하고 글로벌 버전으로 설정한다.
# Ruby 3.1.6 설치
rbenv install 3.1.6
# 글로벌 버전으로 Ruby 3.1.6 설정
rbenv global 3.1.6
# rbenv 환경 반영
rbenv rehash
내가 기존에 사용하던 루비의 버전은 2.7.6 이었는데, OpenSSL 1.1이 더 이상 지원되지 않기 때문에 3 버전대로 설치해 주었다.
Error: openssl@1.1 has been disabled because it is not supported upstream! It was disabled on 2024-10-24.
7. Bundler 및 Cocoapods 설치 (필요시)
만약 iOS 개발을 한다면 Cocoapods와 Bundler도 다시 설치해주어야 한다.
gem install bundler
gem install cocoapods
ruby -v 명령어로 루비 버전을 확인하면 정상적으로 버전이 표시되고 x86_64 버전으로 설치된 것을 확인할 수 있다!!
삽질 끝!!