Пакетный менеджер PKGNG - новый этап в развитии системы FreeBSD.

Не секрет что отсутствие в OS FreeBSD современного пакетного менеджера тормозит и сдерживает не только систему работы с портами, но и развитие системы в целом.

Несомненно старый пакетный менеджер, написанный на СИ Джорданом Хаббардом, был революционным шагом в начале 90'ых, легкий, быстрый, надежный и простой.

Но современные условия выдвигают новые требования, что и послужило толчком для создания нового пакетного менеджера и дабы прекратить споры и разногласия среди разработчиков и сообщества FreeBSD, которые ведутся на протяжении, примерно 10 лет или больше.

Если кто-то решит что за это время можно было разработать несколько пакетных менеджеров, удовлетворяющих современным требованиям и тенденциям, возможно, но в рамках концепции развития проекта FreeBSD это, к сожалению, не так.

Прим: данное описание не претендует на серьезное руководство и может содержать повторы, точнее выжимки ранее изложенного в стиле "коротко"
 Цель - показать на примерах как лучше и удобней пользоваться новым пакетным менеджером PKGNG.

Коротко о достижения пакетного менеджера PKGNG:

Ссылки:

Сообщить об ошибках можно на github трекер:

Третичный софт поддерживающий работу с новым пакетным менеджером pkgng

"из коробки":

используя патчи:

инструментарий который будет или уже поддерживает работу с pkgng:

Напоминание чтобы не возникало вопросов у новичков FreeBSD.

В базовую систему FreeBSD входит пакетный менеджер pkg_install, это старый пакетный менеджер, который сыграл свою роль и будет заменен на новый, в его состав входят утилиты работы с пакетами:

/usr/sbin/pkg_add
/usr/sbin/pkg_create
/usr/sbin/pkg_delete
/usr/sbin/pkg_info
/usr/sbin/pkg_updating
/usr/sbin/pkg_version

в sources он находится в:

# ls -la /usr/src/usr.sbin/pkg_install
В ближайшем будущем, планируется ввести в базовую систему, новый пакетный менеджер PKGNG, вероятно в 9.1-RELEASE FreeBSD это сделать не успеют, но уже начиная с 9-Stable, в системе находится пусковик:
# ls -la /usr/sbin/pkg
который выполняет процесс Bootsrapping - установку нового пакетного менеджера из портов:
/usr/ports/ports-mgmt/pkg
прим: во избежание путаницы - PKGNG название проекта и означает PacKet management New или Next (в разных источниках по разному) Generation.
Сама же утилита - pkg.

Порты и пакеты системы FreeBSD

Для работы с третичным программным обеспечением, в OS FreeBSD существуют:



 Пакетный менеджер - оперирует только с готовыми бинарными пакетами и включен в базовую систему.
В отличие от пакетного менеджера, базовая система FreeBSD не содержит менеджера портов, тем не менее, в портах существует достаточное их количество.
 Наиболее популлярные:

Использование PKG

Предустановка

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

/var/db/pkg - директорию с перечнем установленных пакетов и портов
/var/db/ports - директорию с опциями сборки портов
примеры старой структуры установленных пакетов:
# ls -la /var/db/pkg/perl-5.10.1_1/     
total 488
-rw-r--r--    1 root  wheel      41  7 июн  2010 +COMMENT
-rw-r--r--    1 root  wheel  418192 26 июл  2010 +CONTENTS
-rw-r--r--    1 root  wheel    4290  7 июн  2010 +DEINSTALL
-rw-r--r--    1 root  wheel     254  7 июн  2010 +DESC
-rwxr-xr-x    1 root  wheel    4290  7 июн  2010 +INSTALL
-rw-r--r--    1 root  wheel   17501  7 июн  2010 +MTREE_DIRS
-rw-r--r--    1 root  wheel    2401 15 авг  2011 +REQUIRED_BY
drwxr-xr-x    2 root  wheel     512  1 окт  2010 .
drwxr-xr-x  556 root  wheel   15360 25 июл 13:36 ..
#
опций портов:
# ls -la /var/db/ports/mc/
total 6
drwxr-xr-x   2 root  wheel  512 27 июл  2010 .
drwxr-xr-x  25 root  wheel  512 17 фев  2012 ..
-rw-r--r--   1 root  wheel  243 27 июл  2010 options
#

Советую перед переходом на PKGNG, сделать backup /var/db/pkg, невзирая на то, что pkgng, напомнит вам об этом и посоветует запустить специальный скрипт pkg2ng для преобразования в новый формат и который сделает backup старого формата.

Установка PKGNG

Если в вашей версии или релизе FreeBSD нет пусковика, можете установить pkgng из пакетов или из порта:

# /usr/ports/ports-mgmt/pkg
# make install clean
Как уже было сказано, в актуальной системе находится лишь пусковик
# ls -la /usr/sbin/pkg
который читает переменные среды PACKAGESITE,PACKAGEROOT и использует их для задания репозитория и установки pkg.

Если переменные не определены, используются заданные в pkg.conf или встренные в пусковик
/usr/src/usr.sbin/pkg/pkg.c:

#define _LOCALBASE "/usr/local"
#define _PKGS_URL "http://pkgbeta.FreeBSD.org"
обычно это:
# echo $PACKAGESITE/Latest/pkg.txz
или
# echo $PACKAGEROOT/latest/Latest/pkg.txz
или pkg.conf:
packagesite: http://pkgbeta.FreeBSD.org/freebsd:9:x86:64/latest
установка:
# pkg
или
# /usr/sbin/pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg please wait
Installing pkg-1.0.r5_1... done
If you are upgrading from the old package format, first run:

  $ pkg2ng
1.0-rc5
#

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

# pkg2ng (если система чистая, делать это не нужно)
смотрим что получили:
# ls -la /var/db/pkg/
total 84320
drwxr-xr-x  2 root  wheel       512 Sep  1 21:56 .
drwxr-xr-x  8 root  wheel       512 Sep  1 20:16 ..
-rw-r--r--  1 root  wheel    120832 Sep  1 21:56 local.sqlite
-rw-r--r--  1 root  wheel  86149120 Sep  1 20:20 repo.sqlite
# 
две базы в формате sqlite, каждая из которых соответствует
репозиториям.
Внимание:
если у вас в /var/db/pkg остались или находятся описания пакетов в формате:
# ls -la /var/db/pkg/rsync-3.0.9_1/
total 12
drwxr-xr-x   2 root  wheel   512 11 окт 13:04 .
drwxr-xr-x  23 root  wheel  1024 11 окт 13:04 ..
-rw-r--r--   1 root  wheel   134 11 окт 13:04 distfiles
#
можно сделать вывод о том что в качестве пакетного менеджера используется pkg, ибо в директории находится только один файл distfiles. Такие шаблоны обычно остаются после выполнения pkg2ng или менеджеров портов использующих новый пакетный менеджер.
  Их можно просто удалить.

