Как установить неподдерживаемое программное обеспечение для разработки на M1 Mac


Разработчики по всему миру ежедневно используют компьютеры Mac на базе Intel, но многие из них сталкиваются с проблемами при настройке среды разработки на компьютерах Apple silicon M1 Mac.

Большой переход с Intel на M1

В ноябре 2020 года компания Apple выпустила первый Mac с чипом M1 на базе ARM-архитектуры вместе с новыми моделями MacBook Pro, MacBook Air и Mac mini. С момента выпуска чип M1 получил поразительные отзывы и похвалы за эффективность и производительность — и это знаменует собой переход Apple от чипов Intel, которые использовались в течение последних 15 лет.

Предположим, вы рассматриваете возможность покупки нового Mac или MacBook Pro с кремниевым процессором Apple для разработки, но при этом беспокоитесь о переносе существующего проекта с Mac на базе Intel. В таком случае в этом блоге мы расскажем о некоторых советах & трюках, которые помогут вам продолжить программирование и облегчат переход.

Подходит ли кремний Apple M1 для разработчиков?

С тех пор как два года назад Apple представила первые компьютеры Mac на базе M1, они обеспечили революционную производительность и потрясающее время автономной работы.

Вначале чипы M1 можно было найти только в компьютерах Mac, ориентированных на потребителей, и они, безусловно, имели некоторые ограничения — например, могли поддерживать только один внешний монитор. Следующий шаг произошёл пару месяцев назад — в октябре 2021 года, когда Apple представила новые M1 Pro и M1 Max — новые прорывные чипы для Mac.

Первое, что мы заметили: более мощная архитектура M1, больше ядер CPU, больше ядер GPU, больше оперативной памяти, больше портов на моделях MacBook Pro — и возможность подключения более одного внешнего монитора.

У новых чипов Apple M1 есть много плюсов, однако есть и некоторые минусы, на которые следует обратить внимание, например, программное обеспечение и инструменты, к которым вы привыкли, могут поддерживаться не полностью.

Хотя уже существует множество программ, оптимизированных для Apple Silicon, есть и такие, которые требуют дополнительного шага в виде среды перевода — например, Apple Rosseta, которая переводит приложения, разработанные для архитектуры Intel, на архитектуру M1.

Проблема программного обеспечения

В нашей компании Devōt мы используем машины Mac как на базе Intel, так и на базе M1, и многие из нас используют менеджер пакетов Homebrew, который упрощает установку различного программного обеспечения — например, Ruby, Git, MySQL и т.д.

Однако при попытке установить некоторые старые версии этих программ на архитектуру M1 мы вскоре сталкиваемся со многими проблемами, связанными с установкой родных расширений и различных зависимостей.

Чтобы решить эти проблемы и попытаться установить неработающие зависимости, мы перепробовали множество различных решений и расширений, включая различные установки через терминал на архитектуре Apple и Intel. В результате получился огромный беспорядок в программном обеспечении для разработки, который не выглядел многообещающим. Например, попытка установить более старую версию Ruby 2.3.6 (которая не поддерживается на архитектуре M1), постоянно вызывала проблемы с ffi 1.9.18 gem и OpenSSL 1.0 (также не поддерживается на архитектуре M1).

После многих попыток с установкой пользовательских зависимостей, Ruby 2.3.6. вроде бы установился. Однако, были также проблемы с Ruby bundler при установке гемов проекта — в общем, большой беспорядок.

Одна из самых больших проблем в этом переходе заключается в том, что некоторые крупные проекты используют более старый технологический стек, который может не поддерживаться архитектурой M1. Например, возьмем MySQL Database Service — MySQL@5.6 не поддерживается на архитектуре M1, и попытка установить его с помощью Home-brew на архитектуре M1 приводит к множеству различных ошибок.

