FreeBSD: пакеты и порты

ПО для FreeBSD поставляется в двух видах "дистрибутивов" - пакет и порт. Оба этих понятия появились, чтобы облегчить и автоматизировать процесс установки программы в системе.

Пакет - это вроде как уже откомпилированный бинарник. Из себя представляет единственный Файл, оканчивающийся на .tbz. Например, пакет, который я скачал с freebsd.org (и который у меня не установился из-за отсутствия некоторых библиотек в системе, но это уже другой вопрос), назывался mc-4.6.0_15.tbz. В FreeBSD Handbook почему-то окончания были другие - .tgz, и меня это поначалу слегка смутило.

Порт - это "суповой наборчик" исходников и конфигурационных скриптов, предназначенный для полностью автоматической компиляции и установки на целевой машине. Из себя представляет папку с конфигурационными файлами Makefile, distinfo, pkg-descr, pkg-plist, /files (если вы при установке установили порты, то это хозяйство находится у вас на машине. Например, в случае Midnight Commander все находилось в папке /usr/ports/misc/mc), а также файл архива (для Midnight Commander он назывался mc-4.6.0.tar.gz), который вам следует перед запуском make положить в папку /usr/ports/distfiles. Процедура установки порта по времени на порядки дольше, чем установка пакета, поскольку вовлекает процесс компиляции.

Процедура установки пакета подробно описана в FreeBSD Handbook. Все манипуляции с пакетами производятся командами:
pkg_add файл_пакета //устанавливает приложение
pkg_delete имя_приложения //удаляет приложение
pkg_info //показывает список установленных приложений

Для установки пакета нужно:
- положить предварительно закачанный файлик архива с пакетом (у меня это был mc-4.6.0.tar.gz) в папку /usr/ports/distfiles.
- перейти в папку с пакетом на локальном компьютере - у меня это была папка /usr/ports/misc/mc - с помощью команды cd /usr/ports/misc/mc (проверить текущий каталог можно командой pwd).
- выполнить команду make. На этом этапе производится поиск архива с пакетом и его проверка, и если что-нибудь с ним не в порядке (отсутствует, не совпадает конторольная сумма), то
производится попытка автоматически его получить с внешних ftp. Если все в порядке, то происходит процесс распаковки и компиляции (с кучей выводимых на экран сообщений).
- выполнить make install. Опять вывод кучи сообщений, и после этого установленную программу можно запускать из любой папки (в моем случае достаточно просто ввести mc[Enter]).
- выполнить make clean (удаление временных файлов?).
Насколько я понял, и make, и make install использует файл Makefile, находящийся в текущем каталоге. Чтобы удалить программу, установленную таким образом, нужно выполнить make deinstall (или make uninstall). Чтобы переустановить программу - make reinstall. Последовательность команд make deinstall и make reinstall не сработает, если вы запустите команду make clean. Если вы хотите убрать порт из системы после очистки каталога, используйте команду pkg_delete(1), как это описано в разделе о пакетах FreeBSD Handbook.

После установки порта команда pkg_info все равно выведет информацию об установленном приложении.

Порты и пакеты тесно взаимосвязаны. Воспользуйтесь командой pkg_info(1) для определения того, куда и какие файлы были установлены. К примеру, если вы только что установили Midnight Commander версии 4.6.0.13, то по команде
# pkg_info -L mc-4.6.0_13 | less
будет выведен список всех файлов, установленных пакетом. Обратите особое внимание на файлы в каталогах man/, которые являются справочными страницами, etc/, которые являются конфигурационными файлами, и doc/, которые являются более подробной документацией. Если вы не уверены, какая версия приложения была только что установлена, то по команде вида
# pkg_info | grep -i mc-4.6.0_13
будет выведен список всех установленных пакетов, в названии которых присутствует mc-4.6.0_13.

Порты и программы удобно искать командой whereis имя_приложения. Например, я нашел порты Midnight Commander командой:
# whereis mc

Обновлено: 12.03.2015