Для последующего использования пакетного менеджера pkg, необходимо добавить переменную WITH_PKGNG=yes в /etc/make.conf.

Все готово для использования нового пакетного менеджера.

-------------------------- /etc/make.conf ---------------------------------
...
WITH_PKGNG=yes
...
---------------------------------------------------------------------------

Первичные настройки pkg

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

ASSUME_ALWAYS_YES  : [NO|YES]
PACKAGESITE        : http://pkg.freebsd.org/${ABI}/latest (сайт репозитория)
PKG_MULTIREPOS     : [NO|YES] (использовать несколько репозиториев)
по умолчанию:
PKG_DBDIR    = /var/db/pkg
PKG_CACHEDIR = /var/cache/pkg
репозитории задаются в pkg.conf, в примере они закоментарены:
# Repository definitions
#repos:
#  default : http://example.org/pkgng/
#  repo1 : http://somewhere.org/pkgng/repo1/
#  repo2 : http://somewhere.org/pkgng/repo2/

некоторые общеупотребительные опции:

  -y - всегда отвечать "y [yes]", отменить интерактив
  -q - "без вывода сообщений на stdout", однако если неверно задано имя пакета вывод на stdout будет (почему просто не выдать код возврата "1"? )
  -f - выполнить "насильно" (или полная инфо в случае pkg info)
  -L - использовать только локальный кеш и запретить апдейт репозитория
  -r - задать репозиторий который будет использоваться

использование шаблонов в пакетном менеджере pkg:

  -g использовать как shell шаблон
  -x использовать как регулярное выражение
  -X использовать как расширенное регулярное выражение

например:

 -g a* или -g "[0-z]*" или -g "*rar" или -g "?c"
 -x "perl-5*" или "^deco*$" или -x "^mc-*$" или -x "^mc-.*$"
 -x ".*rar$" и тд и тп
 -X '(pkg)'

Нет смысла заниматься переводом manual'ов команд пакетного менеджера, попробуем сначала выполнить некое введение в использование pkgng, то есть с чего бы начал обычный администратор.

# pkg  (запуск без параметров выдаст help по синтаксису использования)
usage: pkg [-v] [-d] [-j |-c ]  []

Global options supported:
        -d             Increment debug level
        -j             Execute pkg(1) inside a jail(8)
        -c             Execute pkg(1) inside a chroot(8)
        -v             Display pkg(1) version

Commands supported:
        add            Registers a package and installs it on the system
...
...
For more information on the different commands see 'pkg help '.
версия:
# pkg -v
1.0
#
информация по установленным пакетам:
# pkg info
pkg-1.0                        New generation package manager
#
информация по всем установленным пакетам:
# pkg info -a
pkg-1.0                        New generation package manager
portmaster-3.13.13             Manage your ports without external databases or languages
#
полная информация по пакету:
# pkg info -f portmaster
Name           : portmaster                - имя пакета
Version        : 3.13.13                   - версия
Origin         : ports-mgmt/portmaster     - категория_порта/имя_порта
Prefix         : /usr/local                - префикс установки
Categories     : ports-mgmt                - категория порта
Maintainer     : dougb@FreeBSD.org
WWW            : http://dougbarton.us/portmaster.html
Comment        : Manage your ports without external databases or languages
Options        :                                           
        BASH: on                           - опции сборки пакета
        ZSH: off                           - опции сборки пакета
Flat size      : 133 kB                    - размер пакета
Description    : 
This script uses the existing ports infrastructure to track dependencies,
and keep them up to date.  It is written in /bin/sh so it has no dependencies.

Portmaster has the following features:
  * Updates and repairs (as needed) entries for dependencies in both +CONTENTS
    and +REQUIRED_BY files for both the port that is being updated, and any
    ports that depend on it
  * Runs make config recursively through all ports before starting build
  * Downloads distfiles in the background
  * Recursively checks and upgrades (or installs) all dependencies
  * User can force upgrades of all dependent ports
  * Offers the user the opportunity to delete stale distfiles
  * Supports ports/MOVED and non-default settings of PORTSDIR and PKG_DBDIR
  * Interactive update mode (prompts for each update)
  * Option to rebuild port, and ports that depend on it
  * Options to make packages out of installed, and new ports
  * Option to clean out stale port dependencies
  * Options to list installed ports by category, and those with new versions
  * Packages can be used for installation either exclusively, if available,
    or only for build dependencies

WWW: http://dougbarton.us/portmaster.html
#

не всегда нужен содержательный и многострочный вывод, иногда полезнее получить быстрый ответ в стиле "да"/"нет", используя нужные опции:

если пакет установлен
код возврата: 0
       если нет: 1
# pkg info -e portmaster ; echo $?
0
# pkg info -e bash ; echo $?
1
#
список всех файлов установленных пакетом:
# pkg info -l portmaster
portmaster-3.13.13 owns the following files:
/usr/local/etc/bash_completion.d/portmaster.sh
/usr/local/etc/portmaster.rc.sample
/usr/local/man/man8/portmaster.8.gz
/usr/local/sbin/portmaster
#
показать зависимости depends on (от каких пакетов зависит):
# pkg info -d apache22-worker-mpm
apache22-worker-mpm-2.2.22_8 depends on:
apr-1.4.6.1.4.1_1
expat-2.0.1_2
libiconv-1.14
pcre-8.31_1
perl-5.14.2_2
#
показать каким пакетам требуется данный required by (какие зависят от указанного):
# pkg info -r apr 
apr-1.4.6.1.4.1_1 is required by:
apache22-worker-mpm-2.2.22_8
subversion-1.7.6
#
коротко основные: pkg info
==============================< pkg info >=====================================
данные обо всех установленных пакетах:         pkg info или pkg info -a
данные о конкретном пакете           :         pkg info name
все данные о конкретном пакете       :         pkg info -f name
установлен или нет пакет             :         pkg info -e name ; echo $?
список всех файлов пакета            :         pkg info -l name
список от кого зависит этот пакет    :         pkg info -d name
список кто зависит от этого пакета   :         pkg info -r name
==============================< pkg info >=====================================

Какие пакеты есть на удаленном репозитории?

 Это можно узнать используя запрос к удаленному репозиторию: rquery, в нем всегда должны присутствовать параметры <query-format>.

пока рассмотрим простые примеры (позже будут запросы с выражениями):

