Не секрет что отсутствие в OS FreeBSD современного пакетного менеджера тормозит и сдерживает не только систему работы с портами, но и развитие системы в целом.
Несомненно старый пакетный менеджер, написанный на СИ Джорданом Хаббардом, был революционным шагом в начале 90'ых, легкий, быстрый, надежный и простой.
Но современные условия выдвигают новые требования, что и послужило толчком для создания нового пакетного менеджера и дабы прекратить споры и разногласия среди разработчиков и сообщества FreeBSD, которые ведутся на протяжении, примерно 10 лет или больше.
Если кто-то решит что за это время можно было разработать несколько пакетных менеджеров, удовлетворяющих современным требованиям и тенденциям, возможно, но в рамках концепции развития проекта FreeBSD это, к сожалению, не так.
Прим: данное описание не претендует на серьезное руководство и может содержать повторы, точнее выжимки ранее изложенного в стиле "коротко"
Цель - показать на примерах как лучше и удобней пользоваться новым пакетным менеджером PKGNG.
Коротко о достижения пакетного менеджера PKGNG:
- использование db для регистрации и хранения данных об установленных пакетах (sqlite)
- использование одного или нескольких репозиториев
- использование yaml для описания пакета
- интерфейс для сторонних порт менеджеров
- создание backup и отката
- аудит
- и тд и тп
Третичный софт поддерживающий работу с новым пакетным менеджером pkgng
"из коробки":- ports-mgmt/portmaster
- ports-mgmt/portupgrade-devel
- ports-mgmt/portupgrade
- ports-mgmt/pkg_cutleaves
- ports-mgmt/poudriere
- ports-mgmt/poudriere-devel
- ports-mgmt/portdowngrade
- ports-mgmt/tinderbox-devel
- ports-mgmt/portbuilder
- sysutils/bsdstats
инструментарий который будет или уже поддерживает работу с pkgng:
Напоминание чтобы не возникало вопросов у новичков FreeBSD.
В базовую систему FreeBSD входит пакетный менеджер pkg_install, это старый пакетный менеджер, который сыграл свою роль и будет заменен на новый, в его состав входят утилиты работы с пакетами:в sources он находится в:
- /usr/sbin/pkg_add
- /usr/sbin/pkg_create
- /usr/sbin/pkg_delete
- /usr/sbin/pkg_info
- /usr/sbin/pkg_updating
- /usr/sbin/pkg_version
# 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 существуют:- система портов (позволяет собирать пакеты из исходных текстов/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 из пакетов или из порта:# /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 или менеджеров портов использующих новый пакетный менеджер.
Их можно просто удалить.
Все готово для использования нового пакетного менеджера.
-------------------------- /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 - задать репозиторий который будет использоваться
-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в выражениях evaluation-condition можно использовать переменные:# pkg query -e
- %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 - всегда требуется задание форматаинформация из готового локального пакета:
# 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 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]+$'
Внимание: показывается информация о динамических библиотеках пакета, а не от каких динамических библиотеках зависит данный пакет!
# 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
- http://portaudit.FreeBSD.org/
- Переменная PORTAUDIT_SITE задается через URL: http://portaudit.FreeBSD.org/auditfile.tbz
Изменение информации в базе установленных пакетов 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);
#
За статью спасибо Андрею Лаврентьеву (lavr@unix1.jinr.ru)