Коллекция портов не проходит столь тщательного аудита безопасности как сама OpenBSD. Тем не менее, мы все же мы стремимся сохранять качество нашей коллекции пакетов на достаточном уровне, хотя и не имеем такого количества людей, чтобы гарантировать такой же уровень стабильности и безопасности.
Команда разработчиков, занимающаяся портми OpenBSD, сосредоточена на создании пакетов, а не работе с самими портами. Другими словами, вам рекомендуется использовать пакеты вместо того, чтобы устанавливать (собирать) программы из портов. Обновления безопасности являются исключением из этого правила, поскольку они доступны только через порты. Пакеты с бинарниками для -release и -stable не обновляются.
Работать с пакетами можно при помощи следующих утилит:
Пакеты выглядят как и самые обычные .tgz архивы. Но есть одно очень важное отличие: пакет содержит дополнительную информацию для распаковки. Эта информация используется pkg_add(1) для следующих целей:
/etc/installurl
) и значение переменной окружения PKG_PATH
.
Предпочтительным является первый метод и именно он настроен по умолчанию после
установки системы.
Если необходимо настроить несколько зеркал одновременно, PKG_PATH
поймет
это, если передать ему список, разделенный двоеточиями.
# export PKG_PATH=scp://user@company-build-server/usr/ports/packages/%a/all:https://trusted-public-server/%m:installpathИ хотя настроенная по умолчанию система должна отлично работать и устраивать большинство пользователей, на странице зеркал можно найти список альтернативных репозиторий.
Чтобы найти необходимый пакет, используейте
pkg_info(1) с параметром
-Q
.
$ pkg_info -Q unzip lunzip-1.8 unzip-6.0p9 unzip-6.0p9-iconvДругим способом поиска является использование команды
pkglocate
,
доступной после установки пакета pkglocatedb
.
$ pkglocate mutool mupdf-1.11p1-js:textproc/mupdf,js:/usr/local/bin/mutool mupdf-1.11p1-js:textproc/mupdf,js:/usr/local/man/man1/mutool.1 mupdf-1.11p1:textproc/mupdf:/usr/local/bin/mutool mupdf-1.11p1:textproc/mupdf:/usr/local/man/man1/mutool.1Если нужно найти какой-то конкретный файл, то этот метод поможет найти называние пакета, который этот файл содержит.
Как вы видете, некоторые пакеты доступны в нескольких различных вариантах. Так называемых »flavors«. В главе, посвященной портам, рассказывается об этом подробнее, но если в двух словах, то это просто различные конфигурации одного и того же пакета. Например, пакет может быть сконфигурирован с поддержкой базы данных, или сконфигурирован так, чтобы не быть зависимым от X11 и работать без него, и т.д. Некоторые пакеты разделены на так называемые »subpackages«, которы могут быть установленны отдельно.
Не все собранные пакеты доступны на наших серверах и их зеркалах. Некоторые просто не работают на всех архитектурах. Некоторые не могут распростаняться из-за проблем с лицензией.
# pkg_add rsync Ambiguous: choose package for rsync a 0: <None> 1: rsync-3.1.2p0 2: rsync-3.1.2p0-iconv Your choice:В этом примере надо будет выбрать 1, если вы хотите установить пакет со стандартной конфигурацией или 2, если вам нужна поддежка iconv. Если вы знаете заранее о доступных »flavors«, можно сразу указать в консоли какой из них нужно установить
pkg_add rsync--
(стандартная кофигурация) или
pkg_add rsync--iconv
(с поддержкой iconv).
Можно сразу указать в одной строке список имен пакетов, которые затем будут по очереди установленны вместе с зависимостями. Можно так же указать путь к пакету, который надо установить, будь это локальный файл или адрес URL. Поддерживаемыми URL являются http, https, ftp и scp.
Для некоторых пакетов в процессе установки предоставляется дополнительная информация, касательно его конфигурации или специфики запуска.
# pkg_add jove jove-4.16.0.73p0: ok --- +jove-4.16.0.73p0 ------------------- See /usr/local/share/jove/README about changes to /etc/rc or /etc/rc.local so that the system recovers jove files on reboot after a system crashВ дополнение к этому, некоторые пакеты предоставляют дополнительную информацию в файле
/usr/local/share/doc/pkg-readmes
.
Для надежности, если вы устанавливаете пакет, который уже устанавливали ранее и удалили, конфигурационные файлы, которые были изменены, не будут перезаписаны. Это относится и к обновлению пакетов.
Иногда вы можете столкнуться с ошибкой как в этом примере:
# pkg_add xv xv-3.10ap4:jpeg-6bp3: ok xv-3.10ap4:png-1.2.14p0: ok xv-3.10ap4:tiff-3.8.2p0: ok Can't install xv-3.10ap15 because of libraries |library X11.16.1 not found | not found anywhere Direct dependencies for xv-3.10ap15 resolve to png-1.6.31 jasper-1.900.1p5 tiff-4.0.8p1 jpeg-1.5.1p0v0 Full dependency tree is png-1.6.31 tiff-4.0.8p1 jasper-1.900.1p5 jpeg-1.5.1p0v0Пакет содержит информацию о своих зависимостях (библиотеках), которые должны быть установлены. Если одна из необходимых библиотек не может быть найдена, пакет не будет устанавливаться, поскольку без этой библиотеки он все равно не будет работать.
Что можно проверить:
# pkg_add -uЭто обновит все установленные пакеты, включая их зависимости.
# pkg_delete screenКак уже говорилось, измененные конфигурационные файлы не будут удалены.
Зависимости, которые больше не нужны, могут быть удалены при помощи
-a
параметра:
# pkg_delete -a
-mz
для
pkg_info(1) помогут нам в этом.
-m
выберет только те пакеты, которые были
установленны вручную. Список зависимостей отдельно не сохраняется,
т.к. в этом нет необходимости, потому что при установке пакетов они
будут установленны автоматически.
-z
игнорирует версию установленных пакетов.
Будет использована информация только о flavor и branch, что гарантирует
что при будущих установках пакета будет выбрана соответствующая версия.
$ pkg_info -mz | tee list abcde-- mpv-- python--%3.6 vim--no_x11Скопирует список файлов. После чего этот список используется на другой машине:
# pkg_add -l listСпецификация каждого пакета содержит flavor (
--
соответствует
стандартной конфигурации) добавленное к его имени, а так же пакеты, которые
доступны в нескольких версиях, так же содержат branch информацию.
В данном случае,
pkg_add(1) выберет доступную
в новом репозитории версию пакета python, но сам интерпретор будет версии
3.6
, т.к. эта информация о branch и она учитывается.
Более серьезные сбои, такие как проблемы с файловой системой, могут
привести к повреждению /var/db/pkg
.
Утилита pkg_check(8) может проверить состояние установленных пакетов.