Если вам каким-то образом удастся установить MySQL@5.6 с помощью пользовательских команд установки, другое программное обеспечение, такое как Bundler для Ruby, скорее всего, не будет работать — потому что MySQL@5.6 не поддерживается на M1, и опять же вы можете ожидать различных ошибок.

Итак, каково же решение?

Решение на самом деле более простое, чем может показаться — вы должны использовать только одну архитектуру для установки всего технологического стека в вашей среде разработки.

Например — в Россети у нас может быть установлено 2 системы Homebrew — при установке с кремниевой архитектурой Apple — каталог Homebrew по умолчанию — /opt/homebrew. При установке с архитектурой Intel, есть другой каталог по умолчанию, и это /usr/local.

При использовании терминала мы можем выполнять команды на языке Rosetta (на архитектуре intel), но ошибки все равно могут произойти, и в итоге мы снова получим беспорядок.

Пример псевдонимов:

alias rbrew="arch -x86_64 brew"
alias ibrew='arch --x86_64 /usr/local/Homebrew/bin/brew'
Войти в полноэкранный режим Выйти из полноэкранного режима

В нашем примере мы используем iterm на Mac в качестве основного терминального приложения и оболочку zsh с фреймворком Oh My Zsh для Zsh.

Добавление некоторых псевдонимов в конфигурационный файл zsh (.zshrc) для переключения между архитектурой Intel и Mac может сильно помочь нам в настройке среды — при установке всех библиотек над homebrew и других инструментов и программ.

alias armzsh="arch -arm64 zsh"
alias intelzsh="arch -x86_64 zsh"
Вход в полноэкранный режим Выход из полноэкранного режима

Чтобы отобразить, в какой архитектуре мы находимся в данный момент, мы можем добавить этот параметр в наш конфигурационный файл zsh (.zshrc).

if [ "$(uname -p)" = "i386" ]; then
  echo "Running in intel arch (Rosetta)"
  eval "$(/usr/local/homebrew/bin/brew shellenv)"
  alias brew='/usr/local/homebrew/bin/brew'
else
  echo "Running in ARM arch"
  eval "$(/opt/homebrew/bin/brew shellenv)"
  alias brew='/opt/homebrew/bin/brew'
fi
Войти в полноэкранный режим Выйти из полноэкранного режима

Несмотря на то, что это может показаться тривиальным, убедиться в том, что вы находитесь в правильной архитектуре, очень важно, чтобы избежать многих проблем, вызванных различными homebrew.

В качестве менеджера версий мы предлагаем asdf. asdf — это инструмент CLI, который может управлять несколькими версиями времени выполнения языка на основе каждого проекта.

Как это работает?

Большинство инструментов и программ будут прекрасно работать на архитектуре M1, но некоторые инструменты требуют установки, которая не будет работать. В нашем примере выполнение команды asdf install ruby 2.3.6 не сработает из-за проблем с архитектурой на M1, но если мы переключимся на Rosetta с помощью команды alias и выполним команду asdf install ruby 2.3.6, все пройдет успешно. Итак, теперь Ruby 2.3.6 скомпилирован и установлен из Rosetta, и мы можем использовать его даже на архитектуре M1 (armzsh).

Так как Mac M1 имеет только чип архитектуры M1, вам придется адаптироваться к архитектуре M1, если вы планируете использовать его. Как это работает на архитектуре Apple M1 ARM? Каждый раз, когда мы используем Rosetta для установки неподдерживаемой программы или инструмента, Rosetta компилирует его в архитектуре Intel — а затем делает установку в архитектуре M1 ARM. Rosetta требуется только на этапе компиляции и установки, а затем наши программы должны работать везде.

Поскольку мы используем как Intel-, так и M1-машины Mac, не стесняйтесь проверять наши другие записи в блоге здесь https://devot.team/blog/how-to-install-unsupported-development-software-on-m1-mac, и обращайтесь к нам с любыми вопросами, связанными с настройкой разработки — мы с радостью постараемся помочь.

Оцените статью
devanswers.ru
Добавить комментарий