man pkg_add

untitled аватар

man pkg_add

NAME
pkg_add -- утилита для установки и обновления пакетов дистрибутива.

SYNOPSIS
pkg_add [-AfILMnRSuVv] [-K pkg_dbdir] [-p prefix] [-s verification-type]
[-t template] [-W viewbase] [-w view]
[ [ ftp | http ]: //[ user[:password]@host[:port]][/path/]pkg-name ...

DESCRIPTION
Утилита pkg_add используется для распаковки и обновления пакетов,которые были созданы утилитой pkg_create(1). Пакеты - это совокупность скомпилированных бинариков, документации, конфигурации, инструкции по установке и других файлов. pkg_add также может рекурсивно устанавливать пакеты - зависимости с локальных дисков или по ftp/http.

WARNING
pkg_add может запускать скрипты или программы содержащиеся в пакете и ваша система может быть подвергнута заражению "Троянцами" и другим видам атак со стороны сборщиков пакетов.

Мы советуем всегда проверять происхождение пакета. Для усиления безопасности используйте электронно подписанные пакеты (см флаг -s), или флаг -M для разпаковки пакетов и проверки содержимого пакета и его скриптов, чтобы убедиться в том, что пакет не представляет опасности для вашей системы. Обратите особое внимание на файлы +INSTALL, +DEINSTALL, +REQUIRE и +MTREE_DIRS. Проверяйте файл +CONTENTS на такие директивы как @cmd, @mode(проверьте setuid), @dirrm, @exec и @runexec, так же вы можете использовать pkg_info(1) для просмотра файлов пакета.

OPTIONS
Поддерживаются следующие флаги:

pkg_name [...]
Названные пакеты установлены. pkg_name может быть URL или локальный путь, имя пакета "-" заставит pkg_add читать с stdin. Если пакеты не найдены в текущей директории, pkg_add будет искать их в каждой директории, определенной переменной окружения PKG_PATH. Любые зависимости, требуемые пакетом, pkg_add будет искать в том же месте, откуда пакет был установлен.

-A Пометить пакет как установленный автоматически, как зависимость.
Можно использовать pkg_admin set automatic=YES чтобы пометить пакеты таким образом после установки и pkg_admin unset automatic для того чтобы снять метку. Если вы примените pkg_add по отношению к автоматически установленному пакету и не укажете флаг -A, метка снимется.

-f Принудительно установить пакет даже если требуемые пакеты не установлены или скрипт проверки требований завершился аварийно.
pkg_add все равно попытается найти и установить требуемые
пакеты, если пакеты не будут найдены, это не вызовет фатальной
ошибки. Этот флаг также позволяет обойти ошибку, вызываемую в
том случае, если пакет был собран на архитектуре отличной от
архитектуры хоста.

-I Если для данного пакета существует установочный скрипт, не
запускать его.

-K pkg_dbdir
Установить pkg_dbdir как директорию базы данных пакетов. Если
этот флаг не используется, директорию базы данных пакетов читается
из переменной окружения PKG_DBDIR, если она определена, в другом
случае по используется директория по умолчанию /var/db/pkg.

-L

-M Запустить в MASTER режиме. Это специализированный режим запуска
pkg_add, он предназначен для выполнения в содействии с режимом
SLAVE. При запуске в этом режиме, pkg_add не выполняет никаких
действий кроме распаковки пакета в область хранения (см. флаг -t),
чтения упаковочной информации и вывода дампа в stdout, где он может
быть отфильтрован например sed'ом. Использование совместно с режимом
SLAVE дает возможность радикально изменять структуру пакета до
выполнения любых действий над ним.

-n Показать действия, которые будут выполнены при установке пакета,
но не устанавливать пакет.
-p preix
Определить prefix как директорию для распаковки пакета. Если пакет
сам определяет директорию по умолчанию, флаг перепишет дефолтное
значение. Заметьте, что перепишется только первая директива @cwd,
так как pkg_add не может определять какие настройки являются
относительными а какие обсолютными. Больше чем одно переопределение
директории случается редко, но если это случилось и вы хотите
контролировать *все* переопределения, смотрите флаги MASTER И SLAVE
(см. -M и -S).

-R Не записывать установку пакета. Это значит вы не сможете удалить
пакет позже. Используйте только если знаете что делаете!

-S Запустить в режиме SLAVE. Это специализированный режим запуска
pkg_add, он предназначен для выполнения в содействии с режимом
MASTER. При запуске в этом режиме, pkg_add ожидает что пакет уже
распакован и все его содержимое находится в области хранения,
расположение которой читается с stdin. Вся упаковочная информация
также будет считана с stdin.

-s тип_верификации
Использовать вызов внешней программы для верификации устанавливаемого
бинарного пакета на основании цифровой подписи. Файл с подписью должен
находиться в одной директории с пакетом. На данный момент поддерживаются
следующие типы верификации: нет, gpg, pgp5. Подпись будет проверена во
время установки, результаты будут показаны. Если тип подписи отличается
от "нет", будет задан вопрос, стоит ли pkg_add продолжать установку
бинарного пакета. Пользователь должен принять решение, устанавливать
ли пакет, полагаясь на доверие к присутствующей цифровой подписи.
Заметьте, что в данный момент невозможно использовать верификацию
при получении пакетов через URL. Пакет и файл подписи должны быть
локальными для работы верификации.

-t шаблон
Использовать шаблон как ввод к mktemp(3) во время создания ''области
хранения''. По умолчанию используется /var/tmp/instmp.XXXXXX, но бывает
необходимо переопределить ее, в ситуации, когда в /var/tmp недосататочно
места. Не забывайте добавлять некоторое количество 'X' для то чтобы
mktemp(3) заполняло их уникальным ID.

Вы можете получить прирост производительности определив нахождение
области хранения на той же партиции диска что и установочные файлы
пакета; обычно это /usr.

-u Если пакет, который вы пытаетесь установить уже установлен, той же или
другой версии, обновить пакет. Если -u указано дважды, все зывисимые
пакеты, версия которых устарела, так же будут обновлены. Смотри дальше
для детального рассмотрения процесса.

-V Показать версию и выйти.

-v Включить verbose output.

-W viewbase
Установить viewbase как базовую директорию для

-w view

Может быть указано один или несколько имен пакетов, являющиеся либо файлом
(обычно оканчивающиеся на .tgz), либо URL указывающим на файл, доступный по www
или ftp. Вы можете устанавливать файлы напрямую через анонимные ftp или www
ресурсы (например pkg_add ftp://ftp.netbsd.org/pub/netbsd/packages/2.0/i386/
shells/bash-3.0nb1.tgz или pkg_add http://www.example.org.packages/screen-4.0.tgz).
Заметьте, если вы хотите использовать ftp passive mode, установите переменную
FTP_PASSIVE_MODE в окружении. По умолчанию используется ACTIVE mode. Если pkg_add
не может скачать файл с проверенно работающего ресурса, проверьте настройки
своего firewall, который может блокировать ftp passive mode.

ТЕХНИЧЕСКИЕ ДЕТАЛИ
pkg_add помещает ''упаковочную информацию'' каждого пакета в специальную
область хранения в /var/tmp (или $PKG_TMPDIR если установлено), затем проходит
все следующие этапы для полной установки всех комплектующих пакета:

1. Проверяется, установлен ли в системе пакет (той же или иной версии),
если пакет установлен и версия совпадает, программа завершится, если
не указан флаг -u.

Если флаг -u указан, пакет заменяется новой версией. До этого
проверяются все зависимые пакеты на совместимость с новой версией.
Если все пакеты совместимы, файл +REQUIRED_BY сохраняется, а уста-
новленный пакет удаляется. Затем новая версия пакета устанавливается
с нуля и к нему добавляется файл +REQUIRED_BY.

2. Проверяется, конфликтует ли пакет с уже установленным (@pkgcfl
см. pkg_create(1)). Если конфликтует, программа завершается.

3. Все зависимости пакета (@pkgdep см. pkg_create(1)) считываются с
файла упаковочной информации. Если зависимые пакеты не установлены,
программа пытается сама найти и установить их; если недостающий
пакет не может быть найден или установлен, программа завершится.
Если флаг -u обьявлен дважды, все установленные зависимости, версия
которых рассматривается как устаревшая, обновляются. PKG_PATH
определяет нахождение зависимых пакетов.

4. Проверяются все дериктивы @option, которые контролируют как пакет
должен быть установлен в систему. Единственная пока реализированная
директива - это @option extract-in-place, которая определяет, что
пакет будет установлен без использования области хранения.

5. Если определена директива @option extract-in-place, пакет
распаковывается непосредственно в место его установки, если нет,
используется область хранения.

6. Информация о сборке пакета в +BUILD_INFO сравнивается в выводом
uname(3). Если операционная система или архитектура не совпадает,
программа завершится. Это можно обойти, используя флаг -f.

7. Информация о сборке пакета в +BUILD_INFO проверяется на предмет
USE_ABI_DEPENDS=NO (или IGNORE_RECOMMENDED). Если пакет был собран
игнорируя рекомендации по зависимостям ABI, сгенерируется ошибка.

8. Если пакет содержит скрипт _require_ (см. pkg_create(1)), он
выпоняется со следующими опциями:

pkg_name Название устанавливаемого пакета.

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

Если _require_ скрипт выходит со статусом отличным от нуля,
установка аварийно остонавливается.

9. Если пакет содержит скипт _install_, он выпоняется со следующими
опциями:

pkg-name Название устанавливаемого пакета.

PRE-INSTALL Опция, информирующая о том, что скрипт скрипт выполняет
все необходимые действия до того как пакет будет установлен.

Если _install_ скрипт выходит со статусом отличным от нуля,
установка аварийно остонавливается.

10. Если @option extract-in-place не представлена в файле упоковочной
информации, он используется как указатель, направляющий файлы из
области хранения в назначенное место.

11. Если пакет содержит файл _mtreefile_ (см. pkg_create(1)), mtree
вызывается так:
mtree -u -f mtreefile -d -e -p prefix
где prefix - это либо параметр флага -p, либо первая директория,
определенная директивой @cmd, содержащейся в данном пакете.

12. Если скрипт _install_ существует для пакета, он выполняется со
следующими опциями:

pkg-name Название устанавливаемого пакета.

PRE-INSTALL Опция, информирующая о том, что скрипт скрипт выполняет
все необходимые действия до того как пакет будет установлен.

13. После окончания установки, копии файлов упоковочной информации,
скрипта _deinstall_ и описания помещаются в /var/db/pkg/
для их возможного использования командой pkg_delete(1). Все зависимости
пакета записываются в файл /var/db/pkg/<пакет>/+REQUIRED_BY остальных
зависимых пакетов (если определено другое место нахождения базы данных
пакетов, оно переписывает /var/db/pkg/).

14.

15. Область хранения удаляется и программа останавливается.

16. Наконец, если мы обновляли пакет, +REQUIRED_BY файл возвращается
на место.

Скрипты install и require запускаются с переменной окружения PKG_PREFIX,
установленной как prefix установки (см. флаг -p). Это разрешает авторам
пакетов писать скрипты, которые могут производить какие-то действия в
директории, куда производилась установка пакета, даже если пользователь
поменяет ее место нахождения с помощью флага -p во время выполнения pkg_delete
или pkg_add(1). Скрипты также запускаются с переменной окружения PKG_METADATA_DIR,
установленной как место расположения _+*_ файлов мета данных, и с переменной
окружения PKG_REFCOUNT, установленной как место нахождения базы данных
счётчиков ссылок.

ОКРУЖЕНИЕ
LOCALBASE Это место нахождения директории _viewbase_, в которой ***all the views
are managed***. Директория _viewbase_ по умолчанию /usr/pkg.

PKG_DBDIR Если флаг -K не установлен, PKG_DBDIR является местом нахождения
базы данных пакетов. Директория базы данных пакетов по умолчанию
/var/db/pkg.

PKG_PATH Значение PKG_PATH используется, если определенный пакет не может
быть найден. Оно обычно указывает на /usr/pkgsrc/packages/All.
Переменная окружения должна представлять список путей, разделенных
точкой с запятой. Каждый путь должен указывать на директорию или
URL. Текущая директория может определяться пустой строкой или
точкой. FTP ссылки не должны заканчиваться косой чертой "/".

PKG_REFCOUNT_DBDIR
Место нахождения базы данных счётчиков ссылок. По умолчанию -
путь к базе данных пакета с .refcount на конце. Например:
/var/db/pkg.refcount.

PKG_TMPDIR Директория области хранения для установки пакетов, по умолчанию
/var/tmp. Установите директорию с большим количеством дискового
пространства, если место закончилось при установке пакета.

PKG_VIEW view по умолчанию может быть определено в переменной окружения
PKG_VIEW.

ПРИМЕРЫ
В любом случае, pkg_add попытается установить бинарные пакеты, прописанные в
списке зависимостей.

Вы можете указать скомпилированный бинареый пакет в командной строке.

#pkg_add /usr/pkgsrc/packages/All/tcsh-6.14.00.tgz

Если вы опустите версию пакета, pkg_add установит последнюю доступную.
С флагом -v, pkg_add выводит больше информации на терминал.

#pkg_add -v ftp://ftp.netbsd.org/pub/netbsd/packages/2.0/i386/All/firefox-1.0.3.tgz

#export PKG_PATH=ftp://ftp.netbsd.org/pub/netbsd/packages/2.0/i386/All
#pkg_add -v firefox

Со временем, по мере того как в пакетах выявляются уязвимости, они
перемещаются из директории ALL в директорию vulnerable.
Если вы хотите разрешить установку пакетов из директории
vulnerable по умолчанию (конечно же понимая что вы делаете), вы
можете добавить директорию vulnerable в PKG_PATH:

#export PKG_PATH="ftp://ftp.netbsd.org/pub/netbsd/packages/2.0/i386/All;ftp://netbsd.org./pub/netbsd/packages/2.0/i386/vulnerable"

Кавычки необходимы, так как в строке присутствует точка с запятой (;),
которая является мета-символом командной строки. Если вы разрешите
установку уязвимых пакетов, подумайте над установкой security/audit-packages
и запуском ее после каждого запуска pkg_add.

SEE ALSO
pkg_admin(1), pkg_create(1), pkg_delete(1), pkg_info(1), mktemp(3),
sysconf(3), packages(7), mtree(8)

AUTHORS
Jordan Hubbard
John Kohl
Hubert Feyrer
Thomas Klausner

BUGS
Хардлинки между файлами в дистрибутиве сохраняются только если
(1) область хранения находится на той же файловой системе что и
конечная директория со всеми линками на файл, или (2) если все
линки на файл заключены в @cwd директивы _и_ названия линков
распаковываются одной командой tar.

Обновление пакетов нуждается в большей доработке чтобы стать
по настоящему универсальной.

NetBSD 4.0_BETA November 4, 2006