Homebrew는 macOS를 사용하는 프로그래머에게 손쉽게 다양한 패키지를 설치할 수 있게 도와주는 필수적인 프로그램입니다.
2020년 애플이 M1 칩셋을 탑재한 맥북이 출시되고, 2021년 2월 macOS의 커맨드 라인 패키지 매니저 homebrew에서도 3.0.0부터 M1을 정식 지원한다고 발표했습니다. 3.0.0이 출시되기 이전에는 강제로 iTrem이나 터미널을 Rosetta2를 사용해 인텔 버전으로 실행해서 Homebrew를 사용했습니다만 이제는 이렇게 사용하지 않아도 정상적으로 brew 명령어를 사용할 수 있습니다.
기존에 Intel용 Homebrew를 사용했었다면 삭제하고, 그렇지 않다면 M1 칩셋에 맞는 Homebrew설치 방법에 대해서 알아보겠습니다.
brew 설치 확인
$ which brew
/usr/local/bin/brew
위와 같이 /usr/lcoal/bin/brew가 출력된다면 구 버전의 Homebrew가 설치되어 있다는 의미입니다. Homebrew가 설치되어 있지 않다면 brew not found가 출력됩니다.
위와 같이 설치되어 있었다면 다음 명령어로 Homebrew를 삭제합니다.
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
brew를 실행했을 때 command not found 라고 나오면 잘 삭제된 것입니다.
간혹 삭제해도 brew 명령어가 남아있거나, Homebrew가 서로 다른 경로에 여러 번 설치되는 경우가 있는데, 이런 경우에는 brew가 실행되지 않을 때까지 uninstall을 반복합니다.
애플 M1용 Homebrew 설치
기존 Homebrew를 설치하는 것과 마찬가지로 설치 스크립트를 실행하면 설치가 진행됩니다.
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
중간에 macOS 계정 패스워드와 엔터를 입력해야하니 메시지를 잘 확인해주세요.
M1에서 Homebrew를 설치할 때 아래 메세지가 나오고 시간이 몇 분 정도 소요됩니다.
Downloading Command Line Tools for Xcode
Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode
.....
Done with Command Line Tools for Xcode
설치가 완료되면 마지막으로 안내 메시지가 나타납니다.
==> Next steps:
- Add Homebrew to your PATH in /Users/<USER_ID>/.zprofile:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<USER_ID>/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
- Run `brew help` to get started
- Further documentation:
https://docs.brew.sh
안내에 따라 다음 2줄을 실행해줍니다.
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<USER_ID>/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
최신 Homebrew가 잘 설치되었는지 설치 위치와 버전을 확인해봅니다.
$ which brew
/opt/homebrew/bin/brew
$ brew --version
Homebrew 3.3.15
Homebrew/homebrew-core (git revision c3fd3c90a89; last commit 2022-02-21)
Homebrew/homebrew-cask (git revision 369adc557d; last commit 2022-02-21)
설치 끝!
Homebrew 패스 설정 명령어 해설
마지막에 실행한 내용이 어떤 작업인지 궁금할 수도 있습니다. 간단하게 해설을 해보자면 다음과 같습니다.
먼저 첫번재 줄입니다.
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/<USER_ID>/.zprofile
첫 번째 줄은 위 콘텐츠를 /Users/<USER_ID>/.zprofile 파일에 리다이렉트 해줍니다. >> 를 사용하면 해당 파일의 맨 아래에 내용을 추가하거나, 파일이 없으면 새로 만들어줍니다. 이 파일은 ZSH셸이 실행될 때 실행되는 초기화 스크립트 중 하나입니다. 안내 메시지는 현재 사용 중인 셸을 판단해서 어떤 파일에 내용을 넣을지 알려줍니다. Bash를 사용 중이라면 ~/.bash_profile이나 다른 셸을 사용 중이라면 ~/.profile 파일에 같은 내용을 넣어주면 됩니다.
두 번째 줄은 바로 첫 번째 줄의 내용을 현재 실행 중인 셸에 적용하는 명령어입니다.
eval "$(/opt/homebrew/bin/brew shellenv)"
아래 명령어를 직접 실행해보면 Homebrew와 관련된 패스 설정 명령어들이 나타납니다.
$ /opt/homebrew/bin/brew shellenv
export HOMEBREW_PREFIX="/opt/homebrew";
export HOMEBREW_CELLAR="/opt/homebrew/Cellar";
export HOMEBREW_REPOSITORY="/opt/homebrew";
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin${PATH+:$PATH}";
export MANPATH="/opt/homebrew/share/man${MANPATH+:$MANPATH}:";
export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";
셸의 $() 구문을 이용하면 명령어의 실행 결과(텍스트)를 다른 명령어에 넘겨줄 수 있습니다. 이 텍스트를 eval에 넘겨서 현재 셸에서 실행해줍니다. 어떤 변화가 있는지 아래와 같이 확인해볼 수 있습니다.
$ env | grep HOMEBREW
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ env | grep HOMEBREW
HOMEBREW_PREFIX=/opt/homebrew
HOMEBREW_CELLAR=/opt/homebrew/Cellar
HOMEBREW_REPOSITORY=/opt/homebrew
처음에는 HOMEBREW로 검색되는 환경변수가 없습니다만, eval을 실행하고 나면 HOMEBREW가 키에 포함된 환경변수들이 등록된 것을 확인할 수 있습니다. .zprofile 파일에 이 내용을 등록했으니, 다음부터는 ZSH을 실행할 때마다 자동적으로 이 환경변수들이 셸에 추가되고 brew 명령어를 사용할 수 있습니다.