5.6. Использование Коллекции Портов
Пред. | Глава 5. Установка приложений: порты и пакеты | След.

## 5.6. Использование Коллекции Портов

В этом разделе даны базовые сведения по использованию Коллекции Портов для установки или удаления программ. Детальное описание существующих целей `make` и переменных окружения находится в ports(7).

### Предупреждение:

В июле 2012 года проект Портов FreeBSD сменил систему контроля версий: на смену CVS пришел Subversion. Рекомендуемым способом работы с деревом портов является Portsnap. Пользователи, которым требуется локальная подгонка портов (то есть, поддержание дополнительных локальных патчей), возможно предпочтут непосредственное использование Subversion. 28 февраля 2013 года сервис CVSup был выведен из эксплуатации, и дальнейшее использование последнего не рекомендуется.

### 5.6.1. Получение Коллекции Портов

Коллекция Портов — это набор файлов, состоящий из `Makefile`, патчей и файлов описаний, хранимых в `/usr/ports`. Этот набор файлов предназначен для построения и установки приложений во FreeBSD. В нижеследующих разделах описано несколько способов получения Коллекции Портов на тот случай, если Коллекция не была установлена во время инсталляции FreeBSD.

Процедура 5.1. Метод Portsnap

Portsnap это быстрый и удобный инструмент для получения Коллекции Портов, и в то же время — предпочитаемый выбор большинства пользователей. За подробным описанием всех возможностей Portsnap обратитесь к Using Portsnap.

1. Скачайте сжатый снэпшот Коллекции Портов в `/var/db/portsnap`.

   `#` `portsnap fetch`

2. Если вы запускаете Portsnap впервые, извлеките снэпшот в `/usr/ports`:

   `#` `portsnap extract`

3. По завершении первого запуска Portsnap, как было показано выше, `/usr/ports` может быть обновлен при помощи:

   `#` `portsnap fetch` `#` `portsnap update`

Процедура 5.2. Метод Subversion

Если необходим контроль за деревом портов (например, для поддержания локальных изменений), то для получения Коллекции Портов может быть задействован Subversion. Обратитесь к Subversion Primer за детальным описанием Subversion.

1. Для создания рабочей копии дерева портов необходимо иметь установленный Subversion. Если порты есть в наличии, то установите Subversion выполнив следующее:

   `#` `cd /usr/ports/devel/subversion` `#` `make install clean`

   Если портов нет, то Subversion может быть установлен при помощи системы пакетов:

   `#` `pkg_add -r subversion`

   Если же для управления пакетами используется pkgng, то Subversion устанавливается при помощи следующей команды:

   `#` `pkg install subversion`

2. Создайте рабочую копию дерева портов. Для ускорения процесса вместо `svn0.us-east.FreeBSD.org` укажите ближайшее к вам зеркало Subversion. Коммиттерам необходимо сначала прочитать Subversion Primer, чтобы удостовериться, что выбран корректный протокол.

   `#` `svn checkout https://`svn0.us-east.FreeBSD.org`/ports/head /usr/ports`

3. При наличии рабочей копии `/usr/ports` все последующие обновления выполняются просто:

   `#` `svn update /usr/ports`

Процедура 5.3. Метод с использованием Sysinstall

Этот метод подразумевает использование sysinstall для установки Коллекции Портов из установочного носителя. Учтите, что в итоге будет установлена старая копия Коллекции Портов, которая была актуальна на момент создания релиза. Если у вас есть подключение к Интернет, то вам необходимо пользоваться одним из вышеупомянутых методов.

1. Работая как пользователь `root`, запустите `sysinstall` так, как это показано ниже:

   `#` `sysinstall`

2. Опуститесь вниз и выберите Configure, нажмите Enter

3. Опуститесь вниз и выберите Distributions, затем нажмите Enter

4. Опуститесь вниз к пункту ports, нажмите клавишу Пробел

5. Поднимитесь вверх к Exit, нажмите Enter

6. Выберите желаемый носитель для установки, например, CDROM, FTP и так далее.

7. Перейдите на пункт меню Exit и нажмите Enter.

8. Нажмите X для выхода из sysinstall.

### 5.6.2. Миграция с CVSup/csup на portsnap

### Предупреждение:

Начиная с 28 февраля 2013 года дерево портов более не экспортируется в CVS, поэтому CVSup и csup не будут доставлять обновления для дерева портов.

Процедура 5.4. Миграция на Portsnap

