5.5. Использование pkgng для управления бинарными пакетами
Пред. | Глава 5. Установка приложений: порты и пакеты | След.

## 5.5. Использование pkgng для управления бинарными пакетами

pkgng — это усовершенствованный инструмент, пришедший на смену традиционным утилитам управления пакетами FreeBSD. Он обладает множеством функциональных возможностей, ускоряющих и облегчающих работу с бинарными пакетами. Первый релиз pkgng состоялся в августе 2012 года.

pkgng не является заменой для утилит управления портами, таких как `ports-mgmt/portmaster` или `ports-mgmt/portupgrade`. В то время, как `ports-mgmt/portmaster` и `ports-mgmt/portupgrade` позволяют устанавливать приложения сторонних разработчиков как из бинарных пакетов, так и из Коллекции Портов, утилита pkgng дает возможность устанавливать приложения исключительно из бинарных пакетов.

### 5.5.1. Начало работы с pkgng

Во FreeBSD 9.1 и более поздние включена программа "самонастройки" ("bootstrap") pkgng. Она скачивает и устанавливает основную утилиту pkgng.

Для запуска самонастройки, выполните:

`#` `/usr/sbin/pkg`

Для более ранних версий FreeBSD утилиту pkgng необходимо установить из Коллекции Портов или из бинарных пакетов.

Для установки pkgng из порта, запустите следующее:

`#` `cd /usr/ports/ports-mgmt/pkg` `#` `make` `#` `make install clean`

Для установки из бинарного пакета, выполните:

`#` `pkg_add -r pkg`

Действующие инсталляции FreeBSD требуют преобразования базы данных установленных пакетов утилиты pkg_install к новому формату. Для выполнения конвертирования, запустите:

`#` `pkg2ng`

Вышеприведенный шаг не требуется для новых инсталляций, в которых не было установлено программ сторонних разработчиков.

### Важно:

Этот шаг необратим. После перевода базы данных установленных пакетов к формату pkgng утилитами pkg_install более пользоваться не следует.

### Примечание:

В процессе конвертирования базы данных установленных пакетов могут возникать сообщения об ошибках. На данном этапе их можно игнорировать, так как перечень программ сторонних разработчиков, информация о которых не была преобразована, будет перечислен по завершении работы `pkg2ng`. Над этим перечнем придется поработать вручную.

Чтобы убедиться, что Коллекция Портов FreeBSD регистрирует новые программы при помощи pkgng, а не pkg_install, для версий FreeBSD, предшествующих 10.`X`, в файл `/etc/make.conf` необходимо внести следующую запись:

WITH_PKGNG= yes

### 5.5.2. Настройка окружения pkgng

Система управления пакетами pkgng при выполнении большинства операций обращается к пакетному репозиторию. Адрес используемого по умолчанию репозитория указан в `/usr/local/etc/pkg.conf` или в переменной окружения `PACKAGESITE`. Последняя переопределяет адрес, указанный в конфигурационном файле.

Дополнительные опции конфигурации pkgng описаны в pkg.conf(5).

### 5.5.3. Основные операции pkgng

Информацию по работе с pkgng можно найти на странице справочника pkg(8), или в выводе утилиты `pkg`, запущенной без аргументов.

Каждый аргумент команды pkgng описан на соответствующей странице справочника. Например, чтобы ознакомиться со страницей справочника для `pkg install`, запустите любую из двух нижеследующих команд:

`#` `pkg help install`
`#` `man pkg-install`

#### 5.5.3.1. Получение информации об установленных пакетах при помощи pkgng

Информация об установленных в системе пакетах может быть отображена при помощи команды `pkg info`. Подобно до pkg_info(1), в выводе перечисляются версии и описания всех установленных пакетов.

Если необходима информация о конкретном пакете, выполните:

`#` `pkg info `packagename``

Например, для получения версии pkgng, который установлен в системе, запустите:

`#` `pkg info pkg` pkg-1.0.2 New generation package manager

#### 5.5.3.2. Установка и удаление пакетов при помощи pkgng

В общем, бинарные пакеты устанавливаются при помощи:

`#` `pkg install `packagename``

Команда `pkg install` обращается к пакетному репозиторию, это упоминалось в Раздел 5.5.2, «Настройка окружения pkgng». Команда pkg-add(8), напротив, не выполняет обращений к пакетному репозиторию, а также игнорирует переменную `PACKAGESITE`. Как следствие — зависимости не отслеживаются, и необходимые зависимые компоненты не скачиваются с удаленного источника. В этом разделе описана работа с `pkg install`. За подробностями работы с `pkg add` обратитесь к справочной странице по pkg-add(8).

Утилита `pkg install` может устанавливать дополнительные бинарные пакеты. Например, для установки curl, выполните:

`#` `pkg install curl` Updating repository catalogue Repository catalogue is up-to-date, no need to fetch fresh copy The following packages will be installed: Installing ca_root_nss: 3.13.5 Installing curl: 7.24.0 The installation will require 4 MB more space 1 MB to be downloaded Proceed with installing packages [y/N]: `y` ca_root_nss-3.13.5.txz 100% 255KB 255.1KB/s 255.1KB/s 00:00 curl-7.24.0.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Installing ca_root_nss-3.13.5... done Installing curl-7.24.0... done

Новый пакет, как и любые дополнительные пакеты, которые были установлены как зависимости, перечисляются в списке установленных пакетов:

`#` `pkg info` ca_root_nss-3.13.5 The root certificate bundle from the Mozilla Project curl-7.24.0 Non-interactive tool to get files from FTP, GOPHER, HTTP(S) servers pkg-1.0.2 New generation package manager

Пакеты, в которых более нет необходимости, могут быть удалены при помощи `pkg delete`. Например, если выяснится, что curl не нужен:

