OpenBSD FAQ - Работа с пакетами [FAQ - На главную]



Введение

Существует множество программ, которые без проблем можно запустить в OpenBSD. Для того, чтобы их можно было легко устанавливать и работать с ними, их необходимо портировать на OpenBSD и упаковать. Целью создания системы пакетов является возможность отслеживания того, какой софт уже установлен, а также возможность его быстрого обновления или удаления. За считаные минуты можно скачать и установить необходимое количество пакетов, при этом все будет размещено в нужном месте.

Коллекция портов не проходит столь тщательного аудита безопасности как сама OpenBSD. Тем не менее, мы все же мы стремимся сохранять качество нашей коллекции пакетов на достаточном уровне, хотя и не имеем такого количества людей, чтобы гарантировать такой же уровень стабильности и безопасности.

Команда разработчиков, занимающаяся портми OpenBSD, сосредоточена на создании пакетов, а не работе с самими портами. Другими словами, вам рекомендуется использовать пакеты вместо того, чтобы устанавливать (собирать) программы из портов. Обновления безопасности являются исключением из этого правила, поскольку они доступны только через порты. Пакеты с бинарниками для -release и -stable не обновляются.

Работать с пакетами можно при помощи следующих утилит:

Допустим, для корректного запуска приложения X требуется наличие приложений Y и Z. Приложение X говорит о своей зависимости от этих приложений, именно по этому Y и Z называют зависимостями X. Y может требовать наличия P и Q, а Z, в свою очередь, для корректной работы наличие R. Таким образом формируется дерево зависимостей.

Пакеты выглядят как и самые обычные .tgz архивы. Но есть одно очень важное отличие: пакет содержит дополнительную информацию для распаковки. Эта информация используется pkg_add(1) для следующих целей:

Выбор зеркала

Два места, которые проверяет pkg_add(1) при поиске пакетов, это файл installurl(5) (/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(1). Если пакет предлагает несколько »flavors«, надо будет выбрать какой именно должен быть установлен.
# 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(1):
# pkg_add -u
Это обновит все установленные пакеты, включая их зависимости.

Удаление пакетов

Чтобы удалить пакет, просто используйте pkg_delete(1):
# pkg_delete screen
Как уже говорилось, измененные конфигурационные файлы не будут удалены.

Зависимости, которые больше не нужны, могут быть удалены при помощи -a параметра:

# pkg_delete -a

Дублирование установленных пакетов на другую машину

Установка новой системы OpenBSD с таким же набором программ, что и на старой системе, достаточно частое явление. Параметры -mz для pkg_info(1) помогут нам в этом. Например:
$ 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 и она учитывается.

Незаконченная установка или удаление пакета

В очень редких случаях вы можете обнаружить, что пакет не был полностью установлен из-за конфликта с другими файлами. Неполная установка обычно помечается добавлением »partial-« в название пакета. Это может произойти, например, если вы случайно нажмете CTRL+C в процессе установки. Установка может быть продолжена позднее, и "partial-*" пакет исчезнет, или его можно удалить при помощи pkg_delete(8).

Более серьезные сбои, такие как проблемы с файловой системой, могут привести к повреждению /var/db/pkg.

Утилита pkg_check(8) может проверить состояние установленных пакетов.