Как я могу запустить две изолированные установки Homebrew?

Я хочу установить и запустить две версии Homebrew одновременно на Apple Silicon Mac: версию ARM64 и версию Intel, работающую под Rosetta 2.

Я знаю Я могу добавить к любой команде brew arch --x86_64, чтобы эмулировать Intel для этой команды, но это может привести к конфликтам для формул, зависимости которых вы уже построили для ARM64. Например:

Error: gnupg dependencies not built for the x86_64 CPU architecture:
  pkg-config was built for arm64
  gettext was built for arm64
  readline was built for arm64
  [email protected] was built for arm64

Как я могу установить и запустить две отдельные изолированные версии Homebrew (одну для собственного ARM64 и одну для эмулированной Intel), сохраняя при этом каждую из установленных формул и зависимостей отдельно?


person Jacob Ford    schedule 22.11.2020    source источник


Ответы (2)


  1. Установите Homebrew на Apple Silicon в /opt/homebrew:

    mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
    
  2. Установите Homebrew с эмуляцией Intel по умолчанию /usr/local:

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

    Если вы еще не установили Rosetta 2, вам нужно сначала запустить softwareupdate --install-rosetta.

  3. Создайте псевдоним для доморощенного Intel. Я звоню своему brow, потому что О для старого. Но эй, ты занимаешься своим делом.

    В ~/.zshrc (или в эквиваленте вашей оболочки) добавьте:

    alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
    
  4. Добавьте ARM Homebrew в свой PATH.

    В ~/.zshrc (или в эквиваленте вашей оболочки) добавьте:

    # Homebrew on Apple Silicon
    path=('/opt/homebrew/bin' $path)
    export PATH
    

    Если вы все еще на bash, это будет PATH=/opt/homebrew/bin:$PATH

  5. Подтверждать

    which brew должен вернуть /opt/homebrew/bin/brew

    brew --prefix должен вернуть /opt/homebrew

    which brow должен вернуть brow: aliased to arch --x86_64 /usr/local/Homebrew/bin/brew

    brow --prefix должен вернуть /usr/local


Если у вас установлена ​​одна и та же команда в обоих Homebrews, по умолчанию будет использоваться Apple Silicon (/opt/homebrew/), поскольку мы добавили эту команду в наш PATH. Чтобы переопределить, запустите команду с полным путем (/usr/local/bin/youtube-dl) или замените свой PATH для одной команды (PATH=/usr/local/bin youtube-dl).

Я также создал еще один удобный псевдоним в .zshrc (alias ib='PATH=/usr/local/bin'), поэтому я могу добавить любую установленную Homebrew команду с ib, чтобы принудительно использовать версию этой команды Intel:

~ ▶ which youtube-dl
/opt/homebrew/bin/youtube-dl
~ ▶ ib which youtube-dl
/usr/local/bin/youtube-dl

Если вы предпочитаете использовать Intel по умолчанию brew, добавьте /opt/homebrew/bin в конец вашего PATH вместо начала.

person Jacob Ford    schedule 22.11.2020
comment
почему-то команда arch у меня не работает ... :( bash $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" Password: Homebrew is not (yet) supported on ARM processors! [...] Я пробовал все, что мог найти, но начинаю думать, что я единственный. Помогите? Может быть? - person flypenguin; 11.12.2020
comment
@flypenguin Похоже, вы на самом деле не используете команду arch, поэтому Homebrew отказывается устанавливать. Добавьте то, что вы вставили выше, с помощью arch --x86_64. - person Jacob Ford; 04.01.2021
comment
чувак, ты спасатель ???? - person Vandit Shah; 06.03.2021

  1. Установить родной Homebrew

    ❯ arch --arm64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    все материалы, связанные с Homebrew, находятся в /opt/homebrew.

  2. Установить Rosetta Homebrew

    ❯ arch --x86_64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    все материалы, связанные с Homebrew, находятся в /opt/local.

  3. Настройка ~/.zshrc для использования Brew по умолчанию на основе arch,

    # Multiple Homebrews on Apple Silicon
    if [ "$(arch)" = "arm64" ]; then
        eval "$(/opt/homebrew/bin/brew shellenv)"
        export PATH="/opt/homebrew/opt/[email protected]/bin:$PATH"
        # export LDFLAGS="-L/opt/homebrew/opt/[email protected]/lib" # For compilers to find [email protected]
    else
        eval "$(/usr/local/bin/brew shellenv)"
        export PATH="/usr/local/opt/[email protected]/bin:$PATH"
        export PATH="/usr/local/opt/[email protected]/bin:$PATH"
        # export LDFLAGS="-L/usr/local/opt/[email protected]/lib" # For compilers to find [email protected]
    fi
    
  4. Тестовое задание

    ❯ arch
    arm64
    ❯ which brew
    /opt/homebrew/bin/brew
    ❯ arch -x86_64 zsh
    ❯ arch
    i386
    ❯ which brew
    /usr/local/bin/brew
    # set alias as you like
    ❯ rzsh='arch -x86_64 zsh'
    
person liviaerxin    schedule 19.07.2021
comment
Ох, мило. Обратите внимание, что здесь используется соответствующий brew, основанный на вашей текущей архитектуре (отлично подходит для кросс-архитектурного скриптинга), но не дает вам двух разных команд для ввода от внутри ARM до выберите, какой brew вы хотите использовать. - person Jacob Ford; 19.07.2021