본문 바로가기
개발

Homebrew를 이용한 nvm설치 troubleshooting

by 김첨지 2023. 10. 25.

 

Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!

 

Homebrew를 이용하여 NVM을 설치하려고 하던 중 에러가 발생했다.

 

처음에는 업데이트가 진행되면서 문제없이 잘 작동하는 줄만 알았다.

 

 

하지만 업데이트가 완료되고, 다음과 같은 에러가 나타났다.

 

Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)! Please create a new installation in /opt/homebrew using one of the "Alternative Installs" from: https://docs.brew.sh/Installation You can migrate your previously installed formula list with: brew bundle dump

 

원인

homebrew 공식문서 따르면 기본적으로 설정된 접두사 위치에 homebrew를 설치하는데, macOS Intel의 경우 /usr/local, Apple Silicon의 경우 /opt/homebrew(Linux의 경우 /home/linuxbrew/.linuxbrew)이다.

 

 

해결방법

따라서 default prefix를 실리콘의 경로로 설정해 주면 될 것이다.

하지만 그 방법을 몰랐는데, 약간의 구글링으로 homebrew 홈페이지(Install Homebrew 아래)에 나와 있는 코드를 실행하면 된다는 사실을 알게 됐다. 

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

계속 진행하면 homebrew/opt/homebrew/ 디렉터리에 설치된다.

 

그리고 에러 메시지에 나와있는 대로 다음 명령어를 터미널에 입력했다.

 

brew bundle dump

 

그리고 다시 brew install nvm을 입력했는데

 

 

똑같은 에러가 발생했다.

 

여기서 살짝 멘탈이 흔들렸지만, 터미널에 나타난 로그들을 천천히 읽어봤다.

 

 

/opt/homebrew/bin가 경로에 없어, Next steps을 수행해야 한다고 한다.

 

eval "$(/opt/homebrew/bin/brew shellenv)"

 

Next steps에 나와있는 명령어를 입력하자 에러 없이 nvm을 설치할 수 있었다

 

 

추가

설치 직후까지만 해도 잘 되던 nvm이 재부팅 후 더 이상 인식되지 않았다.

 

다행히도 스택오버플로우에서 해결방법을 찾을 수 있었는데, 그 방법은 다음과 같다.

 

 

1. 홈 디렉터리에 .zshrc를 만들지 않은 경우 만들어준다.

touch ~/.zshrc  // 크기가 0인 파일을 만들거나, 마지막으로 수정한 시간을 현재의 서버 시간으로 업데이트한다.

 

 

2. .zshrc를 텍스트 편집기로 열어( vi  ~/.zshrc 혹은 파인더 이용 ) 마지막 줄에 아래 텍스트를 넣어준다.

export PATH=/opt/homebrew/bin:$PATH

만약 export PATH=$HOME/bin:/usr/local/bin:$PATH가 주석 처리 되어 있지 않을 경우 #을 붙여준다.

 

아래와 같은 에러가 터미널에 나타날 경우, 복사 붙여 넣기를 하면서 잘못된 부분이 없는지 확인한다.

본인은 PATH를 PAT로 붙여 넣었었다.

iterm2_print_user_vars:1: command not found: uname
iterm2_set_user_var:1: command not found: base64
iterm2_set_user_var:1: command not found: tr
prompt_status:5: command not found: wc

 

 

3. 수정한 값을 적용한다.

source ~/.zshrc

 

 

혹은 위에서 시도하였던 Next steps의 커맨드를 입력해 주면 된다고 한다.

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/jha/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"

 

 

Intel -> M1 Homebrew Migration 

위 과정을 진행하면 아래와 같이 homebrew 두 개가 설치된다.

# intel
╰─❯ which brew
/usr/local/bin/brew

# m1
╰─❯ which brew
/opt/homebrew/bin/brew

 

따라서 필수는 아니지만 m1 homebrew만 설치해서 깔끔하게 관리하고자, 마이그레이션 작업을 진행했다.

 

1. 백업

homewbrew에서 백업은 bundle이라고 부른다.

bundle 기능을 사용하려면 homebrew/bundle 탭을 등록해야 하는데

brew bundle 명령어를 통해 탭을 등록할 수 있다.

brew bundle

 

brew tap 명령어를 통해 탭 리스트를 확인해 보면 homebrew/bundle가 추가된 것을 확인할 수 있다.

 

homebrew에서는 package.json과 비슷한 Brewfile라는 파일을 통해 패키지 의존성을 관리한다.

brew bundle dump 명령어를 통해 현재 설치된 모든 tap, cask, formulae를 리스트로 뽑아낸 후 현재 경로에 Brewfile을 새로 생성한다.

brew bundle dump

 

 

그리고 brew bubdle install 명령어를 통해 Brewfile 리스트에 있는 패키지들을 설치한다.

brew bundle install

 

 

 

2. intel hombrew 제거

 

먼저 Rosetta를 사용하여 열기를 체크해야 한다는 블로그가 있었다.

응용프로그램 목록에서 iTerm.app에 대한 정보 가져오기를 클릭하면 아래와 같은 창이 나타난다.

 

그리고 ~/.zshrc의 m1 homebrew 관련 코드들을 주석처리 한다. (이 절차로 위 Rosetta를 사용하여 열기를 체크하지 않아도 될 것 같다)

# eval "$(/opt/homebrew/bin/brew shellenv)"

# export PATH=/opt/homebrew/bin:$PATH

 

source ~/.zshrc 후 which brew 명령어로 인텔버전 homebrew 경로 /usr/local/bin/brew가 맞는지 확인해 준다.

 

그 후 아래 커맨드를 터미널에 입력하여 homebrew를 삭제하고

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

 

/usr/local에서 Homebrew 폴더까지 삭제하면 intel homebrew가 완전히 삭제된다.

rm -rf Homebrew

 

Reference

https://docs.brew.sh/

https://brew.sh/ 

https://database.guide/fix-cannot-install-in-homebrew-on-arm-processor-in-intel-default-prefix-usr-local/

https://github.com/ohmyzsh/ohmyzsh/issues/9702

'개발' 카테고리의 다른 글

MVC 패턴  (0) 2022.07.23