Руководство FreeBSD
Пред. | Глава 4. Установка приложений: порты и пакеты | След.

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

В этих разделах описаны основные приемы использования Коллекции Портов для установки и удаления программ из вашей системы.

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

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

При установке системы FreeBSD утилита sysinstall запрашивает, требуется ли вам установка Коллекции Портов. Если вы ответили отрицательно, для установки Коллекции Портов следуйте нижеприведенной инструкции:

Метод с использованием Sysinstall

В этом методе повторно используется sysinstall (`/stand/sysinstall` в FreeBSD версий ниже, чем 5.2) для ручной установки Коллекции Портов.

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

       # sysinstall

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

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

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

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

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

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

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

Альтернативный метод получения и постоянной актуализации Коллекции Портов заключается в использовании CVSup. Посмотрите файл CVSup для портов, `/usr/share/examples/cvsup/ports-supfile`. Прочтите раздел Использование CVSup (Разд. A.5) для получения более полной информации об использовании CVSup и этого файла.

Метод с использованием CVSup

Это быстрый способ для получения Коллекции Портов при помощи CVSup. Если вы хотите поддерживать ваше дерево портов в актуальном состоянии, или узнать больше о CVSup, то прочтите вышеотмеченные разделы.

1. Установите порт `net/cvsup`. Обратитесь к разделу Установка CVSup (Разд. A.5.2) для получения более подробной информации.

2. Работая как пользователь `root`, скопируйте `/usr/share/examples/cvsup/ports-supfile` в новое место, например, в каталог `/root` или в ваш домашний каталог.

3. Отредактируйте `ports-supfile`.

4. Измените `CHANGE_THIS.FreeBSD.org` на близкий к вам сервер CVSup. Посмотрите Зеркала CVSup (Разд. A.5.7) для получения полного списка зеркалирующих сайтов.

5. Запустите `cvsup`

       # cvsup -g -L 2 /root/ports-supfile

6. При повторных запусках этой команды все последние изменения (кроме реального перестроения портов для вашей системы) будут загружаться и переноситься в вашу Коллекцию Портов.

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

Когда речь заходит о Коллекции Портов, то первым делом вы должны понять, что именно подразумевается под словом ''скелет''. По сути скелетом порта является минимальный набор файлов, который указывает вашей системе FreeBSD, как корректно откомпилировать и установить программу. Скелет каждого порта включает:

- `Makefile`. `Makefile` содержит различные директивы, которые определяют, как приложение должно быть откомпилировано и куда в вашей системе оно должно быть установлено.

- Файл `distinfo`. Этот файл содержит информацию о файлах, которые должны существовать на вашей системе для успешной сборки порта, и их контрольные суммы, для проверки при помощи md5(1) того, что файлы в процессе загрузки не были повреждены.

- Каталог `files`. Этот каталог содержит патчи, использование которых необходимо для компиляции и установки программы в вашей системе FreeBSD. Патчи - это, как правило, маленькие файлы, в которых содержатся изменения, которые нужно внести в какой-то конкретный файл. Они имеют обычный текстовый формат и в основном содержат указания типа ''Удалить строку 10'' или ''Заменить строку 26 на такую ...''. Патчи также называются ''diff-файлами'' или просто ''диффами'', потому что они генерируются программой diff(1).

  Этот каталог также может содержать другие файлы, используемые для построения порта.

- `pkg-descr`. Это более подробное, зачастую многострочное описание программы.

- `pkg-plist`. Это список всех файлов, которые будут установлены портом. В нем также содержатся указания системе портов на удаление определенных файлов во время удаления порта.

В некоторых портах присутствуют и другие файлы, такие, как `pkg-message`. Система портов использует эти файлы для обработки особых ситуаций. Если вы хотите узнать более подробно об этих файлах и о портах вообще, то обратитесь к Руководству по созданию портов для FreeBSD.

В порт включаются инструкции относительно того, как выполнять построение из исходного кода, но не сам код. Вы можете получить исходный код с CD-ROM или из Интернет. Исходный код распространяется в том виде, какой предпочёл выбрать разработчик. Зачастую это tar-файл, обработанный утилитой gzip, но он может также быть упакован каким-то другим инструментом или быть не сжатым. Исходный код программы, в каком бы то виде он ни был, называется ''дистрибутивным'' (distfile). Два метода установки портов FreeBSD описаны ниже.

> Замечание: Для установки портов вы должны войти в систему как пользователь `root`.

> Внимание: Перед установкой любого порта необходимо убедиться в наличии свежей Коллекции Портов и заглянуть на http://vuxml.freebsd.org/, где могут освещаться вопросы безопасности, связанные с этим портом.

> Проверка на наличие уязвимостей может быть автоматически выполнена portaudit перед установкой нового приложения. Эту программу можно найти в Коллекции Портов (`security/portaudit`). Запустите `portaudit -F` перед установкой нового порта для загрузки свежей базы данных уязвимостей. Проверка безопасности и обновление базы данных должны выполняться при повседневной проверке безопасности системы. За дальнейшей информацией обращайтесь к страницам справочника portaudit(1) и periodic(8).

