이 글이 도움이 될 만한 경우
해당 경우가 아니면 다른 글을 찾는게 더 빠를지도 모릅니다.
1. 최근 MacOS Ventura 업데이트 후 ruby 가 이상해졌다. (XCode도 14로 업데이트 했다.)
2. 터미널에 gem 이나 ruby 관련 명령어를 입력 시 architecture 문제가 뜬다 (주로 arm64 나 x86_64)
들어가며
2022년에 MacOS ventura 가 릴리즈 되었다. "OS 는 최신이지 ~ "
릴리즈 기능 중 스테이지 매니저가 신선해서 바로 써보려고 OS 업데이트를 진행했다.
띠용 (?)
어느날부터 터미널을 키면 상단에 어마 무시한 에러가 뜨곤 했다.
저렇게 gem pristine 을 하라는 글이 수도없이 떴다. 대충 ruby가 뭔가 꼬였구나 직감했다.
하지만 gem pristine 을 하려니까 두번째처럼 reinstall ruby 메시지를 뱉었다.
처음 오류를 마주치자 마자 구글링을 했지만 크게 도움이 될만 한 글이나 Issue가 보이지 않았다.
그렇게 몇달 간 이 오류를 무시하다가 오늘 React Native 프로젝트 생성 시 Cocoapods 가 제대로 동작하지 않는 걸 발견하고 큰 맘 먹고 구글링 사투 끝에 해결한 방법을 공유해보려 한다.
원인 찾기
제일 먼저 ruby-build issue를 검색했다.
2020년 12월 글이라 읽어보기만 했다.
주로 이런류의 해결법이 다인데 나에게 전혀 도움되지 않았으니 같은 상황이시라면 해보지 말고 넘어갑시다.
아래쪽으로 내리면 x86_64와 arm64 아키텍처 충돌이라는 내용이 있는데 혹시나 하고 터미널로 돌아와서 오류를 정독해보았다.
아주 친절하게 오류에서 강조 표시를 해둔 부분이 있었다.
have 'x86_64', need 'arm64'
나는 m1 맥북이 처음 나왔던 시절 쯤 구매를 해서 그때 상태 그대로 로제타로 터미널을 열고, intel 에 맞는 homebrew 를 쓰고 있기에, ruby, gem 도 x_86_64 에 맞춰져 있는게 원인인 듯 싶었다.
터미널에 uname -m 을 입력해보시면 x86_64 인지 arm64인지 나온다. 아마도 로제타를 통해 연다면 x86_64 일것이다.
터미널에 아래 명령어 입력 시 brew 위치가 나오는데, 해당 위치면 구버전이니 새로 갈자!
$ which brew
/usr/local/bin/brew
해결해보자 - arm64
맥북 파인더에서 [응용 프로그램] -> [iTerm] 우클릭 -> [정보 가져오기] -> [Rosetta를 사용하여 열기] 체크 해제
이러고 iTerm 종료 후 재시작하면 arm64 로 변경될 것이다.
이제 기존 x86_64 homebrew 를 삭제하고 arm64 아키텍쳐에 맞는 최신 버전을 설치해보자
삭제 명령어를 입력하자
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
터미널에 brew 를 입력해서 command not found 가 나올때까지 계속 반복해서 삭제하면 된다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
다시 설치해주면 최신 homebrew 가 설치된다. 중간에 엔터나 비밀번호를 입력해야하니 잘 보고 있으면 된다.
험난한 최신 버전 ruby 설치
여기서부터가 고역이었다.
사실 ruby 설치법은 간단하다. brew 로 몇가지 다운 후 rbenv 라는 루비 환경을 관리하는 툴을 통해 바로 install 해주면 된다.
하지만, 인터넷에 나온 간단한 방법으로 설치 시 온갖 버전을 설치해봐도 아래와 같이 BUILD FAILED 에러에 마주쳤다.
뭔가 문제가 있다고 생각해 ruby-build issue를 서치해보았다.
여기서 그 해답을 얻을 수 있었다.
https://bugs.ruby-lang.org/issues/18912
요약하자면, Xcode14 에서 루비를 빌드할 수 없고, Xcode14라면 Xcode13으로 다운그레이드 해야한다.
그러나 Mac OS Ventura는 무조건 Xcode14 를 사용해야하기에 이 점은 루비측에서 수정 중이다.
We fixed this issue at Ruby 2.7-3.1 and master branch. But the stable versions are not released yet.
Option 1: We strongly recommend to not upgrade Xcode 14 and its toolchains for macOS 12(Monterey) users. If you already update Xcode 14, you remove them with sudo rm -rf /Library/Developer/CommandLineTools and install Xcode 13.x or toolchains from https://developer.apple.com/download/allOption 2: macOS 13 (Ventura) couldn't install Xcode13. We should add --without=+,bigdecimal --enable-shared to the configure option.
결국 나는 Ventura 에다가 Xcode14 였기에 루비 버그로 인해 설치가 안되는 것이었다.
그래도 아직 정식 릴리즈는 아니지만 3.2.0 버전에서 해당 이슈가 해결되었다는 토론을 발견했다!
https://github.com/rbenv/ruby-build/discussions/2127
3.2.0 버전을 설치하기 위해 ruby-build 에서 제공하는 install environment 를 제대로 구성해야한다.
https://github.com/rbenv/ruby-build/wiki#suggested-build-environment
brew install openssl@3 readline libyaml gmp
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)"
ruby v3 부터는 openssl3를 사용하는데 명시적으로 옵션 지정을 해줘야하는 것 같다.
brew install rust
중요한건 v3.2.0 설치를 위해선 rust 를 homebrew로 미리 설치해줘야한다.
rbenv install 3.2.0
~/.zshrc 파일에는 homebrew 설정, rbenv 설정, openssl 설정을 추가해주었다.
변경 후 source ~/.zshrc 하는 것 잊지 맙시다!
export PATH="/opt/honebrew/bin:$PATH"
export PATH="/opt/homebrew/sbin:$PATH"
# rbenv
export RBENV_ROOT=/opt/homebrew/opt/rbenv
export PATH=$RBENV_ROOT/bin:$PATH
eval "$(rbenv init -)"
# openssl
export LDFLAGS="-L/opt/homebrew/opt/openssl@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/openssl@3/include"
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)"
환경 구성을 마치고 rbenv 를 통해 3.2.0을 install 해보았다.
아무런 오류 없이 정상적으로 Installed 됐다는 메시지가 뜬다!
rbenv global 3.2.0
지금 설치한 3.2.0을 사용할 ruby 로 선택해주자
이렇게 M1, Ventura, XCode14 최신 환경에서 ruby 버전과 아키텍쳐가 정상적으로 호환되지 않아 발생하는 문제를 해결해보았다.
과연 내 터미널은 정상적으로 돌아왔을까?
열심히 꾸며놓은 colorls 가 정상적으로 동작하고, 터미널 새 창을 열어도 더 이상 ruby 오류가 발생하지 않았다.
'DEV > 잡다한 개발 일지' 카테고리의 다른 글
사이드 프로젝트를 세상에 내놓는다는 것 - HAVIT (5) | 2023.07.29 |
---|---|
Oracle Cloud에 Jenkins를 구축해보자 (feat. nginx) (3) | 2023.07.08 |
[SOPT] 29대 서버 파트장 돌아보기 - 1 (8) | 2022.09.03 |
[tsoa] 첫 오픈소스 contributor 경험담 (6) | 2022.07.26 |
[React Native] M1 Mac에서 Android 에뮬레이터 돌리기 (0) | 2021.09.18 |