versus
|
|
« Ответ #4 : 15 Июля 2009, 11:28:40 » |
|
Система управления пакетами - один из существенных компонентов любой операционки. Она включает средства установки, учета, обновления и удаления программного обеспечения, не обязательно входящего в базовую поставку собственно ОС. Традиционно такие системы разделяются на две группы - для работы с прекомпилированными пакетами и для сборки бинарных пакетов из исходных текстов. Впрочем, с течением времени граница между ними все более стирается.
Во всех ОС BSD-клана представлены инструменты обеих групп: набор средств для манипуляции готовыми бинарниками и портообразные системы - собственно порты (ports), используемые во FreeBSD.........
А теперь начнем знакомство с инструментами управления пакетами - теми, которые окажутся наиболее востребованными. Перво-наперво о пакете нужно получить информацию. Для этого служит команда pkg_info, использование которой несколько различается в зависимости от того, имеем ли мы дело с пакетом, уже инсталлированным в систему или только предполагаемым к установке. В первом случае достаточно дать команду с именем пакета, номером версии и ревизии в качестве аргумента:
$ pkg_info mpg321-0.2.10_4 ответом на что будет вывод содержимого файлов +COMMENT и +DESC:
Comment: A free command-line mp3 player, compatible with mpg123 Description: mpg321 is a clone of the popular mpg123 command-line mp3 player ... и так далее. Имя пакета берется из базы данных установленного софта, которая расположена в каталоге /var/db/pkg/ (и о которой я скажу чуть ниже). Для пакета же еще не установленного (и, соответственно, в базе данных не представленного) в аргументе команды pkg_info придется указать полное имя тарбалла и, при необходимости, полный путь к нему:
$ pkg_info /pathname/tiff-3.6.1_1.tgz с тем же, впрочем, результатом.
Информационным целям служит и команда pkg_version. Впрочем, она требует наличия индексного файла.
Получив представление о назначении пакета, можно переходить к его установке. Делается это с помощью команды pkg_add, в качестве аргумента которой указывается имя нужного тарбалла, например:
$ pkg_add /pathname/zip-2.3_1.tgz По этой команде тарбалл разворачивается, и компоненты пакета записываются в каталоги, предусмотренные в файле +CONTENTS. Кроме того, в вышеупомянутой базе данных появляется соответствующий подкаталог (в данном случае /var/db/pkg/zip-2.3_1, в который помещаются описанные выше файлы с данными о пакете:
$ ls /var/db/pkg/zip-2.3_1 +COMMENT +CONTENTS +DESC +MTREE_DIRS При таком методе установки пакетов зависимости их проверяются (в соответствии с описанием в файле +CONTENTS), но в общем случае автоматически не удовлетворяются: просто выдается сообщение, что для установки данного пакета требуется установить еще то-то и то-то. Впрочем, команда pkg_add допускает сколько угодно аргументов, и все зависимости можно задать в одной командной строке. Можно также сложить все необходимые пакеты в один каталог - в этом случае зависимые пакеты будут установлены автоматически. В базе данных пакетов, установленных для удовлетворения зависимостей, появляется дополнительный файл - +REQUIRED_BY, в котором перечислены пакеты (из числа установленных), для которых он необходим. Так, для мультимедийных библиотек давешнего примера содержимое его будет
mpg321-0.2.10_4 Описанный пример относится к установке пакета из произвольного каталога на локальной машине. Если же имеется подключение к сети, ситуация с зависимостями разрешается гораздо проще: в профильном файле пользователя, выполняющего установку пакета (несложно догадаться, что им будет root) достаточно определить переменную PACKAGESITE, значением которой будет URL репозитория пакетов:
setenv PACKAGESITE [URL] Теперь для установки пакета со всеми его зависимостями достаточно дать команду
$ pkg_add -r pkg_name причем не нужно указывать не только путь, но и номер версии/ревизии.
Команда pkg_add имеет ряд других опций, нужных в некоторых особых случаях. С ними можно ознакомиться в соответствующей man-странице.
Не зная броду, то есть метода удаления пакета, не лезут в воду, сиречь его инсталляцию. И потому следующим номером нашей программы будет команда pkg_delete, роль этого брода выполняющая. В качестве аргумента она принимает имена пакетов, полежащих деинсталляции:
$ pkg_delete zip-2.3_1 Она удаляет все компоненты пакета и соответствующую запись из базы данных в каталоге /var/db/pkg/. Однако не затрагивает пользовательских конфигов из каталога $HOME, если они успели образоваться - ведь в базе пакетов они не фигурируют.
Попытка деинсталляции пакета, от которого зависит что-либо установленное, вызывает сообщение о невозможности это сделать, и почему - выводя имя зависимостого пакета. Конечно, деинсталляцию можно выполнить принудительно (для этого предназначена опция -f, но это занятие нездоровое: очевидно. что зависимый пакет утратит работоспособность.
Откуда берутся пакеты, подлежащие установке и удалению? Во-первых, с дистрибутивных дисков, и во-вторых, из репозиториев на сайтах проектов. Однако никто не мешает пользователю BSD-системы собирать собственные пакеты - специально для этого предназначена утилита pkg_create. Что для этого нужно? Не так уж и много: исходные тексты нужной версии нужной программы и те самые четыре файла с данными о пакете.
|