Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программы

Пакетный менеджер PKGNG

  • Коротко о достижения пакетного менеджера PKGNG
  • Третичный софт поддерживающий работу с новым пакетным менеджером pkgng
  • Напоминание, чтобы не возникало вопросов у новичков FreeBSD
  • Порты и пакеты системы FreeBSD
  • Использование PKG
  • Установка PKGNG
  • Первичные настройки pkg
  • Какие пакеты есть на удаленном репозитории?
  • Установка пакетов из репозитория
  • Добавление отдельных пакетов
  • Запросы к локальному репозиторию
  • Поиск требуемых пакетов PKG SEARCH
  • Информация с удаленного репозитория PKG RQUERY
  • Установка пакета(ов) с локального или удаленного источника PKG ADD
  • Установка пакета(ов) из репозитория PKG INSTALL
  • Запросы к локальному репозиторию PKG QUERY
  • Аудит установленных пакетов PKG AUDIT, проверка на возможное наличие уязвимостей данного пакета
  • Информация по установленным пакетам PKG INFO
  • Удаление пакетов PKG DELETE
  • Отчет по версиям установленных пакетов PKG VERSION
  • Проверка целостности установленных пакетов PKG CHECK
  • Поиск принадлежности файла пакету PKG WHICH
  • Обратиться к удаленному репозиотрию и обновить локальные данные PKG UPDATE
  • Выполнить апгрейд установленных пакетов PKG UPGRADE
  • Статистика локального и удаленного репозитория PKG STATS
  • Скачать пакет и его зависимости с удаленного репозитория PKG FETCH
  • Создание пакетов для дальнейшего использования PKG CREATE
  • Очистка локального кеша данных об удаленных пакетах которые out-of-date и больше не сопровождаются PKG CLEAN
  • Создание репозитория PKG REPO
  • Регистрация уже установленных пакетов или портов в локальной базе PKG REGISTER
  • Показать какие пакеты слинкованы со специфичными shared library PKG SHLIB
  • Backup и восстановление локальной базы пакетов PKG BACKUP
  • Взаимодействие с базами данных PKG SHELL
  • Ссылки
  • Пакетный менеджер PKGNG - новый этап в развитии системы FreeBSD.

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

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

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

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

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

    • использование db для регистрации и хранения данных об установленных пакетах (sqlite)
    • использование одного или нескольких репозиториев
    • использование yaml для описания пакета
    • интерфейс для сторонних порт менеджеров
    • создание backup и отката
    • аудит
    • и т.д. и т.п.

    Третичный софт поддерживающий работу с новым пакетным менеджером 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

    В ближайшем будущем, планируется ввести в базовую систему, новый пакетный менеджер PKGNG, в 9.1-RELEASE FreeBSD это сделать не успели, но уже начиная с 9-Stable, в системе находится пусковик:

    # ls -la /usr/sbin/pkg
    который выполняет процесс Bootsrapping - установку нового пакетного менеджера из портов:
    # cd /usr/ports/ports-mgmt/pkg
    Примечание: во избежание путаницы - PKGNG название проекта и означает PacKet management New или Next (в разных источниках по разному) Generation.

    Сама же утилита - pkg.

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

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

    • система портов (позволяет собирать пакеты из исходных текстов/sources);
    • пакетный менеджер, который используется для установки уже готовых, ранее собранных пакетов при помощи портов.

    Пакетный менеджер - оперирует только с готовыми бинарными пакетами и включен в базовую систему.
    В отличие от пакетного менеджера, базовая система 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 из пакетов или из порта:

    # cd /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, каждая из которых соответствует
    • локальному: local.sqlite
    • удаленному: repo.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 [oldorigin:neworigin] меняем старую зависимость на новую
    • pkg install -fR category/name - переустанавливаем пакет name и рекурсивно все пакеты которые о него зависят (-R - переустановить все пакеты которые зависят от устанвливаемого)
    # 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 QUERY

    формат:
         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_version):

    # pkg version -v -l "<"
    apache22-2.2.26                    <   needs updating (port has 2.2.27_2)
    

    Проверка целостности установленных пакетов 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);
    

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

    Ссылки:

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

    На странице использованы материалы: http://unix1.jinr.ru/~lavr/pkgng.html

    Главная > Программы