# pkg rquery -a "%n-%v - %c"
# pkg rquery -a "%n-%v - %c" | less
0verkill-0.16_1 - 0verkill is a bloody 2D action Deathmatch-like game in ASCII-art
2ManDVD-1.3.5_2 - Create your own video dvd
2bsd-diff-2.11 - 2.11BSD diff utility
2bsd-vi-050325_1 - The original vi editor, updated to run on modern OSes
2d-rewriter-1.4 - Cellular automata simulator
2dhf-2005.05_4 - A Numerical Hartree-Fock Program for Diatomic Molecules
2ping-1.1 - A bi-directional ping utility
3dc-0.8.1_3 - 3-Dimensional Chess for X Window System
3ddesktop-0.2.9_10 - 3D Virtual Desktop Switcher
...
...
zziplib-0.13.62 - A library to provide transparent read access to zipped files
zzuf-0.13 - Transparent application input fuzzer
#
посчитаем количество пакетов, хотя при запросе к удаленному репозиторию, об этом сообщается:
# pkg rquery -a "%n-%v" | wc -l
   21952
#
показать все пакеты начинающиеся с "ru-":
# pkg rquery -x '%n-%v' '^ru-.*$'
ru-MT-5.14
ru-PSCyr-0.4c2_4
ru-artwiz-ru-20041031_2
...
ru-xmms-1.2.11_16
ru-xruskb-1.15.4_2
#
с опцией -e команды query и rquery позволяют использовать условия в запросах к локальной базе или удаленному репозиторию:
# pkg rquery -e  
# pkg query -e  
в выражениях evaluation-condition можно использовать переменные:
- %n %o %v %m и тд pkg-query(8)
- операторы сравнения:
  - >[=] численное сравнение
  - <[=] численное сравнение
  - =[=] численное и строковое сравнение
  - !=   численное и строковое сравнение
  - ~ строчный шаблон
выражения могут объединяться: && (и) , || (или) и группироваться используя круглые скобки ()

в шаблон запросе - <query-format> в котором можно использовать

    %n     - вывести имя пакета
    %v     - версия пакета
    %o     - источник пакет (это категория/имя из порта)
    %p     - префикс
    %m     - maintainer (сопроваждающий) пакет
    %s[bh] - размер пакета, b - в байтах, h - в удобном формате
    %M     - pkg-message пакета

    %?[drCOLB] - полезный шаблон, вернет "0" если список пуст, иначе "1"

    d - есть ли у заданного пакета зависимости
    r - зависят ли другие пакеты от заданного
    B - зависимость от динамических библиотек в заданном пакете
например:

показать все пакеты удаленного репозитория с именами по шаблону [0-2]*

# pkg rquery -e '%n ~ [0-2]*' '%n-%v'
0verkill-0.16_1
2ManDVD-1.3.5_2
2bsd-diff-2.11
2bsd-vi-050325_1
2d-rewriter-1.4
2dhf-2005.05_4
2ping-1.1
# 
показать все пакеты удаленного репозитория размером: 500 < размер < 1000 байт
# pkg rquery -e '(%s>500 && %s<1000)' '%o %sb'
security/crack 512
misc/kde-xdg-env 591
misc/kde4-xdg-env 601
devel/maven-wrapper 693
devel/pear-channel-openpear 824
ports-mgmt/pkg_remove 891
net-mgmt/ssgless 944
#
показать все пакеты удаленного репозитория у которых maintainer == miwi с именами пакетов по шаблону py2*
# pkg rquery -e "%m ~ miwi* && %n ~py2*" "%n-%v"
py27-apachelog-1.1
py27-apetag-1.2
py27-bcrypt-0.2
py27-django-classy-tags-0.3.4.1
py27-psycopg2-2.4.5
py27-setuptools-git-0.4.2
py27-setuptools_hg-0.4
py27-texttable-0.8.1
#
коротко основные: pkg rquery
==============================< pkg rquery >===================================
все пакеты                    :   pkg rquery -a "%n"
все, с именами и версиями     :   pkg rquery -a "%n-%v"

пакеты с по glob шаблону      :   pkg rquery -g "%n-%v" 'un?r*'
пакеты по шаблону regexp      :   pkg rquery -x "%n-%v" '^un[a-z].*$'

пакеты по выражению           :   pkg rquery -e '%n ~ [0-2]*' '%n-%v'
                              :   pkg rquery -e '(%s>500 && %s<1000)' '%o %sb'
                              :   pkg rquery -e "%m ~ miwi* && %n ~py2*" "%n-%v"

пакет с зависимостями         :   pkg rquery "pkg depends on %do %dv" misc/mc
пакеты зависящие от заданного :   pkg rquery "pkg %n required by %ro %rv" devel/apr1
==============================< pkg rquery >===================================
после получения нужных сведений о пакете/ах c удаленного репозитория можно устанавливать пакеты.

Установка пакетов из репозитория

интерактивная установка:

# pkg install rar
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

        Installing rar: 4.1.1,3

The installation will require 1 MB more space

36 B to be downloaded

Proceed with installing packages [y/N]: y
pkg: cached package rar-4.1.1,3: checksum mismatch, fetching from remote
rar-4.1.1,3.txz                     100%  471KB 471.4KB/s 471.4KB/s   00:00    
Checking integrity... done
Installing rar-4.1.1,3... done
#
пакеты с одинаковым названием portname:
# pkg search -x "^deco$"
deco-1.6.2_1                   A program to extract various archive file formats
deco-3.9_4                     Demos Commander, a free Norton Commander clone
#
пакетная (неинтерактивная) установка: -y , использовать только кеш локальных данных, без обращения к удаленному репозиторию: -L
# pkg install -Ly deco-3.9_4
The following packages will be installed:

        Installing deco: 3.9_4

The installation will require 159 kB more space

4 B to be downloaded
pkg: cached package deco-3.9_4: checksum mismatch, fetching from remote
deco-3.9_4.txz                      100%   75KB  75.4KB/s  75.4KB/s   00:01    
Checking integrity... done
Installing deco-3.9_4... done
#
более удобно и правильно устанавливать пакеты используя pkg-origin, это category/portname, например:
# pkg install -y net/trafshow
Updating repository catalogue
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - без опции -L обратились к удаленному repo
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

        Installing trafshow: 5.2.3_2,1

The installation will require 111 kB more space

51 kB to be downloaded
trafshow-5.2.3_2,1.txz              100%   51KB  51.0KB/s  51.0KB/s   00:00    
Checking integrity... done
Installing trafshow-5.2.3_2,1... done
#
эмуляция установки выполнения, без реальной установки -n:
# pkg install -yn security/nmap
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

        Downgrading pkgconf: 0.8.9 -> 0.8.7_2
        Installing lua: 5.1.5_4
        Downgrading pcre: 8.31_1 -> 8.31
        Installing nmap: 6.01

The installation will require 17 MB more space

