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. Использование Коллекции Портов

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

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