Безопасно ли устанавливать Homebrew и Macports на одну и ту же машину?

73

На моем iMac установлены MacPorts с достаточным количеством установленных портов.

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

Но могут ли они сосуществовать на одной машине или мне нужно сначала полностью удалить MacPorts?

Кроме того, если они могут быть установлены одновременно, будут ли они полностью независимы друг от друга? Одна из особенностей Homebrew заключается в том, что он не переустанавливает новые версии вещей, которые уже включены в систему (например, python). Это также распространяется на то, что он не устанавливает версии вещей, которые уже поддерживаются MacPorts?

Что произойдет, если я впоследствии удалю MacPorts?

Богатый
источник

Ответы:

24

Они не будут хорошо сосуществовать вместе. Apple gcc ищет в / usr / local некоторые вещи. Это означает, что компиляция macports может найти то, чего не ожидал портер. Посмотрите списки рассылки и ошибки macports для примеров того, что можно найти в / usr / local.

user151019
источник
4
Я только очень поверхностно посмотрел на homebrew, но если вы изменили место установки homebrew по умолчанию с / usr / local на что-то вроде / opt / homebrew / usr / local, можно ли избежать этой проблемы?
Бабу
@Babu - Согласно Brew, вы должны действовать с осторожностью
Питер Айтай
@babu - возможно, но будут проблемы с тем, какой из homebrew или macports сначала использует путь, а другой выбирает эти исполняемые файлы, и я подозреваю, что порты любой системы не полностью протестированы с использованием другого пути
user151019
18

Я дал другой ответ на похожий вопрос:

Homebrew вызовет проблемы при сборке программного обеспечения из исходного кода, если оно установлено в / usr / local. Это значение по умолчанию, что является плохим выбором, поскольку этот путь находится в пути поиска по умолчанию для компиляторов и других инструментов. Поэтому сборки из другого программного обеспечения для упаковки могут обнаружить неправильную зависимость, используя версию Homebrew вместо своей собственной.

Несколько лет назад, в самом начале проекта, даже MacPorts использовал / usr / local. Но оказалось, что не сотрудничать с другими инструментами, как это задокументировано в их FAQ. К сожалению, разработчики Homebrew не хотели слышать о предыдущем опыте и игнорировали такие факты ...

Как правило, лучше всего придерживаться одного инструмента, чтобы избежать всех проблем. MacPorts делает все возможное, чтобы исправлять любые пути с харакодом, например, к / sw, который используется Fink. Так что обычно это работает, но установка чего-либо в / usr / local определенно вызовет проблемы.

[...]

raimue
источник
Похоже, что также можно установить homebrew в ~/.homebrew. Будет ли он по-прежнему мешать работе MacPorts, если он там установлен?
Behrang
Любое другое место, кроме / usr / local, должно быть в порядке.
Райм
Хорошо ли будут сосуществовать MacPort и Homebrew, если установить Homebrew в / opt / local, где установлен MacPort?
Адам Л.С.
1
Вам не следует устанавливать другое программное обеспечение вручную в / opt / local, если MacPorts там уже установлен. Это определенно помешает, когда вы поместите туда файлы, которые не известны MacPorts, что приведет к конфликтам при установке портов.
Рэйм
8

Раньше я думал, что беспокойство по поводу того, из чего будут делать инструменты сборки Gnu, /usr/localбыло на грани параноика. Инструменты сборки ожидают, что там будет много чего: в старые добрые времена перед менеджерами пакетов (я шучу) мы компилировали все, что угодно /usr/local. Но хотя Autoconf обычно выявляет проблемы, сложность сборки многих проектов с открытым исходным кодом действительно вызывает проблемы, и эти проблемы могут быть трудно устранить, когда вы столкнетесь с трудностями.

Но риск проблем с тем, что Autoconf найдет что-то, что ему не /usr/localнужно, должен быть сбалансирован из-за неудобств обслуживания, связанных с двумя, тремя или четырьмя различными копиями Perl, Tcl и Ruby, каждая из которых имеет разный охват своих библиотек пакетов. Неприятно.

Поскольку мой опыт работы с MacPorts и Fink, как правило, был раздражением, вызванным именно этим, и в какой-то момент переключился на компиляцию по старинке /usr/local, я был рад видеть, что Homebrew не связывался с этим. Я пытался настроить MacPorts для установки /usr/local, но MacPorts делает все возможное, чтобы сделать это трудным. Я понимаю, что мотивация состоит в том, чтобы облегчить себе жизнь, когда имеешь дело с криками о помощи в их списке рассылки и баг-трекере: имейте в виду, что, хотя мы должны уважать усилия добровольцев-упаковщиков и относиться к их драгоценному времени, их удобство отладки - не единственный вид простоты, который влияет на вас как пользователя.

Homebrew, по крайней мере, в этом отношении, делает все так, как раньше, и MacPorts старается не вмешиваться. Если вы готовы задокументировать, какие пакеты вам нужны, с помощью Homebrew, а также очистить и переустановить / usr / local в случае затруднений, вы всегда можете вернуться в случае, если что-то пойдет не так. И как только вы поймете, что проблемы в / usr / local обычно не несут в себе риска нанести непоправимый ущерб вашим машинам, вы можете чувствовать себя более свободными, чтобы рисковать.

Я просто отмечу, насколько хуже упаковка в OSX, чем во FreeBSD: Apple, похоже, не особо заботится о удобстве использования своего подсистемы BSD, потому что это проблема, с которой они могут помочь.