3 MB to be downloaded
#
апгрейд ранее установленного пакета (принудительная установка) -f, предварительно посмотрим наличие:
# pkg info -f deco | egrep -i "(version|origin)"
Version        : 3.9_4
Origin         : misc/deco
#
в данном случае свежая версия == той что уже установлена, о чем и сказано:
# pkg install -yfL misc/deco 
pkg: misc/deco is already installed and at the latest version
The following packages will be installed:

        Reinstalling deco-3.9_4

0 B to be downloaded
Checking integrity... done
Reinstalling deco-3.9_4 done
#
апгрейд с переустановкой всех зависимостей -Rf:
# pkg install -LRf security/nmap
The following packages will be installed:

        Downgrading pkgconf: 0.8.9 -> 0.8.7_2
        Downgrading pcre: 8.31_1 -> 8.31
        Reinstalling glib-2.28.8_4
        Reinstalling gamin-0.1.10_4
        Installing lua: 5.1.5_4
        Reinstalling sqlite3-3.7.13
        Reinstalling gio-fam-backend-2.28.8_1
        Installing nmap: 6.01
        Reinstalling apache22-worker-mpm-2.2.22_8
        Downgrading subversion: 1.7.6 -> 1.7.5
        Reinstalling mc-4.8.1.4_1

The installation will require 33 MB more space

12 MB to be downloaded

Proceed with installing packages [y/N]: y
#
пакетная (неинтерактивная) установка списка пакетов:
# pkg install -yL audio/mpg123 sysutils/coreutils
The following packages will be installed:

        Installing mpg123: 1.14.4
        Installing coreutils: 8.12

The installation will require 18 MB more space

2 MB to be downloaded
mpg123-1.14.4.txz                   100%  172KB 172.0KB/s 172.0KB/s   00:00    
coreutils-8.12.txz                  100% 2340KB   2.3MB/s   2.3MB/s   00:00    
Checking integrity... done
Installing mpg123-1.14.4... done
Installing coreutils-8.12... done
#
мы хотим установить пакет, но в чем-то не уверены, помечаем его как orphan для последующего автоудаления autoremove -A:
# pkg install -Ay security/clamav
Updating repository catalogue
Repository catalogue is up-to-date, no need to fetch fresh copy
The following packages will be installed:

        Installing arc: 5.21p
        Installing arj: 3.10.22_4
        Installing lha: 1.14i_6
        Installing unzoo: 4.4_2
        Installing clamav: 0.97.5_1

The installation will require 15 MB more space

372 B to be downloaded
pkg: cached package arc-5.21p: checksum mismatch, fetching from remote
arc-5.21p.txz                       100%   44KB  43.9KB/s  43.9KB/s   00:00    
pkg: cached package arj-3.10.22_4: checksum mismatch, fetching from remote
arj-3.10.22_4.txz                   100%  214KB 214.1KB/s 214.1KB/s   00:01    
pkg: cached package lha-1.14i_6: checksum mismatch, fetching from remote
lha-1.14i_6.txz                     100%   34KB  33.9KB/s  33.9KB/s   00:00    
pkg: cached package unzoo-4.4_2: checksum mismatch, fetching from remote
unzoo-4.4_2.txz                     100%   16KB  15.8KB/s  15.8KB/s   00:00    
pkg: cached package clamav-0.97.5_1: checksum mismatch, fetching from remote
clamav-0.97.5_1.txz                 100% 4164KB   2.0MB/s   4.0MB/s   00:02    
Checking integrity... done
Installing arc-5.21p... done
Installing arj-3.10.22_4... done
Installing lha-1.14i_6... done
Installing unzoo-4.4_2... done
Installing clamav-0.97.5_1... done
#
если что-то непонравилось удаляем разом с зависимостями:
# pkg autoremove -y 
Packages to be autoremoved: 
        clamav-0.97.5_1
        arc-5.21p
        arj-3.10.22_4
        lha-1.14i_6
        unzoo-4.4_2

The autoremoval will free 15 MB
Deleting clamav-0.97.5_1...
====================================================

If you want remove clamav permanently from you system
execute following commands:

 # rm -rf /var/log/clamav
 # rm -rf /var/run/clamav
 # rm -rf /var/db/clamav
 # pw userdel clamav

====================================================

 done
Deleting arc-5.21p... done
Deleting arj-3.10.22_4... done
Deleting lha-1.14i_6... done
Deleting unzoo-4.4_2... done
#
коротко основные: pkg install:
===========================< pkg install >=====================================
интерактивная одного пакета:    pkg install name[-version]
нескольких по origin       :    pkg install category1/name1 category2/named2
неинтерактивная local cache:    pkg install -yL category/name [category1/name1]
эмуляция                   :    pkg install -yn category/name

апгрейд или принудительная :    pkg install -yLf category/name
апгрейд включая зависимости:    pkg install -yLRf category/name

с пометкой для autoremove  :    pkg install -Ay category/name
===========================< pkg install >=====================================

Добавление отдельных пакетов

В отличие от установки с репозитория, существует установка отдельных пакетов с локального места или с URL ftp/http:
# pkg info | grep clamav
отсутствует, но он ранее собирался у нас локально:
# ls -la /usr/local/pkgng/packages/All/ | grep clamav
-rw-r--r--   1 root  wheel   3812776 Sep 23 12:53 clamav-0.97.6.txz
# cd /usr/local/pkgng/packages/All/
# pkg add clamav-0.97.6.txz 
Installing clamav-0.97.6...Installing arc-5.21p... done
Installing arj-3.10.22_4... done
Installing lha-1.14i_6... done
Installing unzoo-4.4_2... done
 done
# pkg info | grep clamav
clamav-0.97.6                  Command line virus scanner written entirely in C
#
или
# pkg add /usr/local/pkgng/packages/All/clamav-0.97.6.txz 
Installing clamav-0.97.6...Installing arc-5.21p... done
Installing arj-3.10.22_4... done
Installing lha-1.14i_6... done
Installing unzoo-4.4_2... done
#
с удаленного ftp/http:
# pkg add http://unix1.jinr.ru/~lavr/pkgng/lynx-2.8.7.2,1.txz
lynx-2.8.7.2,1.txz                  100%  928KB 927.9KB/s 927.9KB/s   00:00    
Installing lynx-2.8.7.2,1... done
To enable certificate handling for SSL connnections, set
SSL_CERT_DIR and SSL_CERT_FILE in your environment to the
proper values (depending upon which SSL library
/usr/local/bin/lynx uses), as described in:

/docs/README.sslcerts

and:

/docs/README.rootcerts.

You may also need to generate keys and certificates as
described in the latter document and your SSL documentation.
#
коротко основные: pkg add
===============================< pkg add >=====================================
с локальных FS       :    pkg add filename.txz
с удаленных FTP/HTTPS:    pkg add [http/ftp]://host.domain/path/filename.txz
===============================< pkg add >=====================================

