Применение «портов»


Деинсталляция и повторная установка

Для установки «портов» характерна замечательная особенность: после того, как «порт» установлен, он воспринимается как пакет. Применив pkg_delete(1), его можно деинсталлировать, а с помощью pkg_info(1) — получить информацию о нем. Так как установка «портов» регистрируется в /var/db/pkg, изучив файл contents, можно узнать, какие файлы входят в состав «порта».

Кроме того, «порт» можно деинсталлировать в каталоге «порта». Например, пусть FreeBSD содержит несколько версий одного «порта», скажем, веб-сервера Apache. Может потребоваться оценить различные версии, для чего каждую из них придется сначала установить, а потом удалить. Запуск make deinstall в каталоге «порта» удаляет программу из основной системы.

После деинсталляции «порта» скомпилированная программа и файлы с исходным кодом по-прежнему остаются в рабочем каталоге «порта». Команда make reinstall выполнит повторную установку деинсталлированной программы. Удалять и переустанавливать программу можно столько раз, сколько вам потребуется.

Отслеживание состояния сборки «порта»

Как система «портов» отслеживает то, что уже сделано? Если вы запускаете сначала команду make extract, а затем make install, — как FreeBSD узнает, какие этапы уже пройдены? Для хранения информации о пройденных этапах система «портов» использует скрытые файлы. Увидеть эти файлы можно, запросив «длинный список» файлов в рабочем каталоге порта:

# cd /usr/ports/games/oneko/work
# ls -la

total 502
...
-rw-r--r-- 1 root wheel 0 Apr 22 14:59 .build_done.oneko._usr_X11R6
-rw-r--r-- 1 root wheel 0 Apr 22 14:59
.configure_done.oneko._usr_X11R6
-rw-r--r-- 1 root wheel 0 Apr 22 14:59 .extract_done.oneko._usr_X11R6 -rw-r--r-- 1 root wheel 0 Apr 22 14:59 .install_done.oneko._usr_X11R6 -rw-r--r-- 1 root wheel 0 Apr 22 14:59 .patch_done.oneko._usr_X11R6
...

Файлы, имена которых начинаются с точки, — это скрытые файлы; они не отображаются при обычном выводе списка файлов в каталоге. Система «портов» хранит информацию о пройденных этапах сборки в скрытых файлах. Эти файлы используются при сборке любого «порта». Видите файл .install_done.oneko._usr_X11R6? Это означает, что этап установки завершен.

В моей практике несколько раз бывало, что после многократного выполнения команд make install/deinstall «порт» отказывался устанавливаться повторно. Это происходило из-за скрытого файла, показывающего, что этап установки «порта» завершился. Удалите этот файл, и повторная установка будет выполнена.

Очистка с помощью make clean

«Порты» могут занимать много места. Некоторые программные пакеты, такие как X.org, могут съедать сотни мегабайт дискового пространства, а OpenOffice.org- целых девять гигабайт! В системе «портов» есть метод, позволяющий удалить ненужные файлы.

Установленной и сконфигурированной программе уже не нужен ее исходный код из каталога «порта». Его можно удалить с помощью make clean. Эта операция сотрет рабочий каталог текущего «порта» вместе со всеми его зависимостями, поэтому перед ее выполнением необходимо убедиться, что с установленной программой все в порядке. Очистить новый «порт» можно и автоматически по завершении установки. Для этого установку надо выполнять так: make install clean.

Также можно очистить исходные distfiles «порта», которые хранятся в /usr/ports/distfiles. Команда make distclean удалит ненужные distfiles текущего «порта» вместе со всеми зависимостями.

Для очистки всего дерева «портов» запустите make clean -DNOCLEANDEPENDS прямо в /usr/ports. Этот процесс займет какое-то время. Хотя есть более быстрые и эффективные способы удаления каждого рабочего каталога в дереве «портов», описанный метод напрямую поддерживается Проектом FreeBSD.

Сборка пакетов

С помощью «портов» вы можете собирать собственные пакеты для установки на других машинах FreeBSD, что сэкономит время и обеспечит идентичность программного обеспечения на всех машинах. Например, если требуется, чтобы на всех машинах, где есть ОOо, этот пакет обладал одними и теми же функциональными возможностями, можно собрать ООо один раз и затем установить его на остальных машинах.

Пакет создает команда make package. Она установит программу на локальной машине и создаст пакет в каталоге «порта». Затем надо скопировать этот пакет на другие системы и установить их с помощью pkg_add(1).

Если есть каталог /usr/ports/packages, система «портов» создаст дерево пакетов в этом каталоге. То есть новые пакеты будут размещаться уже не в каталоге «портов», а в соответствующей категории, в каталоге /usr/ports/packages.

Локальное хранилище пакетов

Помните переменную окружения PACKAGESITE? Задайте в ней путь к своему анонимному локальному серверу FTP (глава 17) или к разделяемому ресурсу NFS (глава 8) и разместите на нем свои пакеты. После этого можно выполнять pkg_add -r на других машинах, что позволит им автоматически забирать и устанавливать самодельные пакеты.

Изменение пути установки

Если у вас десятки, а то и сотни систем FreeBSD с идентичной конфигурацией, то для установки «портов» и пакетов может оказаться неудобным используемый по умолчанию путь /usr/local. Если серверов много, каталог /usr/local обычно резервируют для программ, уникальных для отдельной машины, а те программные пакеты, что используются всеми, устанавливают в другом месте, например в /opt или /usr/pkg. Указать требуемый каталог установки можно с помощью переменной окружения PREFIX:

# make PREFIX=/usr/pkg install clean

Устанавливаемые «порты» разместят все свои программы в заданном каталоге. Например, программы, которые обычно устанавливаются в каталог /usr/local/bin, будут размещены в каталоге /usr/pkg/bin.

Установка параметров make по умолчанию

Если вы устали без конца задавать одни и те же параметры при сборке «портов», можете перечислить их в /etc/make.conf, и тогда они будут автоматически применяться при установке каждого «порта». Если какие-то из параметров не используются тем или иным «портом», их задание никак на него не повлияет.

Предположим, если в качестве стандартной базы данных используется MySQL, вы хотите, чтобы любое программное обеспечение, способное поддерживать работу с MySQL, собиралось с такой поддержкой. Для этого нужно определить в файле /etc/make.conf переменную WITH_MYSQL:

WITH_MYSQL=YES

Теперь все устанавливаемые вами «порты», допускающие поддержку MySQL, автоматически будут собираться с такой поддержкой.

Локальное хранилище для файлов distfile

Если у вас несколько машин с «портами», то можно создать локальное хранилище для файлов distfile. Нужные файлы distfile можно загрузить из Интернета только раз, на одной из машин, а все остальные машины смогут получить доступ к этим файлам через локальную сеть, что ускорит сборку и уменьшит объем внешнего трафика. Для этого нужно указать в переменной MASTER_SITE_OVERRIDE местоположение централизованного хранилища файлов distfile. После этого, если потребуется собрать какой-либо «порт», система сначала проверит наличие требуемого файла дистрибутива в этом хранилище. Это может быть анонимный локальный сервер FTP или, например, разделяемый ресурс NFS.

Комментарии запрещены.