### 4.5.2.1. Установка портов с CD-ROM

Официальные образы CD-ROM Проекта FreeBSD больше не содержат дистрибутивные файлы. На них есть достаточно места, которое лучше использовать для предкомпилированных пакетов. Продукты на CD-ROM, такие, как FreeBSD PowerPak, включают дистрибутивные файлы, и вы можете заказать их от таких поставщиков, как FreeBSD Mall. В этом разделе предполагается, что у вас есть такой набор CD-ROM с FreeBSD.

Вставьте ваш CD-ROM с FreeBSD в привод. Смонтируйте его в каталог `/cdrom`. (Если вы используете другую точку монтирования, то задайте make-переменную `CD_MOUNTPTS`.) Чтобы начать установку, перейдите в каталог с нужным вам портом:

    # cd /usr/ports/sysutils/lsof

Оказавшись в каталоге `lsof`, вы увидите структуру порта. Следующим шагом является компиляция, или построение (''build'') порта. Это выполняется простой выдачей команды `make` в ответ на приглашение командного процессора. Как только вы это сделаете, то увидите вывод команды, выглядящий примерно так:

    # make
    >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
    >> Attempting to fetch from file:/cdrom/ports/distfiles/.
    ===>  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 install` вместо `make` и последующей `make install` в двух отдельных шагах.

> Замечание: Некоторые командные процессоры для ускорения поиска выполнимых файлов и команд кэшируют имена программ, доступных для вызова из каталогов, перечисленных в переменной окружения `PATH`. Если вы используете один из таких командных процессоров, то перед использованием только что добавленных программ вам может понадобиться вызвать команду `rehash` после установки порта. Эта команда будет работать с такими оболочками, как, например, `tcsh`. При работе с такими командными процессорами, как `sh` или `shells/bash`, воспользуйтесь командой `hash -r`. Дополнительную информацию можно найти в документации к вашему командному процессору.

> Замечание: Пожалуйста, будьте готовы к тому, что лицензии некоторых портов не позволяют помещать их на CD-ROM. Это может делаться из-за обязательности заполнения регистрационной формы перед загрузкой, или запрета на дальнейшее распространение, либо по какой-то другой причине. Если вы хотите установить порт, которого нет на CD-ROM, вам нужно иметь подключение к Интернет; чтобы это сделать (обратитесь к следующему разделу).

### 4.5.2.2. Установка портов из Интернет

Как и в предыдущем разделе, здесь предполагается, что у вас имеется работающее подключение к Интернет. Если это не ваш случай, выполняйте установку с CD-ROM, либо поместите копию дистрибутивного файла в каталог `/usr/ports/distfiles` вручную.

Установка порта из Интернет производится точно так же, как если бы вы делали её с CD-ROM. Единственным отличием между ними является тот факт, что дистрибутивный файл загружается из Интернет, а не считывается с CD-ROM.

Выполняются те же самые шаги:

    # make install
    >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
    >> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
    Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
    439860 bytes transferred in 18.0 seconds (23.90 kBps)
    ===>  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
    ...
    [вывод команды компиляции опущен]
    ...
    ===>  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.
    #

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

Для загрузки файлов система портов использует утилиту fetch(1), которая принимает во внимание различные переменные окружения, включая `FTP_PASSIVE_MODE`, `FTP_PROXY` и `FTP_PASSWORD`. Если вы находитесь за сетевым экраном или для работы с FTP/HTTP вам необходимо использовать прокси, то определите соответствующие переменные. Обратитесь к справочной странице по fetch(3) для получения полного списка переменных.

Пользователям, которые не могут быть постоянно подключены к сети, поможет команда `make `fetch``. Просто запустите эту команду в каталоге самого верхнего уровня (`/usr/ports`), и требуемые файлы будут загружены. Эта команда будет работать также и с вложенными категориями, например: `/usr/ports/net`. Заметьте, что если порт имеет зависимости от библиотек или других портов, то он не будет также загружать дистрибутивные файлы этих портов. Замените `fetch` на `fetch-recursive`, если вы хотите выполнить загрузку также и всех этих зависимостей порта.

> Замечание: Вы можете построить все порты в категории за раз, запустив команду `make` в каталоге верхнего уровня, как и в вышеописанном методе с `make `fetch``. Однако это опасно, так как некоторые порты не могут сосуществовать. В других случаях некоторые порты могут устанавливать два различных файла с одним и тем же именем.

В некоторых редких случая пользователям необходимо получить 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/mozilla`, `security/gpgme` и `mail/sylpheed-claws`. При наличии подобных параметров будет выдано сообщение.

### 4.5.2.3. Переназначение каталогов с портами по умолчанию