Для миграции потребуется около 1 ГБ дискового пространства в `/usr`, в добавок, для Portsnap необходимо около 150 МБ дискового пространства в `/var`.

1. Если у вас настроено автоматическое обновление портов, например при помощи задания cron(8), запускающего CVSup или csup, то его необходимо будет отключить.

2. Переместите существующее дерево портов во временный каталог:

   `#` `mv /usr/ports /usr/ports.old`

3. При помощи Portsnap скачайте новое дерево портов и извлеките его в `/usr/ports`:

   `#` `portsnap fetch extract`

4. Переместите дистрибутивные файлы (distfiles) и сохраненные пакеты в новое дерево портов:

   `#` `mv /usr/ports.old/distfiles /usr/ports` `#` `mv /usr/ports.old/packages /usr/ports`

5. Удалите старое дерево портов:

   `#` `rm -rf /usr/ports.old`

6. Если ранее использовался CVSup, то сейчас его можно удалить:

   `#` `pkg_delete -r -v cvsup-without-gui-\*`

   Пользователям pkgng необходимо запустить следующую команду:

   `#` `pkg delete cvsup-without-gui`

За дальнейшим описанием утилиты Portsnap и деталей работы с ней обратитесь к Using Portsnap.

### 5.6.3. Установка портов

Скелетом порта является набор файлов, который указывает вашей системе 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`. Если для порта существуют опции компиляции, то перед началом построения будет отображено меню.

#### 5.6.3.1. Переназначение рабочего и целевого каталогов

При помощи переменных `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`

использует обе возможности.

Альтернативным способом является задание этих каталогов в переменных окружения. Обратитесь к страницам справки по вашему командному процессору для получения инструкций о том, как установить переменные окружения.

#### 5.6.3.2. Повторная настройка опций портов

Некоторые порты предоставляют ncurses-меню, содержащее опции построения. Будучи однажды успешно определены, опции сохраняются, и при повторном построении порта меню не вызывается. Для изменения сохраненных опций существует несколько способов повторного вызова меню. Один из них — зайти в каталог порта и набрать `make `config``. Второй способ — запустить команду `make `showconfig``. Еще один способ — выполнить команду `make `rmconfig``, которая удалит все ранее отмеченные опции и позволит вам начать конфигурирование сначала. Эти и другие способы детально описаны на странице ports(7).

### 5.6.4. Удаление установленных портов

Установленные порты и пакеты удаляются при помощи команды pkg_delete(1):

`#` `pkg_delete lsof-4.57`

### 5.6.5. Обновление портов

Прежде всего, при помощи pkg_version(1) просмотрите, нет ли в Коллекции Портов более новых версий установленных приложений:

`#` `pkg_version -v`

#### 5.6.5.1. Прочитайте `/usr/ports/UPDATING`

После обновления Коллекции Портов, и перед тем, как обновить приложение из порта, сверьтесь с файлом `/usr/ports/UPDATING`. В нем дана информация по различным вопросам и дополнительным шагам, которые могут быть необходимы для обновления порта, включая информацию о таких вещах как изменения форматов файлов, изменения в расположении конфигурационных файлов, или другие нестыковки с предыдущими версиями.

Если `UPDATING` противоречит чему-либо, написанному в этом документе, то доверьтесь информации из `UPDATING`.

#### 5.6.5.2. Обновление Портов при помощи Portupgrade

Утилита 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).

#### 5.6.5.3. Обновление портов при помощи portmaster

Утилита `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).

### 5.6.6. Порты и дисковое пространство

Работа с Коллекцией Портов со временем приводит к увеличению занимаемого дискового пространства. После построения и установки программы из порта удалите временный каталог `work` при помощи команды `make `clean``. Для очистки всей Коллекции Портов наберите:

`#` `portsclean -C`

По прошествии некоторого времени у вас соберется множество дистрибутивных файлов в каталоге `distfiles`. Следующая команда удалит все дистрибутивные файлы, которые более не связаны ни с какими портами:

`#` `portsclean -D`

Для удаления всех дистрибутивных файлов, не связанных ни с одним установленным в вашу систему портом, наберите:

`#` `portsclean -DD`

### Примечание:

Утилита `portsclean` является частью порта `ports-mgmt/portupgrade`.

Удобная утилита для автоматизации удаления портов, в которых вы более не нуждаетесь, доступна из порта `ports-mgmt/pkg_cutleaves`.

Пред. | Наверх | След.
5.5. Использование pkgng для управления бинарными пакетами | Начало | 5.7. Действия после установки

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.