Запросы к локальному репозиторию

pkg info, rquery, install, add - позволили нам найти что нужно на удаленном репозитории и установить или проапгрейдить пакеты, приступим к получению информации с локальной базы уже установленных пакетов:

  pkg query - всегда требуется задание формата как и rquery, за исключением того что в rquery можно указывать к какому репозиотрию выдавать запросы, работа команд rquery и query в плане интерфейса почти одинакова, как и опции pkg-query(8).

информация из готового локального пакета:

# pkg query -F /var/cache/pkg/All/portmaster-3.13.13.txz "%n-%v origin: %o size: %sh"
portmaster-3.13.13 origin: ports-mgmt/portmaster size: 123 kB
#
или
# cd /var/cache/pkg/All
# pkg query -F trafshow-5.2.3_2,1.txz "%n-%v origin: %o files %Fp"
trafshow-5.2.3_2,1 origin: net/trafshow files /usr/local/bin/trafshow
trafshow-5.2.3_2,1 origin: net/trafshow files /usr/local/etc/trafshow.dist
trafshow-5.2.3_2,1 origin: net/trafshow files /usr/local/man/man1/trafshow.1.gz
#
разумеется никто не отменял использование tar для просмотра содержимого пакета:
# tar ztf /var/cache/pkg/All/ru-xcode-4.1.txz
+MANIFEST
+MTREE_DIRS
/usr/local/bin/xcode
# tar ztf /var/cache/pkg/All/pkgconf-0.8.7_2.txz
+MANIFEST
+MTREE_DIRS
/usr/local/bin/pkg-config
/usr/local/bin/pkgconf
/usr/local/share/aclocal/pkg.m4
/usr/local/share/licenses/pkgconf-0.8.7_2/BSD
/usr/local/share/licenses/pkgconf-0.8.7_2/LICENSE
/usr/local/share/licenses/pkgconf-0.8.7_2/catalog.mk
/usr/local/share/licenses/pkgconf-0.8.7_2/
/usr/local/share/licenses/
#
информация из локальной базы:

пакеты установлены с/без флага autoremove:

# pkg query -e '%a == 0' 'packages %n-%v without autoremove'
packages clamav-0.97.6 without autoremove
packages pkg-1.0 without autoremove
packages portmaster-3.13.13 without autoremove
и
# pkg query -e '%a == 1' 'packages %n-%v with autoremove'
packages arc-5.21p with autoremove
packages arj-3.10.22_4 with autoremove
packages lha-1.14i_6 with autoremove
packages libiconv-1.14 with autoremove
packages libltdl-2.4.2 with autoremove
packages unzoo-4.4_2 with autoremove
#
обычный форматный вывод, по заданному шаблону:
# pkg query "%o version %v :  %c " clamav
security/clamav version 0.97.6 :  Command line virus scanner written entirely in C 
# pkg query "%C" clamav  (к какой категории портов относится)
 security
# pkg query "%Fp" clamav (выдать список содержимого установленного пакета)
# pkg query "%D" clamav  (список директорий используемых пакетом)
/var/run/clamav/
/var/log/clamav/
/var/db/clamav/
/usr/local/share/licenses/clamav-0.97.6/
/usr/local/share/licenses/
# pkg query "%Ok %Ov" clamav (опции пакета установленные при сборке)
ARC on
ARJ on
DOCS off
EXPERIMENTAL off
ICONV on
LDAP off
LHA on
LLVM on
MILTER on
STDERR off
TESTS off
UNRAR on
UNZOO on
#
# pkg query "%n-%v use user: %U" apache22-worker-mpm     (используемый UID)
apache22-worker-mpm-2.2.22_8 use user: www
# pkg query "%n-%v use user: %G" apache22-worker-mpm     (используемый GID)
apache22-worker-mpm-2.2.22_8 use user: www
# pkg query "%n-%v use shared libs %B" имя   (используемые дин-кие libs)
показать зависимости пакета:
# pkg query "pkg depends on %do %dv" clamav
pkg depends on archivers/arc 5.21p
pkg depends on archivers/arj 3.10.22_4
pkg depends on archivers/lha 1.14i_6
pkg depends on converters/libiconv 1.14
pkg depends on devel/libltdl 2.4.2
pkg depends on archivers/unzoo 4.4_2
#
показать какие пакеты требуют данный:
# pkg query "pkg %n required by %ro %rv" apr
pkg apr required by www/apache22-worker-mpm 2.2.22_8
#
выражения в query используются так же как и в rquery, только чуть больше переменных можно использовать.

примеры выражений в query:

# pkg query -e '%a == 0' '%n-%v'
# pkg query -e '%a == 1' '%n-%v'
# pkg query -e '%a == 0 && %#d==0 ' %o
ports-mgmt/pkg
ports-mgmt/portmaster
# pkg query -e '%a == 0 && %#r==0 ' %o
www/apache22-worker-mpm
security/clamav
ports-mgmt/pkg
ports-mgmt/portmaster
#
по аналогии с portmaster'ом показать root,trunk,branch и leaf пакеты:

root пакеты (не являются зависимостями и сами не имеют зависимостей):

# pkg query -e "%#d = 0 && %#r = 0" "%n-%v"
trunk пакеты (не являются зависимостями, но сами имеют зависимости):
# pkg query -e "%#d = 0 && %#r > 0" "%n-%v"
branch пакеты (являются зависимостями и сами имеют зависимости):
# pkg query -e "%#d > 0 && %#r > 0" "%n-%v"
leaf пакеты (являются зависимостями, но сами не имеют зависимостей):
# pkg query -e "%#d > 0 && %#r = 0" "%n-%v"

Использование встроенного help или man

Тут расписывать нечего, полностью прозрачная ситуация

# pkg help
# pkg help  - вызовет man pkg-command
или
# man pkg-command

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

Поиск требуемых пакетов PKG SEARCH

формат:
     pkg search pkg-name
     pkg search [-fDsqop] pkg-name
     pkg search [-gexXcdfDsqop] pattern
примеры:
# pkg search www/apache22
# pkg search misc/mc
# pkg search -x "^mc-*$"  (-x поиск по regexp)
# pkg search -x "^mc-*"

# pkg search -g "?c"      (-g поиск по shell global match)
# pkg search -g "l?m*"
# pkg search -g "[0-z]*"  (-g поиск по shell global match - все пакеты)
# pkg search -g "[0-z]*" | sort -k 1,1 (показать все с сортировкой)

Информация с удаленного репозитория PKG RQUERY

формат:
     pkg rquery  
     pkg rquery [-a] [-r reponame] 
     pkg rquery -e  [-r reponame] 
     pkg rquery [-gxX] [-r reponame] <query-format> <pattern> <...>