`#` `pkg delete curl` The following packages will be deleted: curl-7.24.0_1 The deletion will free 3 MB Proceed with deleting packages [y/N]: `y` Deleting curl-7.24.0_1... done

#### 5.5.3.3. Обновление установленных пакетов при помощи pkgng

Пакеты, версии которых устарели, можно найти при помощи команды `pkg version`. Версии установленных пакетов сравниваются с версиями приложений из локального дерева портов, а в случае отсутствия портов pkg-version(8) обращается к удаленному репозиторию пакетов.

При помощи pkgng можно обновлять пакеты до новых версий. Предположим, вышла новая версия curl. Установленный пакет можно обновить к новой версии, выполнив:

`#` `pkg upgrade` Updating repository catalogue repo.txz 100% 297KB 296.5KB/s 296.5KB/s 00:00 The following packages will be upgraded: Upgrading curl: 7.24.0 -> 7.24.0_1 1 MB to be downloaded Proceed with upgrading packages [y/N]: `y` curl-7.24.0_1.txz 100% 1108KB 1.1MB/s 1.1MB/s 00:00 Checking integrity... done Upgrading curl from 7.24.0 to 7.24.0_1... done

#### 5.5.3.4. Аудит безопасности пакетов при помощи pkgng

Изредка в приложениях из Коллекции Портов обнаруживаются уязвимости. В pkgng встроена возможность выполнять аудит безопасности, действующая подобно приложению из `ports-mgmt/portaudit`. Для выполнения аудита установленных в систему программ, выполните:

`#` `pkg audit -F`

### 5.5.4. Сложные вопросы работы с pkgng

#### 5.5.4.1. Автоматическое удаление неиспользуемых зависимостей при помощи pkgng

После удаления пакета в системе могут остаться неиспользуемые зависимости, наподобие `security/ca_root_nss` из примера выше. Такие пакеты остаются установленными, несмотря на то, что они более не требуются другим пакетам. Определить и удалить неиспользуемые пакеты, которые были установлены как зависимости, можно при помощи:

`#` `pkg autoremove` Packages to be autoremoved: ca_root_nss-3.13.5 The autoremoval will free 723 kB Proceed with autoremoval of packages [y/N]: `y` Deinstalling ca_root_nss-3.13.5... done

#### 5.5.4.2. Резервное копирование базы данных установленных пакетов pkgng

В отличие от традиционной системы управления пакетами, pkgng располагает своим собственным механизмом резервного копирования базы данных. Для ручного создания резервной копии базы данных установленных пакетов, выполните:

`#` `pkg backup -d `pkgng.db``

### Примечание:

Замените имя файла `pkgng.db` на более подходящее.

В дополнение, pkgng содержит скрипт periodic(8), позволяющий выполнять ежедневное автоматическое копирование базы данных установленных пакетов. Для активации данной возможности задайте переменной `daily_backup_pkgng_enable` значение `YES` в файле periodic.conf(5).

### Подсказка:

Для предотвращения периодического запуска аналогичного скрипта системы pkg_install, также выполняющего резервное копирование базы данных установленных пакетов, задайте переменной `daily_backup_pkgdb_enable` значение `NO` в файле periodic.conf(5).

Для восстановления содержимого базы данных установленных пакетов из резервной копии, выполните:

`#` `pkg backup -r `/path/to/pkgng.db``

#### 5.5.4.3. Удаление копий устаревших пакетов в системе pkgng

По умолчанию, pkgng сохраняет копии установленных бинарных пакетов в каталог, указанный переменной `PKG_CACHEDIR` в pkg.conf(5). При обновлении пакетов командой `pkg upgrade` старые версии обновленных пакетов автоматически не удаляются.

Для удаления устаревших версий бинарных пакетов из кеш-каталога, выполните:

`#` `pkg clean`

#### 5.5.4.4. Изменение метаданных пакетов pkgng

Со временем программы из Коллекции Портов могут претерпевать изменения старшего (major) номера версии. В отличие от pkg_install, pkgng располагает встроенной командой для обновления информации о происхождении (origin) пакета. Например, изначально порт `lang/php5` был версии `5.3`. Позже этот порт был переименован в `lang/php53`, а под именем `lang/php5` был создан порт версии `5.4`. Утилитам системы pkg_install для обновления информации о происхождении (origin) пакета в собственной базе данных установленных пакетов потребовалась бы помощь дополнительного программного обеспечения, такого как `ports-mgmt/portmaster`.

В отличие от `ports-mgmt/portmaster` и `ports-mgmt/portupgrade` для портов, порядок перечисления новой и старой версий отличаются. Для pkgng необходим следующий порядок:

`#` `pkg set -o `category/oldport`:`category/newport``

Например, в вышеприведенном случае для замены информации о происхождении пакета, выполните:

`#` `pkg set -o lang/php5:lang/php53`

Еще один пример: для изменения информации о происхождении пакета с `lang/ruby18` на `lang/ruby19`, выполните:

`#` `pkg set -o lang/ruby18:lang/ruby19`

И последний пример: для замены информации о происхождении пакета разделяемой библиотеки `libglut` с `graphics/libglut` на `graphics/freeglut`, запустите:

`#` `pkg set -o graphics/libglut:graphics/freeglut`

### Примечание:

Выполняя замену информации о происхождении пакетов, в большинстве случаев также требуется переустановить пакеты, которые зависят от изменившегося пакета. Для принудительной переустановки зависящих пакетов, выполните:

`#` `pkg install -Rf `graphics/freeglut``

Пред. | Наверх | След.
5.4. Использование бинарных пакетов | Начало | 5.6. Использование Коллекции Портов

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.