Иногда бывает полезным (или необходимым) использование других каталогов с портами и дистрибутивными файлами. Для переопределения каталогов, используемых по умолчанию, используются переменные `PORTSDIR` и `PREFIX`. К примеру:

    # make PORTSDIR=/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 PORTSDIR=../ports PREFIX=../local install

использует обе возможности (полная команда слишком длинна для написания на этой странице, однако вы должны уловить общую идею).

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

### 4.5.2.4. Работа с `imake`

Некоторые порты, использующие `imake` (часть X Window System) не работают нормально с `PREFIX`, и будут пытаться установиться в дерево `/usr/X11R6`. Аналогично некоторые Perl-порты игнорируют значения `PREFIX` и устанавливаются в дерево Perl. Заставить такие порты воспринимать переменную `PREFIX` является сложной или невыполнимой задачей.

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

Теперь, когда вы знаете, как устанавливать порты, вы наверное, уже задумывались о том, как же их удалять -- просто даже на тот случай, если вы установили один из них, а позже решили, что установили не тот порт. Мы удалим порт из нашего предыдущего примера (а это была программа `lsof`, если вы обратили внимание). Как и при установке портов, первым делом вы должны перейти в каталог с портом, `/usr/ports/sysutils/lsof`. После смены каталога вы готовы к удалению `lsof`. Это делается командой `make deinstall`:

    # cd /usr/ports/sysutils/lsof
    # make deinstall
    ===>  Deinstalling for lsof-4.57

Это было достаточно легко. Вы удалили `lsof` из вашей системы. Если вам захочется переустановить эту программу, то это можно будет сделать, выдав команду `make reinstall` из каталога `/usr/ports/sysutils/lsof`.

Последовательность команд `make deinstall` и `make reinstall` не сработает, если вы запустите команду `make clean`. Если вы хотите убрать порт из системы после очистки каталога, используйте команду pkg_delete(1), как это описано в разделе о пакетах Руководства.

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

Использование Коллекции Портов со временем требует всё большего дискового пространства. Из-за тенденции к постоянному росту дерева портов, после построения и установки программного обеспечения из портов вы не должны забывать об очистке каталогов `work` командой `make `clean``. При этом будет удаляться каталог `work`, возникающий после построения и установки порта. Вы можете также удалить исходные файлы программы из каталога `distfiles`, а позже удалить установленные порты, если они более не используются.

Некоторые пользователи ограничивают набор доступных категорий портов, помещая в файл `refuse` соответствующую запись. В этом случае, при запуске программы CVSup она не будет загружать файлы из указанных категорий. Дополнительную информацию, относящуюся к файлу `refuse`, можно найти в Разд. A.5.3.1.

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

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

Поддержание ваших портов в актуальном состоянии может оказаться нудным занятием. К примеру, чтобы обновить порт, вам нужно перейти в каталог с портами, построить порт, удалить старый порт, установить новый, а затем вычистить его после построения. Представьте, сколько действий (пять) нужно сделать! Скучно, да? Это было большой проблемой для системных администраторов, но теперь есть утилиты, выполняющие эти действия за нас. Например, утилита `sysutils/portupgrade` сделает всё за вас сама! Просто установите её, как обычный порт, при помощи команды `make `install clean``.

Теперь создайте базу данных командой `pkgdb -F`. Она выяснит перечень установленных портов и создаст файл базы данных в каталоге `/var/db/pkg`. Теперь при вызове команды `portupgrade -a`, она будет использовать эту базу данных и файл портов `INDEX`. Наконец, portupgrade загрузит, построит, сделает резервную копию, установит и очистит порты, которые были обновлены. portupgrade имеет массу параметров для использования в разных ситуациях, из которых наибольшего внимания заслуживают описываемые далее.

Если вы хотите обновить только определённое приложение, но не полностью базу данных, используйте `portupgrade `pkgname``, с флагом `-r`, если portupgrade должен отработать все пакеты, которые зависят от указанного, и использовать флаг `-R` для отработки всех пакетов, которые требуют указанные пакеты.

Для использования при установке пакетов, а не портов, укажите флаг `-P`. С этим параметром portupgrade будет искать пакеты в локальных каталогах, указанных в переменной окружения `PKG_PATH`, или, если не найдет их, загрузит с удаленного сайта. Если пакеты не могут быть найдены локально или загружены удаленно, portupgrade использует порты. Чтобы запретить использование портов, укажите `-PP`.

Для простой загрузки дистрибутивных файлов без построения или установки чего бы то ни было, задайте флаг `-F`. Дополнительную информацию можно получить на странице справки по утилите portupgrade(1).

> Замечание: Важно регулярно обновлять базу данных пакетов при помощи команды `pkgdb -F` для восстановления целостности, особенно когда portupgrade запрашивает вас это сделать. Не прерывайте работы portupgrade при обновлении базы данных пакетов, это может привести к рассогласованию данных.

Существуют и другие утилиты, которые делают подобные вещи, посмотрите в каталоге `ports/sysutils` и выберите то, что вам подходит.

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

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

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