Чарльз Стюарт
источник
Ну, мой вопрос задан с точки зрения тупого пользователя, который просто использует менеджер пакетов, чтобы "получить материал". Нет никакой уверенности, что я смогу «немного разобраться в себе, если что-то пойдет не так». Тем не менее, в любом случае upvote за дополнительные разъяснения. Спасибо!
Богатые
1
MacPorts как веские причины не использовать / usr / local, см. Trac.macports.org/wiki/FAQ#defaultprefix
raimue
3
@Raim: веские причины для них - это в значительной степени компромисс между их удобством отслеживания ошибок и простотой установки на компьютере пользователя. Я забочусь о последнем.
Чарльз Стюарт
1
Количество вещей, которые могут пойти не так, потому что кто-то (или что-то) установил копию $ lib, /usr/localбесконечно. Архитектуры, версии, настроенные функции и флаги, частичные установки, устаревшие установки с проблемами безопасности, а также и и будут вызывать проблемы. Конечно, продолжайте, если вы знаете, что делаете, но не сообщайте об ошибках. Опыт показывает, что люди все равно регистрируют ошибки, и именно поэтому существует режим трассировки ( -tсм. Ниже), и поэтому избегание /usr/localявляется рекомендацией по умолчанию.
Neverpanic
@neverpanic - Мое мнение о рисках компиляции всего в / usr / local изменилось с тех пор, как я написал этот ответ, в основном потому, что сложность сборки типичных проектов с открытым исходным кодом просто растет, а проблемы Autoconf не облегчаются разобраться: по крайней мере, «граничить с параноиком» несправедливо. Мне все еще не нравится подход Macports к "собственной частной сборочной вселенной", и он заслуживает того, чтобы подчеркнуть, что простота взаимодействия со списком рассылки - не единственная простота, о которой должен беспокоиться конечный пользователь. Я добавлю предостережения к своему ответу.
Чарльз Стюарт
6

Согласно FAQ по MacPorts :

Обратите внимание, что начиная с 2.3.0, MacPorts может автоматически скрывать / usr / local (и все другие файлы, от которых порт не зависит) от систем сборки портов. Эта функция называется режимом трассировки и активируется путем предоставления флага -t для порта, например

sudo port -t install <portname>

Это актуально, потому что согласно странице установки Homebrew:

Одна из причин, по которой Homebrew работает по отношению к конкурентам, заключается в том, что мы рекомендуем установить в / usr / local. Выберите другой префикс на свой страх и риск!

Поэтому, имея небольшой личный опыт, я предполагаю, что всегда использование флага -t для установок MacPort должно предотвратить большинство проблем, связанных с сосуществованием MacPorts и Homebrew в одной и той же системе. Чтобы ответить на ваш последний вопрос: я не вижу причин, по которым удаление MacPorts могло бы вызвать проблемы.

webappzero
источник
Имейте в виду, что вы будете страдать от значительного снижения производительности. Но в целом это должно работать практически во всех случаях.
Neverpanic
Спасибо за указание на это предостережение @neverpanic. Я предполагаю, что указанное снижение производительности влияет только на время установки порта и никак не влияет на характеристики времени выполнения установленного порта. Правда?
webappzero
Верный. Это только предотвращает проблемы во время сборки, но не проблемы во время выполнения (но они очень редки).
Neverpanic
На практике я не запомнил это требование всегда использовать флаг трассировки. Поэтому я не рекомендую эту практику другим, если вы не уверены, что будете использовать -t последовательно.
webappzero
Если вы не хотите его помнить, вы можете написать скрипт-оболочку или псевдоним оболочки (но помните о взаимодействии между псевдонимами sudo и shell), чтобы всегда передавать его вам. Обратите внимание, что Эль-Капитан в настоящее время нарушает режим трассировки. Я работаю над обходным путем.
Neverpanic
4

При установке homebrew на компьютер, где я годами использую порты, вот что я могу прочитать:

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports

Быть осторожен!

plang
источник
1

Решение webappzero sudo port -t ...должно помочь. Честно говоря, я работаю с Fink, MacPorts и Homebrew одновременно, с уважением к MacPorts (пока что в любом случае), и использую только два других для установки вещей, которые я не могу получить от MacPorts. Таким образом, я столкнулся с очень немногими трудностями, даже до того, как port -tосвоил трюк. Однако если вы пытаетесь использовать несколько диспетчеров пакетов для поддержки сложных сред разработки и серверов, вы, вероятно, по крайней мере испытываете дискомфорт. Выберите один и избегайте других, но для чего-то, в чем вы отчаянно нуждаетесь от них, и поставьте основной на более ранний путь.

Если то, что я слышу, правда о том, что Apple собирается запретить установку каких-либо вещей в / usr /, кроме собственной Apple (или, может быть, они уже делают это в El Crapitan, которую я избегаю "повышать" до тех пор, пока не произойдет больше проблемы с ним решены), я полагаю, что это уменьшит проблему после того, как Homebrew по умолчанию использует что-то другое - согласны ли мы с жестким подходом Apple или нет.

В конце концов, мне нравится идея ограничить собственные порты Apple своим собственным деревом, я просто хочу, чтобы это не было / usr /. Я бы предпочел, чтобы они использовали / System / bin / и т. Д., И т. Д., Чтобы изолировать свои собственные вещи, чтобы мне было легче обходиться с последним программным обеспечением, поддерживаемым сообществом.

С. МакКэндлиш
источник