Пакетный менеджер PKGNG - новый этап в развитии системы FreeBSD.
Не секрет что отсутствие в OS FreeBSD современного пакетного менеджера
тормозит и сдерживает не только систему работы с портами, но и развитие
системы в целом.
Несомненно старый пакетный менеджер, написанный на СИ Джорданом Хаббардом,
был революционным шагом в начале 90'ых, легкий, быстрый, надежный и простой.
Но современные условия выдвигают новые требования, что и послужило
толчком для создания нового пакетного менеджера и дабы прекратить споры
и разногласия среди разработчиков и сообщества FreeBSD, которые
ведутся на протяжении, примерно 10 лет или больше.
Если кто-то решит что за это время можно было разработать несколько
пакетных менеджеров, удовлетворяющих современным требованиям и
тенденциям, возможно, но в рамках концепции развития проекта FreeBSD
это, к сожалению, не так.
Примечание: данное описание не претендует на серьезное руководство и может
содержать повторы, точнее выжимки ранее изложенного в стиле "коротко".
Цель - показать на примерах как лучше и удобней пользоваться новым пакетным менеджером PKGNG.
В базовую систему 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.
Для работы с третичным программным обеспечением, в OS FreeBSD существуют:
система портов (позволяет собирать пакеты из исходных текстов/sources);
пакетный менеджер, который используется для установки уже готовых, ранее собранных пакетов при помощи портов.
Пакетный менеджер - оперирует только с готовыми бинарными пакетами и включен в базовую систему.
В отличие от пакетного менеджера, базовая система FreeBSD не содержит менеджера портов, тем не менее, в
портах существует достаточное их количество.
Советую перед переходом на PKGNG, сделать backup /var/db/pkg, невзирая на то, что pkgng, напомнит
вам об этом и посоветует запустить специальный скрипт pkg2ng для преобразования в новый формат и который
сделает backup старого формата.
#/usr/sbin/pkgThe 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"
была произведена установка и выдано сообщение о том что если у нас установлены
пакеты в старом формате и если система "не чистая", необходимо запустить:
можно сделать вывод о том, что в качестве пакетного менеджера используется pkg, ибо в директории находится только
один файл distfiles. Такие шаблоны обычно остаются
после выполнения pkg2ng или менеджеров портов использующих новый пакетный менеджер. Их можно просто удалить.
Для последующего использования пакетного менеджера pkg, необходимо
добавить переменную WITH_PKGNG=yes в /etc/make.conf.
Все готово для использования нового пакетного менеджера.
Наиболее важные и общеупотребительные настройки, лучше задавать в конфигурационном файле.
Настройки в файле /usr/local/etc/pkg.conf, могут быть переустановлены аналогичными
переменными среды на момент выполнения:
-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 -v1.0
информация по установленным пакетам:
#pkg infopkg-1.0 New generation package manager
информация по всем установленным пакетам:
#pkg info -apkg-1.0 New generation package manager
portmaster-3.13.13 Manage your ports without external databases or languages
полная информация по пакету:
#pkg info -f portmasterName : 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 portmasterportmaster-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-mpmapache22-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 aprapr-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" | less0verkill-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
посчитаем количество пакетов, хотя при запросе к удаленному репозиторию,
об этом сообщается:
выражения могут объединяться: && (и) , || (или) и группироваться используя круглые скобки ()
в шаблон запросе - <query-format> в котором можно использовать
%n - вывести имя пакета
%v - версия пакета
%o - источник пакет (это категория/имя из порта)
%p - префикс
%m - maintainer (сопроваждающий) пакет
%s[bh] - размер пакета, b - в байтах, h - в удобном формате
%M - pkg-message пакета
%?[drCOLB] - полезный шаблон, вернет "0" если список пуст, иначе "1"
d - есть ли у заданного пакета зависимости
r - зависят ли другие пакеты от заданного
B - зависимость от динамических библиотек в заданном пакете
например:
показать все пакеты удаленного репозитория с именами по
шаблону [0-2]*
#pkg install rarUpdating 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_4The 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/trafshowUpdating 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/nmapUpdating 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 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/nmapThe 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/coreutilsThe 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/clamavUpdating 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 -yPackages 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 >=====================================
#pkg add http://unix1.jinr.ru/~lavr/pkgng/lynx-2.8.7.2,1.txzlynx-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 info, rquery, install, add - позволили нам найти что нужно на удаленном
репозитории и установить или проапгрейдить пакеты, приступим к получению
информации с локальной базы уже установленных пакетов:
pkg query - всегда требуется задание формата как и rquery,
за исключением того что в rquery можно указывать к какому репозиотрию
выдавать запросы, работа команд rquery и query в плане интерфейса почти
одинакова, как и опции pkg-query(8).
#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 " clamavsecurity/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" clamavpkg 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" aprpkg apr required by www/apache22-worker-mpm 2.2.22_8
выражения в query используются так же как и в rquery, только чуть
больше переменных можно использовать.
%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" (размер + комментарий)
самые простые и распространенные случаи, установка по короткому имени,
установка по pkg-origin: category/portname,
интерактивные и пакетная установка с -y.
(опция -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"
Команда простая, использует аудит-сайт, адрес которого можно определять
переменной PORTAUDIT_SITE, для проверки наличия возможных
уязвимостей и выдает отчет со ссылками и рекомендациями:
формат:
pkg info <pkg-name>
pkg info -a
pkg info [-eDgxXEdrlsqopOfRF] <pkg-name>
pkg info [-drlsq] -F <pkg-name>
Данная команда позволяет получить разнообразные сведения по всем пакетам или
конкретно заданному.
#pkg infodeco-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 -adeco-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 decodeco-3.9_4 Demos Commander, a free Norton Commander clone
полная информация по указанному пакету
#pkg info -f decoName : 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 pkgIf you are upgrading from the old package format, first run:
# pkg2ng
#pkg info -d png-1.5.12png-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_2perl-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_3python27-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 [-fgnqRXxy] <pkg-name> ...
pkg delete [-nqy] -a
наиболее используемые опции команды:
-a - удалить все установленные пакеты и очистить локальную базу
-f - принудительно удалить пакет/ы невзирая на оставшиеся неразрешенные зависимости
-n - пробный режим, в реалии ничего не делать, показать какие будут действия
-R - удалить все пакеты которые требуют заданные в списке на удаление
-q - принудительно использовать удаление без диагностических сообщений,
исключение при использовании опции -n
формат:
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)
Простая и прозрачная команда, наиболее используемые опции:
-B - анализ SHLIBS установленных пакетов
-d - проверка на отсутствие зависимостей
-r - пересчитать размер и checksums
-s - найти неверные checksums
-v - verbose (использовать чтобы увидеть реально работу)
-a - для всех пакетов
Без опции -v исключительно молчаливая команда!
примеры:
Поностью прозрачная команда. Отметим, что апдейт локального кеша удаленного
репозитория производится всегда, при выполнении практически любой команды pkg, если не задана опция -L
(теперь понятно ее использование).
Внимание:
Не используйте опцию -y, если не уверены в правильности своих действий!
Так как апгрейд относится ко всем локальным пакетам версии которых ниже чем на удаленном репозиотрии.
# pkg upgrade -f (принудительный апгрейд всех пакетов)
# pkg upgrade -yf
# pkg upgrade -yfL (принудительный апгрейд всех пакетов без обновления репозитория)
по умолчанию pkg upgrade сначала обновляет репозиторий (pkg update), затем производит апгрейд всех пакетов.
#pkg upgrade -n (посмотреть без реального выполнения апгрейда)
Важно: не путать с индивидуальным апгрейдом пакета, который производится:
-l - задать что данный пакет будет регистрироваться в базе как устаревший,
в старом формате
-d - пометить зарегистрированный пакет как orphan
-f plist-file - задать файл содержащий список устанавливаемых пакетом файлов
-m metadatadir - указать директорию с метаданными для регистрации пакета
-i input-path - указать путь к пакету
Данную команду использует утилита преобразования пакетов из старого формата
в новый pkg2ng, в виде:
Внимание:
Чтобы эта команда и pkg info -B работали и показывали
информацию по динамическим библиотеками, необходимо до установки пакетов, определить
переменную SHLIBS : YES в файле
конфигурации pkg.conf
#pkg shlib libpkg.so.0libpkg.so.0 is linked to by the folowing packages:
pkg-1.0
динамическая библиотека задается без пути но включая версию ABI, при поиске используется точное соответствие.
Примеры:
#pkg shlib libapr-1.so.4libapr-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 mcmc-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
#echo '.schema packages' | pkg shellCREATE 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);
Примечание:
Если у вас возникли вопросы, желание расширить, уточнить, исправить,
дополнить, скачать или использовать данную заметку - пожалуйста, я буду только
рад если кому-то она оказалась полезной.