Вчера я слегка рассказал об установке XCode, сегодня же "вернёмся к корням" - займёмся установкой программ Open Source. Вместе с XCode поставляются все средства разработки, поэтому мы можем теперь скомпилировать любой пакет (configure, make, make install). Но простая компиляция имеет огромный недостаток - поддерживать программы в актуальном состоянии можно исключительно вручную, нужно регулярно отслеживать выход новых версий десятка используемых пакетов, списывать их, и по-новому компилировать. Решить эту проблему призваны менеджеры пакетов (для Linux это yum, apt, для FreeBSD - система портов).

Под Mac OS X самыми распространёнными являются MacPorts и Fink. MacPorts использует идеологию BSD, Fink - Debian Linux. Мне больше нравится BSD, поэтому я использую первый менеджер. Его и рассмотрим сейчас.

Установка MacPorts

Для начала необходимо установить X11 с установочного диска Mac OS X и XCode.

Затем - списать установочный пакет под свою версию Mac OS X (для меня это MacPorts-1.8.0-10.6-SnowLeopard.dmg) и установить его.

MacPorts использует иерархию /opt/local/ как для себя, так и для установки программ. Инсталлятор в том числе прописывает этот путь в переменные окружения:

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

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

Запускаем Terminal.app. Нужно убедиться, что каталоги /opt прописаны в путях:

ole-mac:~ ctrld$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Обновляем порты:

sudo port selfupdate

Ищем нужный порт (здесь sudo необязательно):

ole-mac:~ ctrld$ port search mtr
mtr @0.75 (net)
    'traceroute' and 'ping' in a single tool

rmtrash @0.3.3 (sysutils)
    move the file to OS X's Trash

Found 2 ports.

Можно посмотреть описание порта:

ole-mac:~ ctrld$ port info mtr
mtr @0.75 (net)
Variants:             darwin_10, universal

Description:          As mtr starts, it investigates the network connection between the host mtr runs on and HOSTNAME. by sending packets with purposly low TTLs. It continues to send pack- ets with low TTL, noting the response time of
                      the inter- vening routers. This allows mtr to print the response percentage and response times of the internet route to HOSTNAME. A sudden increase in packetloss or response time is often an indication of a bad (or
                      simply over- loaded) link.
Homepage:             http://www.bitwizard.nl/mtr/

Platforms:            darwin
License:              unknown
Maintainers:          mr_bond@macports.org

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

sudo port install mtr

При установке остаются исходные тексты, скомпилированные файлы и прочее. Их можно удалить (вместо mtr, конечно же, подставив нужный порт):

sudo port clean --all mtr

Посмотреть, какие именно файлы устанавливаются с портом:

ole-mac:~ ctrld$ port contents  mtr
Port mtr contains:
  /opt/local/sbin/mtr
  /opt/local/share/man/man8/mtr.8.gz

Деинсталляция порта:

sudo port uninstall mtr

Перечень установленных пакетов:

port installed

Посмотреть, для каких пакетов есть обновления (предварительно нужно сделать selfupdate)

ole-mac:~ ctrld$ sudo port selfupdate
ole-mac:~ ctrld$ sudo port outdated
The following installed ports are outdated:
wget                           1.11.4_3 < 1.12_0

Обновление конкретного порта

sudo port upgrade wget

Эта команда не удаляет старый порт из списка, в итоге получается такое:

ole-mac:~ ctrld$ port installed | grep wget
wget @1.11.4_3
wget @1.12_0 (active)

Для удаления старой версии нужно использовать ключ “-u” (спасибо за подсказку @akaDimiG):

sudo port -u upgrade wget

Обновление всех портов

sudo port upgrade outdated

Моё окружение

Я периодически использую скомпилированные программы, но сейчас но ноутбуке стоят только самые необходимые порты. К ним относятся:

  • corkscrew. SSH-прокси. Полезная вещь для выхода по ssh через https-proxy (спасибо за подсказку @andy_shev). Я отдельно расскажу об этой системе.
  • expect. Язык для диалога с интерактивными сервисами, например можно в скрипте ответить на запросы входа по telnet.
  • mc. Midnight Commander. Кто ещё помнит "Norton Commander" или "Volkov Commander" поймут. Это файловая оболочка под консоль.
  • mtr. Matt's traceroute - незаменимая утилита для поиска сетевых проблем.
  • subversion. Система контроля версий SVN.
  • wget. Программа для списывания контента с web/ftp-серверов.
    Эти программы поставились вместе с git-core (системой контроля версий), хоть есть и штатные утилиты:
  • curl. Программа для списывания файлов по сети, поддерживается много протоколов.
  • rsync. Система для синхронизации файлов и каталогов.