В этом разделе даны базовые сведения по использованию Коллекции
Портов для установки или удаления программ. Детальное описание
существующих целей make
и переменных окружения
находится в ports(7).
В июле 2012 года проект Портов FreeBSD сменил систему контроля версий: на смену CVS пришел Subversion. Рекомендуемым способом работы с деревом портов является Portsnap. Пользователи, которым требуется локальная подгонка портов (то есть, поддержание дополнительных локальных патчей), возможно предпочтут непосредственное использование Subversion. 28 февраля 2013 года сервис CVSup был выведен из эксплуатации, и дальнейшее использование последнего не рекомендуется.
Коллекция Портов - это набор файлов, состоящий из
Makefile
, патчей и файлов описаний, хранимых в
/usr/ports
. Этот набор файлов предназначен для
построения и установки приложений во FreeBSD. В нижеследующих разделах
описано несколько способов получения Коллекции Портов на тот случай,
если Коллекция не была установлена во время инсталляции FreeBSD.
Portsnap это быстрый и удобный инструмент для получения Коллекции Портов, и в то же время - предпочитаемый выбор большинства пользователей.
Скачайте сжатый снэпшот Коллекции Портов в
/var/db/portsnap
.
#
portsnap fetch
Если вы запускаете Portsnap
впервые, извлеките снэпшот в
/usr/ports
:
#
portsnap extract
По завершении первого запуска
Portsnap, как было показано выше,
/usr/ports
может быть
обновлен при помощи:
#
portsnap fetch
#
portsnap update
Если необходим контроль за деревом портов (например, для поддержания локальных изменений), то для получения Коллекции Портов может быть задействован Subversion. Обратитесь к Subversion Primer за детальным описанием Subversion.
Для создания рабочей копии дерева портов необходимо иметь установленный Subversion. Если порты есть в наличии, то установите Subversion выполнив следующее:
#
cd /usr/ports/devel/subversion
#
make install clean
Если портов нет, то Subversion может быть установлен при помощи системы пакетов:
#
pkg_add -r subversion
Если же для управления пакетами используется pkgng, то Subversion устанавливается при помощи следующей команды:
#
pkg install subversion
Создайте рабочую копию дерева портов. Для ускорения
процесса вместо svn0.us-east.FreeBSD.org
укажите ближайшее к вам
зеркало
Subversion. Коммиттерам необходимо сначала прочитать
Subversion Primer,
чтобы удостовериться, что выбран корректный протокол.
#
svn checkout https://
svn0.us-east.FreeBSD.org
/ports/head /usr/ports
При наличии рабочей копии
/usr/ports
все последующие обновления выполняются просто:
#
svn update /usr/ports
Этот метод подразумевает использование sysinstall для установки Коллекции Портов из установочного носителя. Учтите, что в итоге будет установлена старая копия Коллекции Портов, которая была актуальна на момент создания релиза. Если у вас есть подключение к Интернет, то вам необходимо пользоваться одним из вышеупомянутых методов.
Работая как пользователь root
, запустите
sysinstall
так, как это показано
ниже:
#
sysinstall
Опуститесь вниз и выберите Enter
, нажмитеОпуститесь вниз и выберите Enter
, затем нажмитеОпуститесь вниз к пункту Пробел
, нажмите клавишуПоднимитесь вверх к Enter
, нажмитеВыберите желаемый носитель для установки, например, CDROM, FTP и так далее.
Перейдите на пункт меню Enter.
и нажмитеНажмите X для выхода из sysinstall.
Начиная с 28 февраля 2013 года дерево портов более не экспортируется в CVS, поэтому CVSup и csup не будут доставлять обновления для дерева портов.
Для миграции потребуется около 1 ГБ дискового пространства
в /usr
, в добавок, для
Portsnap необходимо около 150 МБ
дискового пространства в
/var
.
Если у вас настроено автоматическое обновление портов, например при помощи задания cron(8), запускающего CVSup или csup, то его необходимо будет отключить.
Переместите существующее дерево портов во временный каталог:
#
mv /usr/ports /usr/ports.old
При помощи Portsnap скачайте
новое дерево портов и извлеките его в
/usr/ports
:
#
portsnap fetch extract
Переместите дистрибутивные файлы (distfiles) и сохраненные пакеты в новое дерево портов:
#
mv /usr/ports.old/distfiles /usr/ports
#
mv /usr/ports.old/packages /usr/ports
Удалите старое дерево портов:
#
rm -rf /usr/ports.old
Если ранее использовался CVSup, то сейчас его можно удалить:
#
pkg_delete -r -v cvsup-without-gui-\*
Пользователям pkgng необходимо запустить следующую команду:
#
pkg delete cvsup-without-gui
Скелетом порта является набор файлов, который указывает вашей системе FreeBSD, как откомпилировать и установить программу. Скелет каждого порта включает:
Makefile
: этот файл содержит различные
директивы, которые определяют, как приложение должно быть
откомпилировано и куда в вашей системе оно должно быть
установлено.
distinfo
: этот файл содержит информацию
о файлах, которые должны быть загружены для сборки порта, а также
их контрольные суммы (sha256(1)) для проверки того, что файлы
не были повреждены в процессе загрузки.
files
: этот каталог содержит патчи,
необходимые для компиляции и установки программы в вашей системе
FreeBSD. Этот каталог также может содержать другие файлы,
используемые для построения порта.
pkg-descr
: этот файл содержит более
подробное описание программы.
pkg-plist
: это список всех файлов,
которые будут установлены портом. В нем также содержатся
указания системе портов на удаление определенных файлов во
время удаления порта.
В некоторых портах присутствуют и другие файлы, такие, как
pkg-message
. Система портов использует эти файлы
для обработки особых ситуаций. Если вы хотите узнать более подробно
об этих файлах и о портах вообще, то обратитесь к Руководству по созданию
портов для FreeBSD.
Порт не содержит собственно исходного кода, также известного как <<дистрибутивный файл>> (distfile). Способ распространения исходного кода определяется предпочтениями автора программы. Ниже описаны два способа установки порта FreeBSD.
Для установки портов вы должны войти в систему как пользователь
root
.
Перед установкой любого порта необходимо убедиться в
наличии свежей Коллекции Портов и заглянуть на http://vuxml.freebsd.org/
, где могут освещаться
вопросы безопасности, связанные с конкретным портом. Если у вас
установлен ports-mgmt/portaudit,
то перед установкой нового порта запустите
portaudit -F
для загрузки свежей базы данных
уязвимостей. Проверка безопасности и обновление базы данных будут
выполняться при ежедневной проверке безопасности системы.
За дальнейшей информацией обратитесь к страницам справочника
portaudit(1) и periodic(8).
Использование Коллекции Портов предполагает наличие работающего
подключения к Интернет. В противном случае вам придется раздобыть
и поместить копию дистрибутивного файла в каталог
/usr/ports/distfiles
вручную.
Первым делом переместитесь в каталог устанавливаемого порта:
#
cd /usr/ports/sysutils/lsof
Для компиляции (или построения - <<build>>)
порта наберите команду make
. Вы должны увидеть
вывод команды, подобный следующему:
#
make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.57 ... [вывод команды при распаковке опущен] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [вывод команды при конфигурации опущен] ... ===> Building for lsof-4.57 ... [вывод команды при компиляции опущен] ...#
По завершении компиляции вы снова вернетесь к приглашению
командного процессора. Следующим шагом является установка порта
при помощи
make install
:
#
make install
===> Installing for lsof-4.57 ... [вывод команды при установке опущен] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.57 ===> Registering installation for lsof-4.57 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges.#
На этом этапе, получив приглашение оболочки, вы уже можете
запустить установленное приложение. Так как
lsof
является программой, которая запускается с
повышенными правами, выдаётся предупреждение о безопасности. Во
время построения и установки портов следует обращать внимание на любые
возникающие предупреждения.
Хорошей идеей является удаление рабочего подкаталога, содержащего временные файлы, использовавшиеся во время компиляции. Такое действие помогает беречь дисковое пространство и минимизирует вероятность возникновения проблем в дальнейшем, при обновлении до более новой версии порта.
#
make clean
===> Cleaning for lsof-4.57#
Вы можете сэкономить два лишних шага, просто выдав команду
make install clean
вместо make
,
make install
и
последующей make clean
в трех отдельных шагах.
Установка порта единственной командой
make install
чревата
возможными частыми остановками процесса инсталляции из-за
ожидания вмешательства пользователя: некоторым портам требуется
ввод опций. Чтобы избежать траты времени, особенно для портов
с многими зависимостями, запустите сначала
make config-recursive
чтобы выполнить конфигурирование всех опций за один заход.
Далее, запустите make
install [clean]
.
Когда используется config-recursive
,
перечень подлежащих настройке портов собирается целью
all-depends-list
команды make(1).
Часто рекомендуется повторять запуск
make config-recursive
до тех пор, пока не будут определены все опции зависимых портов,
а меню dialog(1) выбора опций портов появляться перестанут.
При этом можно быть уверенным, что все опции были настроены как
и намеревалось.
Некоторые командные процессоры для ускорения поиска исполняемых
файлов и команд кэшируют имена программ, доступных для
вызова из каталогов, перечисленных в переменной окружения
PATH
. Если вы используете tcsh
,
то вам может потребоваться набрать rehash
,
после чего свежеустановленную программу можно будет вызывать
без указания полного пути. Для командного интерпретатора
sh
выполните
hash -r
. Дополнительную информацию можно найти
в документации к вашему командному процессору.
В некоторых имеющихся в продаже комплектах DVD от третьих лиц,
таких как the FreeBSD Toolkit от
FreeBSD Mall,
содержатся дистрибутивные файлы (distfiles). Их можно использовать
с Коллекцией Портов. Смонтируйте DVD в /cdrom
.
Если вы используете иную точку монтирования, укажите её в переменной
make(1) CD_MOUNTPTS
. Если необходимые для
построения порта дистрибутивные файлы находятся на диске, то они будут
задействованы автоматически.
Лицензии некоторых портов не позволяют помещать их на DVD. Причиной тому может служить обязательность заполнения регистрационной формы перед загрузкой, или запрет на дальнейшее распространение. Если вы хотите установить порт, которого нет на DVD, вам нужно иметь подключение к Интернет.
Для загрузки файлов система портов использует утилиту
fetch(1), которая проверяет значения некоторых переменных
окружения, включая FTP_PASSIVE_MODE
,
FTP_PROXY
и FTP_PASSWORD
. Если вы
находитесь за сетевым экраном или для работы с FTP/HTTP вам
необходимо использовать прокси, то определите соответствующие
переменные. Обратитесь к справочной странице по fetch(3) для
получения полного списка переменных.
Пользователям, которые не могут быть постоянно подключены
к сети, поможет команда
make fetch
.
Запустите эту команду в каталоге /usr/ports
,
и требуемые файлы будут загружены. Эта команда также работает и с
вложенными категориями, например: /usr/ports/net
.
Заметьте, что если порт имеет зависимости от библиотек или других
портов, то команда не будет загружать
дистрибутивные файлы для зависимых портов. Для загрузки всех
зависимых дистрибутивных файлов задействуйте команду make
fetch-recursive
.
Вы можете построить все порты в категории за раз, запустив
команду make
в каталоге верхнего уровня.
Однако это опасно, так как некоторые порты не могут сосуществовать.
В других случаях некоторые порты могут устанавливать два различных
файла с одним и тем же именем.
В некоторых редких случаях пользователям необходимо получить
tar-архивы с сайтов, отличающихся от указанных по умолчанию в
MASTER_SITES
. Вы можете переопределить значение
MASTER_SITES
посредством следующей команды:
#
cd /usr/ports/
directory
#
make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
В этом примере значение переменной MASTER_SITES
изменено на ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/
.
Некоторые порты позволяют указывать опции, которые включают или выключают построение отдельных частей приложения, изменяют некоторые параметры безопасности, а также задают прочие настройки. Примерами таких портов могут служить: www/firefox, security/gpgme и mail/sylpheed-claws. Если для порта существуют опции компиляции, то перед началом построения будет отображено меню.
При помощи переменных WRKDIRPREFIX
и
PREFIX
можно переопределить назначаемые по
умолчанию рабочий и целевой каталоги. Например:
#
make WRKDIRPREFIX=/usr/home/example/ports install
будет компилировать порт в каталоге
/usr/home/example/ports
, а установит всё в
/usr/local
.
#
make PREFIX=/usr/home/example/local install
будет компилировать порт в каталоге
/usr/ports
, а установит в
/usr/home/example/local
.
И, конечно же,
#
make WRKDIRPREFIX=../ports PREFIX=../local install
использует обе возможности.
Альтернативным способом является задание этих каталогов в переменных окружения. Обратитесь к страницам справки по вашему командному процессору для получения инструкций о том, как установить переменные окружения.
Некоторые порты предоставляют ncurses-меню, содержащее опции
построения. Будучи однажды успешно определены, опции сохраняются,
и при повторном построении порта меню не вызывается. Для изменения
сохраненных опций существует несколько способов повторного вызова
меню. Один из них - зайти в каталог порта и набрать
make config
.
Второй способ - запустить команду
make showconfig
.
Еще один способ - выполнить команду
make rmconfig
,
которая удалит все ранее отмеченные опции и позволит вам начать
конфигурирование сначала. Эти и другие способы детально описаны
на странице ports(7).
Прежде всего, при помощи pkg_version(1) просмотрите, нет ли в Коллекции Портов более новых версий установленных приложений:
#
pkg_version -v
После обновления Коллекции Портов, и перед тем, как обновить
приложение из порта, сверьтесь с файлом
/usr/ports/UPDATING
. В нем дана информация
по различным вопросам и дополнительным шагам, которые
могут быть необходимы для обновления порта, включая информацию
о таких вещах как изменения форматов файлов, изменения
в расположении конфигурационных файлов, или другие нестыковки
с предыдущими версиями.
Если UPDATING
противоречит чему-либо,
написанному в этом документе, то доверьтесь информации из
UPDATING
.
Утилита portupgrade создана для
простого обновления установленных портов. Она доступна из порта
ports-mgmt/portupgrade.
Установите её как и любой иной порт при помощи команды
make install clean
:
#
cd /usr/ports/ports-mgmt/portupgrade
#
make install clean
Проверьте перечень установленных портов командой
pkgdb -F
и устраните все несоответствия, о которых
сообщит утилита. Хорошей идеей является выполнение этого действия
регулярно, перед каждым обновлением.
Используйте portupgrade -a
для обновления
всех устаревших портов, установленных в вашей системе. Добавьте
флаг -i
если вы желаете получать запрос
на каждый обновляемый порт.
#
portupgrade -ai
Для обновления конкретного приложения, а не всех
установленных портов, запустите portupgrade
. Включите флаг
pkgname
-R
при необходимости обновить все порты, требуемые
данным приложением.
#
portupgrade -R firefox
Для использования при установке пакетов, а не портов, укажите
флаг -P
. С этим параметром
portupgrade будет искать пакеты в
локальных каталогах, указанных в переменной окружения
PKG_PATH
, а если не найдет их, то загрузит с
удаленного сайта. Если пакеты не могут быть найдены локально
или загружены удаленно, portupgrade
использует порты. Чтобы запретить использование портов,
укажите -PP
.
#
portupgrade -PP gnome2
Для простой загрузки дистрибутивных файлов без построения или
установки чего бы то ни было, задайте флаг -F
.
Дополнительную информацию можно получить на странице справки по
утилите portupgrade(1).
Утилита ports-mgmt/portmaster - это еще один
инструмент для обновления установленных портов. Утилита
portmaster опирается на возможности
<<базовой>> системы и не зависит от других портов.
Она использует информацию из /var/db/pkg/
для определения портов,
подлежащих обновлению. Для установки утилиты выполните
следующее:
#
cd /usr/ports/ports-mgmt/portmaster
#
make install clean
Portmaster делит порты на четыре категории:
Корневые порты: не зависят от других портов и нет портов, зависимых от корневых;
Стволовые порты: не зависят от других портов, но есть порты, зависящие от стволовых;
Веточные порты: зависят от других портов и есть порты, зависящие от веточных;
Листьевые порты: зависят от других портов, но нет портов, зависящих от листьевых.
Чтобы проверить наличие обновлений для всех установленных
портов, задайте утилите флаг -L
:
#
portmaster -L
===>>> Root ports (No dependencies, not depended on) ===>>> ispell-3.2.06_18 ===>>> screen-4.0.3 ===>>> New version available: screen-4.0.3_1 ===>>> tcpflow-0.21_1 ===>>> 7 root ports ... ===>>> Branch ports (Have dependencies, are depended on) ===>>> apache-2.2.3 ===>>> New version available: apache-2.2.8 ... ===>>> Leaf ports (Have dependencies, not depended on) ===>>> automake-1.9.6_2 ===>>> bash-3.1.17 ===>>> New version available: bash-3.2.33 ... ===>>> 32 leaf ports ===>>> 137 total installed ports ===>>> 83 have new versions available
Все установленные порты могут быть обновлены при помощи одной команды:
#
portmaster -a
По умолчанию, portmaster создаст
дублирующий пакет перед удалением установленного порта. Если
обновление порта прошло успешно,
portmaster удалит дублирующий пакет.
При помощи опции -b
можно проинструктировать
portmaster не выполнять автоматическое
удаление дублирующего пакета. Указание опции -i
запустит portmaster в интерактивном
режиме, запрашивающим подтверждение пользователя перед
обновлением каждого порта.
Если во время процесса обновления возникнут ошибки,
задействуйте опцию -f
для обновления/перестройки
всех портов:
#
portmaster -af
Также, portmaster может быть задействован для установки новых портов в систему, автоматически обновляя другие зависимые порты перед построением и установкой нового порта:
#
portmaster
shells/bash
За подробной информацией обратитесь к portmaster(8).
Работа с Коллекцией Портов со временем приводит к увеличению
занимаемого дискового пространства. После построения и установки
программы из порта удалите временный каталог work
при помощи команды
make clean
. Для
очистки всей Коллекции Портов наберите:
#
portsclean -C
По прошествии некоторого времени у вас соберется множество
дистрибутивных файлов в каталоге distfiles
. Следующая команда удалит все
дистрибутивные файлы, которые более не связаны ни с какими
портами:
#
portsclean -D
Для удаления всех дистрибутивных файлов, не связанных ни с одним установленным в вашу систему портом, наберите:
#
portsclean -DD
Утилита portsclean
является частью порта
ports-mgmt/portupgrade.
Удобная утилита для автоматизации удаления портов, в которых вы более не нуждаетесь, доступна из порта ports-mgmt/pkg_cutleaves.
Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.
По вопросам, связанным с FreeBSD, прочитайте
документацию прежде чем писать в
<questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку
<doc@FreeBSD.org>.