часто используемая форма команды:
# pkg rquery "шаблон" pkgname
часто используемые шаблоны:
     %d  - зависимоть порта/пакета от других
     %r  - другие зависят от данного порта/пакета
     %?d - 0/1 наличие зависимостей порта/пакета от других
     %?r - 0/1 наличие портов/пакетов которые зависят от указанного
показать все пакеты удаленного репозитория:
# pkg rquery -a "package: %n-%v"
# pkg rquery -a "package: %n-%v - %c" (с комментарием)
# pkg rquery -a "package: %n-%v size: %sh - %c" (размер + комментарий)
посмотреть от каких портов зависит gtar и mc:
# pkg rquery "tar depends %?d" gtar (0 - нет зависимостей, 1 - есть)
# pkg rquery "rar depends %?d" archivers/rar

# pkg rquery "rar depends %do %dv" archivers/rar
# pkg rquery "rar depends %do %dv" rar
# pkg rquery "gtar depends %do %dv" gtar
# pkg rquery "gtar depends %do %dv" archivers/gtar

# pkg rquery "mc depends %do %dv" misc/mc

# pkg rquery "pkg %n-%v require next deps: %dn-%dv" bash-4.2.37
посмотреть какие порты требуют gtar и mc:
# pkg rquery "tar depends %?r" gtar (0 - нет зависимостей, 1 - есть)
# pkg rquery "tar depends %?r" archivers/rar

# pkg rquery "tar depends %ro %rv" misc/mc
# pkg rquery "pkg %n-%v needs for next packages: %rn-%rv" bash-4.2.37

Установка пакета(ов) с локального или удаленного источника PKG ADD

формат:
     pkg add <pkg-name>
     pkg add <protocol>:/path/pkg-name
команда простая, и в отличие от pkg install, устанавливает отдельные пакеты с файловой системы, по http или ftp без участия удаленного репозитория.
# pkg add /path/to/packages/foo-1.2.3.txz (установка локального пакета foo...)
# pkg add http://example.org/pkgng-repo/foo-1.2.3.txz
# pkg add  ftp://example.org/pkgng-repo/foo-1.2.3.txz
(установка пакета foo-1.2.3.txz по ftp/http с удаленного репозитория)

Установка пакета(ов) из репозитория PKG INSTALL

формат:
     pkg install [-AfgLnqRXxy] [-r reponame] <pkg-origin> ...
самые простые и распространенные случаи, установка по короткому имени, установка по pkg-origin: category/portname, интерактивные и пакетная установка с -y.
# pkg install www/apach22
# pkg install archivers/rar
# pkg install mc
# pkg install -y misc/mc
(опция -y == переменной среды или pkg.conf: ASSUME_ALWAYS_YES )
# pkg install -y -r repo1 audio/mpg123
апгрейд заданного пакета осуществляется опцией: -f
# pkg install -f пакет

# pkg install -fy archivers/rar (принудительно переустановить если уже есть)
если со временем название пакетов звисимостей изменилось, а нам нужны пакеты в актуальном состоянии (или для последующего апгрейда) делают так:

# pkg set -o graphics/libglut:graphics/freeglut (заменили libglut на freeglut)
# pkg install -Rf graphics/freeglut (установили freeglut и все что от него зависит)
или пример с обновлением ветки emacs, создали новый порт editors/emacs и оставили старый как editors/emacs23, который мы хотим оставить, но установлен он у нас был как editors/emacs, выполняем:
# pkg set -o editors/emacs:editors/emacs23
устанавливаем без апдейта удаленного репозитория, только через локальный -L
# pkg install -yL rar-4.1.1,3 unrar-4.20,5
если мы хотим установить пакет который имеет зависимости и впоследствии удалить его разом с зависимостями, его можно установить с пометкой как orphan(сирота) опция -A
# pkg install -yAfL mc-4.8.1.1_1
решили удалить его махом вместе с зависимостями - autoremove:
# pkg autoremove -y
посмотреть какие пакеты были установлены с флагом autoremove:
# pkg query -a "installed package %o %v has autoremove flag = %a"
или
# pkg query -a "installed package %n-%v has autoremove flag = %a"

Запросы к локальному репозиторию PKG QUIERY

формат:
     pkg query <query-format> <pkg-name>
     pkg query [-a] <query-format>
     pkg query -F <pkg-name> <query-format>
     pkg query -e <evaluation-condition> <query-format>
     pkg query [-gxX] <query-format> <pattern> <...>
pkg query - всегда требуется задание формата <query-format>!
# pkg query "%Fp %Fs %sh" portmaster-3.13.13

# pkg query " %n-%v \n ports: %o\n desc: %c\n home: %w\n pkg size: %sh" portmaster-3.13.13
запросить информацию о динамических библиотеках пакета:
# pkg query %Fp имя_пакета | grep -E '/lib[^/]+\.so\.[0-9]+$'
Внимание: показывается информация о динамических библиотеках пакета, а не от каких динамических библиотеках зависит данный пакет!
показать информацию о всех пакетах БЕЗ и C autoremove флагом:
# pkg query -e '%a == 0' '%n-%v'
и
# pkg query -e '%a == 1' '%o'
показать все пакеты больше 50MB:
# pkg query -e "%s > 50000000" "%n-%v is bigger than 50MB: %sh"
python27-2.7.3_3 is bigger than 50MB: 67 MB
#
показать все пакеты больше 50MB и были установлены автоматически:
# pkg query -e "%s > 50000000 && %a == 1" "%n-%v is bigger than 50MB: %sh and has been automatically installed"

Аудит установленных пакетов PKG AUDIT, проверка на возможное наличие уязвимостей данного пакета

формат:
     pkg audit [-Fq] 
Команда простая, использует аудит-сайт, адрес которого можно определять переменной PORTAUDIT_SITE, для проверки наличия возможных уязвимостей и выдает отчет со ссылками и рекомендациями:
# pkg audit perl-5.14.2_2
# pkg audit -F perl-5.14.2_2 (обновить базу перед проверкой)
Для тех кто не знает, откройте для себя аудит сайт FreeBSD

Изменение информации в базе установленных пакетов PKG SET

формат:
  pkg set [-a] [-A [01]] [-o <oldorigin>:<neworigin>] [-y] [-xXg] <pkg-name>
Внимание: Данная команда требует осторожного и осмысленного использования!
# pkg set -o devel/pkg-config:devel/pkgconf
# pkg set -o graphics/libglut:graphics/freeglut
установить флаг autoremove для заданного пакета:
# pkg set -A 1 mc-4.8.1.1_1
снять флаг autoremove:
# pkg set -A 0 mc-4.8.1.1_1 

Информация по установленным пакетам PKG INFO

формат:
     pkg info <pkg-name>
     pkg info -a
     pkg info [-eDgxXEdrlsqopOfRF] <pkg-name>
     pkg info [-drlsq] -F <pkg-name>
