Блог Олега Сердюкова

Менеджер пакетов Homebrew

UPD 20.09.2011: Кирилл Воронин правильно заметил: “С тех пор прошел почти год и теперь пользователю достаточно набрать в терминале одну команду”

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

Для общего же развития можете почитать, как устанавливался Homebrew раньше.

Мир технологий подвержен влиянию трендов. Как для web-сервисов сейчас трендом является NoSQL, так для любителей Unix под Mac - Homebrew.

Homebrew - это новый и многообещающий менеджер пакетов. MacPorts мне уже давно не нравится тем, что он начинает тащить слишком много всего, что и так есть штатно в системе (например, perl).

Продемонстрирую красноречивый пример:

$ port deps git-core
    Full Name: git-core @1.7.0.2+doc
    Runtime Dependencies: rsync, perl5, p5-error
    Library Dependencies: curl, zlib, openssl, expat, libiconv

При установке пакета поставятся rsync, который не копирует Resource Forks, perl5.8.x (при том, что штатно стоят 5.8.9 и 5.10.0), curl, в котором отсутствуют несколько протоколов по сравнению со штатным, и дубли zlib, openssl, expat и libiconv. И при этом отказаться от установки зависимостей простым образом не удастся.

Пока я не могу проанализировать достоинства и недостатки новой системы, это придёт в процессе работы. Пока я не уверен насчёт оперативности обновлений пакетов, но растущее community на github позволяет надеяться на лучшее.

Поэтому расскажу как поставить Homebrew и начать использовать. Мне система понравилась - такой локальный идеал для помеси Unix-администратора и программиста (git & Ruby).

Страница проекта: ”Homebrew. The missing package manager for OS X”. Проект размещён на GitHub. Установка описана в официальном Wiki.

XCode

Нужен XCode. Если не понятно зачем, то можно спокойно перестать читать эту статью.

Желательно удалить каталоги /usr/local/lib и /usr/local/include

У меня там было почти пусто, разве что стояли библиотеки для cli Handbrake, поэтому спокойно удалил lib и include. Но в вашем случае нужно взвешивать - например, если вы сами ставили mc, то он перестанет работать. С другой стороны вы потом сможете переставить все пакеты сами. Но это решение целиком за вами, я не буду ничего рекомендовать.

Удаление MacPorts (необязательно)

MacPorts я давно не использую, поэтому решил полностью удалить его вместе со всеми пакетами. Как это сделать, вы можете посмотреть детальнее в документации.

Напомню - если вам для работы нужны какие-либо пакеты, установленные в MacPorts, или вы используете MySQL, Apache и т.п., то я не рекомендую удалять MacPorts. Вы рискуете остаться без своих инструментов в момент, когда они вам очень будут нужны. Также если вы решили всё-таки переустанавливать всё с нуля, то лучше подождать со сносом до окончания установки новых пакетов в Homebrew - вы можете столкнуться с тем, что какой-то пакет был скомпилирован с особенной опцией.

Повторяю, я на ноутбуке уже давно не пользовался пакетами MacPorts, поэтому спокойно могу их снести. Для начала я составил список того, что будет нужно переустановить в новой системе:

$ port installed
...
corkscrew @2.0_0+darwin_i386 (active)
lftp @4.0.2_0 (active)
lynx @2.8.6rel.5_1+ssl (active)
mtr @0.75_0+darwin_10 (active)
...

Удаляю все установленные пакеты:

$ sudo port -f uninstall installed

Удаляю все следы MacPorts, включая /opt/local:

$ sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports

Готово. Если в этот момент вы вспомнили о важном файле, который вы только что удалили, то вспоминайте, как пользоваться Time Machine. Ведь вы же делаете регулярные бекапы, не так ли?

Путь в переменных окружения

Путь к /usr/local/bin должен быть в переменной окружения $PATH. Я помещаю её в ~/.profile:

PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/bin:/usr/local/sbin:/usr/local/git/bin"
export PATH

В определённых случаях может понадобиться модифицировать файл ~/.MacOSX/environment.plist, добавив туда переменную окружения PATH:

Вы заметили путь к GIT - я его описывал в статье Установка Git под Mac OS X. В установочном пакете есть скрипт, который автоматически правит ~/.MacOSX/environment.plist.

Установочный скрипт

Идём на github ruby-скрипт install_homebrew.rb. Он расположен на сервисе gist.github - это очень интересный сервис для обмена фрагментами кода.

Можно его списывать в браузере (будет сформирован и списан архив tar.gz, его нужно будет развернуть):

Или же в консоли:

$ curl http://gist.github.com/gists/323731/download -o install_homebrew.tar.gz
$ tar xvfz install_homebrew.tar.gz
x gist323731-3535cf3d066ed38db4e99d3f1f4a409fc07eda54/
x gist323731-3535cf3d066ed38db4e99d3f1f4a409fc07eda54/install_homebrew.rb
$ cd gist323731*
$ chmod +x install_homebrew.rb

Установка Homebrew

Запускаем скрипт под пользователем без всяческого sudo:

$ ./install_homebrew.rb

С первого раза установить скорее всего не получится, и нужно будет проделать некоторые манипуляции.

Каталог /usr/local мог быть раньше создан с разнообразными неправильными правами, поэтому по результату выполнения скрипта нужно их подправить. Например, если права были 777, то будет сообщение:

Press enter to continue
./install_homebrew.rb:44: warning: Insecure world writable dir /usr/local in PATH, mode 040777

Нужно прервать скрипт и выполнить команду:

$ sudo chmod 755 /usr/local

Ещё очень важно поменять группу для /usr/local с wheel на staff:

$ sudo chgrp -R staff /usr/local
$ sudo chmod 775 /usr/local/

После очередной итерации Homebrew поставился:

==> This script will install:
/usr/local/bin/brew
/usr/local/Library/Formula/...
/usr/local/Library/Homebrew/...

Press enter to continue
==> Downloading and Installing Homebrew...
==> Installation successful!
Yay! Now learn to brew:

    brew help

Использование Homebrew

Поиск:

$ brew search git

Информация по пакету

$ brew info git

Установка пакета:

$ brew install git

Обновление Homebrew (нужен git)

$ brew update

Список установленных пакетов:

$ brew list

Удаление пакета:

$ brew uninstall mc

Список пакетов, для которых есть обновления:

$ brew outdated

Мои любимые пакеты

Восстанавливаю пакеты, которые я использовал в MacPorts.

$ brew install mtr
$ brew install corkscrew
$ brew install lftp
$ brew install lynx

Comments