Данная команда позволяет получить разнообразные сведения по всем пакетам или конкретно заданному.
# pkg info
deco-3.9_4                     Demos Commander, a free Norton Commander clone
pkg-1.0                        New generation package manager
portmaster-3.13.13             Manage your ports without external databases or languages
опция -a - показать все установленные пакеты
# pkg info -a 
deco-3.9_4                     Demos Commander, a free Norton Commander clone
pkg-1.0                        New generation package manager
portmaster-3.13.13             Manage your ports without external databases or languages
#
информация по указанному пакету:
# pkg info deco 
deco-3.9_4                     Demos Commander, a free Norton Commander clone
#
полная информация по указанному пакету
# pkg info -f deco
Name           : deco
Version        : 3.9_4
Origin         : misc/deco
Prefix         : /usr/local
Categories     : misc
Maintainer     : ports@FreeBSD.org
WWW            : http://deco.sourceforge.net/
Comment        : Demos Commander, a free Norton Commander clone
Flat size      : 159 kB
Description    : 
A clone of Norton Commander for Unix.  Text-based,
full featured file manager intuitive interface.

WWW: http://deco.sourceforge.net/
#
показать pkg-message - опция -D
# pkg info -D pkg
If you are upgrading from the old package format, first run:

  # pkg2ng
# pkg info -d png-1.5.12
png-1.5.12 depends on:
#
информация по короткому и полному имени пакета
# pkg info -d mc или (pkg info -d mc-4.8.1.1_1) 
mc-4.8.1.1_1 depends on:
gamin-0.1.10_4
gettext-0.18.1.1
gio-fam-backend-2.28.8_1
glib-2.28.8_4
libiconv-1.14
libslang2-2.2.4_3
pcre-8.31
perl-5.14.2_2
pkgconf-0.8.5
png-1.5.12
python27-2.7.3_3
#
показать каким пакетам требуется указанный
# pkg info -r perl-5.14.2_2
perl-5.14.2_2 is required by:
glib-2.28.8_4
gamin-0.1.10_4
gio-fam-backend-2.28.8_1
mc-4.8.1.1_1

# pkg info -r python27-2.7.3_3
python27-2.7.3_3 is required by:
glib-2.28.8_4
gamin-0.1.10_4
gio-fam-backend-2.28.8_1
mc-4.8.1.1_1
#
посмотреть динамические библиотеки установленные с пакетом:
# pkg info -B pkg
Внимание: показывается информация о динамических библиотеках пакета, а не от каких динамических библиотеках зависит данный пакет!
На данный момент, реальное использование этой команды, практически не имеет смысла, требует установленной переменной SHLIBS : YES в pkg.conf до начала работы с пакетным менеджером. По умолчанию опция имеет статус off, пока считается разработчиками сырой и опасной.

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

формат:
     pkg delete [-fgnqRXxy] <pkg-name> ...
     pkg delete [-nqy] -a
наиболее используемые опции команды:
  -a - удалить все установленные пакеты и очистить локальную базу
  -f - принудительно удалить пакет/ы невзирая на оставшиеся неразрешенные зависимости
  -n - пробный режим, в реалии ничего не делать, показать какие будут действия
  -R - удалить все пакеты которые требуют заданные в списке на удаление
  -q - принудительно использовать удаление без диагностических сообщений,
       исключение при использовании опции -n
примеры:
# pkg delete rar
# pkg delete -y rar

# pkg delete -y rar unrar
# pkg delete -x ".*rar$" (удаление с использованием regexp)

Отчет по версиям установленных пакетов PKG VERSION

формат:
     pkg version [-IPR] [-hoqv] [-l limchar] [-L limchar] [-Xxge pattern]
         [-r reponame] [-O origin] [index]
     pkg version -t version1 version2
     pkg version -T <pkgname> <pattern>
если существует дерево портов, то оно используется для сравнения с версиями установленных пакетов посредством pkg version
# pkg version -P    (использовать дерево портов для сравнения с пакетами)
deco-3.9_4                         =
pkg-1.0                            =
portmaster-3.13.13                 =
#

# pkg version -R    (использовать репозиторий для определения out of date pkg)
deco-3.9_4                         =
pkg-1.0                            >
portmaster-3.13.13                 =
#

# pkg version -vRL=  
pkg-1.0                            >   succeeds remote (remote has 1.0.r5_1)
# pkg version -vRL\<
deco-3.9_4                         =   up-to-date with remote
pkg-1.0                            >   succeeds remote (remote has 1.0.r5_1)
portmaster-3.13.13                 =   up-to-date with remote
# pkg version -vRL\>
deco-3.9_4                         =   up-to-date with remote
portmaster-3.13.13                 =   up-to-date with remote
#

Проверка целостности установленных пакетов PKG CHECK

формат:
     pkg check [-Bdsr] [-vy] [-a | -gxX <pkg-name>]
Простая и прозрачная команда, наиболее используемые опции:
-B - анализ SHLIBS установленных пакетов
-d - проверка на отсутствие зависимостей
-r - пересчитать размер и checksums
-s - найти неверные checksums
-v - verbose (использовать чтобы увидеть реально работу)
-a - для всех пакетов
Без опции -v исключительно молчаливая команда! примеры:
# pkg check -sv cvsup-mirror
Checking checksums: cvsup-mirror
cvsup-mirror-1.3_8: checksum mismatch for /usr/local/etc/cvsup/update.sh
# pkg check -sv trafshow
Checking checksums: trafshow
# pkg check -dv apache22-worker-mpm
Checking dependencies: apache22-worker-mpm
поиск принадлежности файла пакету:

Поиск принадлежности файла пакету PKG WHICH

формат:
     pkg which [-qo] <file>
опции:
-q - без вывода сообщений
-o - показать origin вместо name-version
Исключительно простая и прозрачная команда, по указанному пути и имени файла, сообщает какому пакету он принадлежит.
# pkg which /usr/local/bin/gdbus
/usr/local/bin/gdbus was installed by package glib-2.28.8_4
# pkg which /usr/local/bin/idle 
/usr/local/bin/idle was installed by package python27-2.7.3_3
# pkg which -o /usr/local/bin/idle
/usr/local/bin/idle was installed by package lang/python27
#

Обратиться к удаленному репозиотрию и обновить локальные данные PKG UPDATE

формат:
     pkg update [-fq]
Поностью прозрачная команда.
Отметим, что апдейт локального кеша удаленного репозитория производится всегда, при выполнении практически любой команды pkg, если не задана опция -L (теперь понятно ее использование).
# pkg update
Updating repository catalogue
repo.txz                            100%   13MB   4.3MB/s   3.9MB/s   00:03    
#
# pkg update -f (принудительно полностью скачать удаленный репозиторий
и обновить локальный без сравнения на свежесть локального с удаленным)

Выполнить апгрейд установленных пакетов PKG UPGRADE

формат:
     pkg upgrade [-fLnqy] [-r reponame]
Внимание: Не используйте опцию -y, если не уверены в правильности своих действий! Так как апгрейд относится ко всем локальным пакетам версии которых ниже чем на удаленном репозиотрии.
# pkg upgrade -f   (принудительный апгрейд всех пакетов)
# pkg upgrade -yf
# pkg upgrade -yfL (принудительный апгрейд всех пакетов без обновления репозитория)
по умолчанию pkg upgrade сначала обновляет репозиторий (pkg update), затем производит апгрейд всех пакетов.
# pkg upgrade -n   (посмотреть без реального выполнения апгрейда)
Важно: не путать с индивидуальным апгрейдом пакета, который производится:
      # pkg install -yfR mc-4.8.1.1_1
      # pkg install -yfRL mc-4.8.1.1_1

Статистика локального и удаленного репозитория PKG STATS

формат:
     pkg stats [-qlr]
Без комментариев:
# pkg stats
Local package database:
        Installed packages: 3
        Disk space occupied: 6932 kB

Remote package database(s):
        Number of repositories: 1
        Packages available: 22212
        Unique packages: 22212
        Total size of packages: 96 GB
# pkg stats -l (статистика только по локальной копии репозитория)
# pkg stats -r (статистика только по удаленному репозиторию)

Скачать пакет и его зависимости с удаленного репозитория PKG FETCH

формат:
     pkg fetch [-r reponame] [-yqgxXadL] <pkg-name> [...]
Просто скачать пакеты с удаленного репозитория.
# pkg fetch -a                  (скачать все пакеты)
# pkg fetch -yL bash-4.2.37
# pkg fetch -yd clamav-0.97.5_1 (скачать clamav и все пакеты от которых он зависит)
пакеты будут сохранены в PKG_CACHEDIR: /var/cache/pkg/All/

Создание пакетов для дальнейшего использования PKG CREATE

формат:
     pkg create [-n] [-f format] [-o outdir] [-p plist] [-r rootdir] -m
         manifestdir
     pkg create [-gnxX] [-f format] [-o outdir] [-r rootdir] pkg-name ...
     pkg create [-n] [-f format] [-o outdir] [-r rootdir] -a
создание пакетов в формате pkgng из всех ранее установленных в системе портов или пакетов и сохранение их в /usr/ports/packages/All:
# pkg create -a -o /usr/ports/packages/All
создание одного пакета с именем packagename в формате pkgng из уже установленных:
# pkg create -o /usr/ports/packages/All packagename

Очистка локального кеша данных об удаленных пакетах которые out-of-date и больше не сопровождаются PKG CLEAN

Заголовок большой, а расписывать нечего.
# pkg clean
наверное самая простая и короткая команда.

Создание репозитория PKG REPO

формат:
     pkg repo [-fq]  [rsa-key]
пример создания собственного локального репозитория из всех установленных у нас пакетов:
# cd /scratch/huge_free_space
# pkg create -a
# pkg repo .
теперь можем использовать собственный репозиторий для установки используя: pkg add/install

Регистрация уже установленных пакетов или портов в локальной базе PKG REGISTER

формат:
      pkg register [-ld] -f <plist-file> -m <metadatadir> -i <input-path>
-l - задать что данный пакет будет регистрироваться в базе как устаревший,
     в старом формате 
-d - пометить зарегистрированный пакет как orphan
-f plist-file  - задать файл содержащий список устанавливаемых пакетом файлов
-m metadatadir - указать директорию с метаданными для регистрации пакета
-i input-path  - указать путь к пакету 
Данную команду использует утилита преобразования пакетов из старого формата в новый pkg2ng, в виде:
  pkg register -l -m ${MDIR} -f ${PLIST} ${CMD_ARGS}

Показать какие пакеты слинкованы со специфичными shared library PKG SHLIB

формат:
     pkg shlib <library>
Внимание: Чтобы эта команда и pkg info -B работали и показывали информацию по динамическим библиотеками, необходимо до установки пакетов, определить переменную SHLIBS : YES в файле конфигурации pkg.conf
# pkg shlib libpkg.so.0
libpkg.so.0 is linked to by the folowing packages:
pkg-1.0
#
динамическая библиотека задается без пути но включая версию ABI, при поиске используется точное соответствие.
Примеры:
# pkg shlib libapr-1.so.4
libapr-1.so.4 is linked to by the folowing packages:
apache22-worker-mpm-2.2.22_8
apr-1.4.6.1.4.1_1
#
# pkg info -B mc 
mc-4.8.1.4_1 uses the following shared libraries:
libslang.so.2
libpcre.so.1
libintl.so.9
libiconv.so.3
libglib-2.0.so.0
#

Backup и восстановление локальной базы пакетов PKG BACKUP

формат:
     pkg backup -d 
     pkg backup -r 
простая и понятная команда:
# pkg backup -d /var/tmp/pkgng_db.dump
# pkg backup -r /var/tmp/pkgng_db.dump

Взаимодействие с базами данных PKG SHELL

формат:
     pkg shell
pkg shell - предоставляет доступ к локальной и удаленной базе данных через консоль sqlite, например:
# echo 'select * from packages;' | pkg shell
# echo 'select origin,name,version,comment from packages;' | pkg shell
показать какие есть базы:
# echo '.databases' | pkg shell
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /var/db/pkg/local.sqlite                                  
какие есть таблицы:
# echo '.tables' | pkg shell
categories       licenses         pkg_directories  scripts        
deps             mtree            pkg_groups       shlibs         
directories      options          pkg_licenses     users          
files            packages         pkg_shlibs     
groups           pkg_categories   pkg_users      
схему таблицы:
# echo '.schema packages' | pkg shell
CREATE TABLE packages (id INTEGER PRIMARY KEY,origin TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,version TEXT NOT NULL,comment TEXT NOT NULL,
desc TEXT NOT NULL,mtree_id INTEGER REFERENCES mtree(id) ON DELETE RESTRICT
ON UPDATE CASCADE,message TEXT,arch TEXT NOT NULL,maintainer TEXT NOT NULL,
www TEXT,prefix TEXT NOT NULL,flatsize INTEGER NOT NULL,
automatic INTEGER NOT NULL,licenselogic INTEGER NOT NULL,
infos TEXT, time INTEGER, pkg_format_version INTEGER);
#

Примечание: Если у вас возникли вопросы, желание расширить, уточнить, исправить, дополнить, скачать или использовать данную заметку - пожалуйста, я буду только рад если кому-то она оказалась полезной.

Андрей Лаврентьев