Не секрет что отсутствие в OS FreeBSD современного пакетного менеджера
тормозит и сдерживает не только систему работы с портами, но и развитие
системы в целом.
Несомненно старый пакетный менеджер, написанный на СИ Джорданом Хаббардом,
был революционным шагом в начале 90'ых, легкий, быстрый, надежный и простой.Но современные условия выдвигают новые требования, что и послужило
толчком для создания нового пакетного менеджера и дабы прекратить споры
и разногласия среди разработчиков и сообщества FreeBSD, которые
ведутся на протяжении, примерно 10 лет или больше.Если кто-то решит что за это время можно было разработать несколько
пакетных менеджеров, удовлетворяющих современным требованиям и
тенденциям, возможно, но в рамках концепции развития проекта FreeBSD
это, к сожалению, не так.прим: данное описание не претендует на серьезное руководство и может
содержать повторы, точнее выжимки ранее изложенного в стиле "коротко"
Суть - показать на примерах как лучше и удобней пользоваться
новым пакетным менеджером PKGNG.Коротко о достижения пакетного менеджера PKGNG:
- использование db для регистрации и хранения данных об
установленных пакетах (sqlite)
- использование одного или нескольких репозиториев
- использование yaml для описания пакета
- интерфейс для сторонних порт менеджеров
- создание backup и отката
- аудит
- и тд и тпСсылки:
- http://wiki.freebsd.org/pkgng
- http://wiki.freebsd.org/PkgPrimer
- https://github.com/pkgng/pkgng/blob/master/FAQ.md
- http://people.freebsd.org/~bapt/pres-pkgng-bsdcan.pdf
- http://www.youtube.com/watch?v=4Hxq7AHZ27I
- http://wiki.freebsd.org/pkgng
- http://wiki.freebsd.org/PkgPrimer
- https://github.com/pkgng/pkgng/blob/master/FAQ.md
- http://people.freebsd.org/~bapt/pres-pkgng-bsdcan.pdf
- http://www.youtube.com/watch?v=4Hxq7AHZ27IСообщить об ошибках можно на github трекер:
- http://github.com/pkgng/pkgngТретичный софт поддерживающий работу с новым пакетным менеджером pkgng:
"из коробки":
- ports-mgmt/portupgrade-devel (soon the main portupgrade will support)
- ports-mgmt/pkg_cutleaves
- ports-mgmt/poudriere
- ports-mgmt/poudriere-devel
- ports-mgmt/portdowngrade
- ports-mgmt/tinderbox-devel (support can be improved)
- ports-mgmt/portbuilder
- sysutils/bsdstatsиспользуя патчи:
- ports-mgmt/portmaster
https://github.com/pkgng/pkgng/blob/master/ports/patch-portm...инструментарий который будет или уже поддерживает работу с pkgng:
- salt support (in version 0.10)
http://docs.saltstack.org/en/latest/ref/states/all/salt.stat...
и
http://docs.saltstack.org/en/latest/ref/modules/all/salt.mod...
- cfengine support (http://unix-heaven.org/cfengine3-freebsd-pkgng)
- puppet support: (https://github.com/xaque208/puppet-pkgng)
- ruby bindings: (https://github.com/baloo/libpkg-ruby/)
- PackageKitВ системе, начиная с 9.1 находится пусковик /usr/sbin/pkg - который
смотрит переменные PACKAGESITE,PACKAGEROOT и использует их для
задания репозитория и запускает УСТАНОВКУ pkg (Bootsrapping) из портов.Если переменные не определены, использует заданные в pkg.conf
или встренные в пусковик (/usr/src/usr.sbin/pkg/pkg.c):#define _LOCALBASE "/usr/local"
#define _PKGS_URL "http://pkgbeta.FreeBSD.org"$PACKAGESITE/Latest/pkg.txz
или
$PACKAGEROOT/latest/Latest/pkg.txz
или (pkg.conf)
packagesite: http://pkgbeta.FreeBSD.org/freebsd:9:x86:64/latest/usr/ports/ports-mgmt/pkg
для использования пакетного менеджера pkg, после его установки, необходимо
добавить переменную WITH_PKGNG=yes в /etc/make.conf.Необходимо напомнить еще одно важное событие - изменение опций сборки
в портах, точнее, создание нового фреймворка для портов - OPTIONSNG.скрипт:
/usr/ports/Tools/scripts/options2ng.sh - создает backup OPTIONS
базы портов (/var/db/ports) и конвертирует их в новый форматнапример:
сконвертировать отдельный файл:
# /usr/ports/Tools/scripts/options2ng.sh -f /tmp/make.conf
создать /tmp/optionsbackup.tar.gz и сконфертировать все OPTIONS в
/var/db/port*/options в новый формат:# /usr/ports/Tools/scripts/options2ng.sh -p
Вы можете пропустить короткое описание фреймворка OPTIONSNG
++ Немного о framework OPTIONSNG
файл KNOB в портах - устаревшая технология, которая заменена на bsd.options.desc.mk.
Ниже будет, возможно устаревшая информация основанная на материалах
конференций:новый framework для указания опций сборок портов: OptionsNG Framework
http://people.freebsd.org/~bapt/optionsng.pdf &nb... (eurobsd conf 2011)
http://people.freebsd.org/~bapt/pres-optionng.pdf (bsdcon 2012)актуальную информацию можно найти:
http://wiki.freebsd.org/Ports/Options/OptionsNG
http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-han...текущие проблемы и несовместимость:
- на текущий момент в опциях могут быть только две переменные
WITH_FOO и WITHOUT_FOO
- их значения не проверяются
- несовместимость использованияпредложение:
- простые опции (on или off)
- сложные опции: по крайней мере 1 для N
- простые: 1 и только 1 опция для N (исключительно)
- каждая опция может иметь описание
- опции maintainer'ов
- системные опции
- OPTIONS_DEFINE: port, maintainer
- OPTIONS_DEFAULT: port, maintainer
- OPTIONS_EXCLUDE: port, maintainer
- OPTIONS_OVERRIDE: break everything
- OPTIONS_SET= OPT1: user, make.conf
- OPTIONS_UNSET= OPT1: user, make.conf
- ${UNIQUENAME}_SET= OPT1 (zsh_SET) user, make.conf
- ${UNIQUENAME}_UNSET= OPT1 (zsh_SET) user, make.conf
- generic options desciptions - как это сейчас сделано в файле KNOBSсовместимость
1/ set the default global options
2/ removes any global via OPTIONS_EXCLUDE
3/ OPTIONS_DEFAULT: override previous
4/ system-wide OPTIONS_(UN)SET
5/ ${UNIQUENAME:U}_(UN)SET
6/ compatibility: /var/db/ports/${UNIQUENAME}/options
(note: usage of OPTIONS+= is deprecated)
6/ new /var/db/ports/${UNIQUENAME}/options from dialog ui
7/ automatic consistency checkпример:
OPTIONS_DEFINE= OPT1 OPT2 OPT3
OPTIONS_MULTI= GRP1 GRP2
OPTIONS_MULTI_GRP1= OPT4 OPT5
OPTIONS_MULTI_GRP2= OPT6 OPT7OPTIONS_SINGLE= SEL1
OPTIONS_SINGLE_SEL1= OPT8 OPT9 OPT10
OPTIONS_DEFAULT= OPT2 OPT3 OPT9 OPT7 OPT8 OPT4
OPTIONS_EXCLUDE= NLS DOCSOPT1_DESC= "Description of my option"
# make show-config
===> The following configuration options are available:
OPT1=off: Description of my option
OPT2=on
OPT3=on
====> Options available for the MULTI GRP1: you must choose
at least one of them
OPT4=on
OPT5=off
====> Options available for the MULTI GRP2: you must choose
at least one of them
OPT6=off
OPT7=on
====> Options available for the single SEL1: you must select
only on of them
OPT8=on
OPT9=off
OPT10=off# make pretty-print-config:
-OPT1 +OPT2 +OPT3 GRP1[ +OPT4 -OPT5 ] GRP2[ -OPT6 +OPT7 ] \
SEL1( +OPT8 +OPT9 -OPT10 )# make check-config
====> You should select one and only one options from the \
SEL1 single
*** Error code 1проверка опций в портах:
.if !empty(PORTS_OPTIONS:MOPT1)
@${ECHO_CMD} "the option OPT1 is set (aka on)"
.else
@${ECHO_CMD} "the option OPT1 is not set (aka off)"
.endif
++ Продолжение о пакетном менеджере PKGNGИтак, после установки пакетного менеджера PKGNG в систему, чтобы перейти
на его использование, необходимо добавить в /etc/make.conf:WITH_PKGNG=yes
пример вызова пусковика, который предлагает установку pkg из портов:
# pkg -v
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
#после установки из портов /usr/ports/ports-mgmt/pkg в систему и
соответствующих настроек в /etc/make.conf, если у нас в /var/db/pkg
уже находятся ранее установленные пакеты в старом формате pkg_add,
необходимо:1) лучше руками сделать backup /var/db/pkg
2) запустить pkg2ng - утилита сделает backup /var/db/pkg.bak
и сконвертит ранее установленные пакеты в новом формате pkgng:# 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
#в июле 2012 порты перевели на новый Framework OPTIONSGS, утилита pkg-config
была заменена на pkg-conf, всвязи с этими изменениями необходимо:- после апгрейда портов (/usr/ports), посмотреть внимательно
/usr/ports/UPDATING (это нужно делать регулярно при апгрейде дерева портов)
заменить pkg-cconfig на pkgconf:# portmaster -o devel/pkgconf devel/pkg-config
или
# pkg set -o devel/pkg-config:devel/pkgconf
# pkg install -f devel/pkgconfили
# pkg_delete -f pkg-config*
# cd /usr/ports/devel/pkgconf
# make install clean- для перехода на новые порты с новым Framework OPTIONSGS, перевести
флаги в /etc/make.conf для сборки портов и options в новый формат:# /usr/ports/Tools/scripts/options2ng.sh -p
(для конвертации /var/db/ports/name/options в новый формат)# /usr/ports/Tools/scripts/options2ng.sh -f /etc/make.conf
# /usr/ports/Tools/scripts/options2ng.sh -f /usr/local/etc/ports.conf
(если используем универсальный порт portsconf -> ports.conf его так же конвертируем в optionsng)если используем portmaster и планируем использовать его с pkgng,
необходимо обновить до portmaster-3.13.13 с применением патча:# wget -Y off -t 0 -c --no-check-certificate https://raw.github.com/pkgng/pkgng/
master/ports/patch-portmaster-pkgng# cp patch-portmaster-pkgng /usr/ports/ports-mgmt/portmaster/files
# make -C /usr/ports/ports-mgmt/portmaster clean deinstall reinstallпатч можно наложить прямо на уже установленную версию portmaster-3.13.13
коротко:
- первый запуск /usr/sbin/pkg (установит из портов /usr/ports/ports-mgmt/pkg)
# pkg
- создать ручной backup /var/db/pkg (старого формата pkg_add)
# cp -R /var/db/pkg /var/tmp/pkg
- запустить конвертацию старого формата packages в новый
# pkg2ng
получим backup старого /var/db/pkg -> /var/db/pkg.bak
и новые базы sqlite для каждого репозитория в формате pkg:- local.sqlite (локально установленные пакеты через pkg)
- repo.sqlite (содержимое удаленного репозитория)pkg FAQ (portmaster): https://github.com/pkgng/pkgng/blob/master/FAQ.md
до преобразования pkg2ng, выполнить:
# portmaster -L (покажет установленные пакеты)
после преобразования старой базы в базу pkg:
# portmaster -L (покажет отсутствие пакетов)
Если мы используем portmaster, необходимо его пропатчить для использования
с pkg:# wget -Y off -t 0 -c --no-check-certificate https://raw.github.com/pkgng/pkgng/master/ports/patch-portma...
# cp patch-portmaster-pkgng /usr/ports/ports-mgmt/portmaster/files
# make -C /usr/ports/ports-mgmt/portmaster clean deinstall reinstall
# echo "WITH_PKGNG=yes" >> /etc/make.confпроверка работы portmaster совместно с pkg:
# portmaster -L (должен прочитать локальную базу pkg)
++ Первичные настройки pkg:
настройки в файле /usr/local/etc/pkg.conf, аналогичные переменные в среде
перекроют настройки pkg.conf на момент выполнения:ASSUME_ALWAYS_YES : [NO|YES]
PACKAGESITE : http://pkg.freebsd.org/${ABI}/latest (сайт репозитория)
PKG_MULTIREPOS : [NO|YES] (использовать несколько репозиториев)by default:
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$" и тд и тп++ справка:
# pkg help
# pkg help <command> - вызовет man pkg-commandили
# man pkg-command
++ поиск требуемых пакетов:
формат:
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 <query-format> <pkg-name>
pkg rquery [-a] [-r reponame] <query-format>
pkg rquery -e <evaluation-condition> [-r reponame] <query-format>
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 "tar depends %?d" archivers/rar# pkg rquery "tar depends %do %dv" archivers/rar
# pkg rquery "tar depends %do %dv" rar
# pkg rquery "tar depends %do %dv" gtar
# pkg rquery "tar depends %do %dv" archivers/gtar# pkg rquery "tar 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-name>
pkg add <protocol>://<path>/<pkg-name># 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 [-AfgLnqRXxy] [-r reponame] <pkg-origin> ...
# 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 (принудительно переустановить если уже есть)
если со временем название пакетов звисимостей изменилось, а нам нужны
пакеты в актуальном состоянии (или для последующего апгрейда) делают так:a) pkg set -o [<oldorigin>:<neworigin>] меняем старую зависимость на новую
b) 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 <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 [-Fq] <pkg-name>
# pkg audit perl-5.14.2_2
# pkg audit -F perl-5.14.2_2 (скачать базу перед проверкой)аудит сайт: http://portaudit.FreeBSD.org/auditfile.tbz
++ изменение информации в базе установленных пакетов:
формат: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-name>
pkg info -a
pkg info [-eDgxXEdrlsqopOfRF] <pkg-name>
pkg info [-drlsq] -F <pkg-file># 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# pkg info -a (-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 info -D pkg (-D показать pkg-message)
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 -B pkg
++ удаление пакетов:
формат:pkg delete [-fgnqRXxy] <pkg-name> ...
pkg delete [-nqy] -a# pkg delete rar
# pkg delete -y rar# pkg delete -y rar unrar
# pkg delete -x ".*rar$" (удаление с использованием regexp)++ отчет по версиям установленных пакетов:
-----------------------------------------
формат: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# 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 [-Bdsr] [-vy] [-a | -gxX <pattern>]
# pkg check [-Bdsr] [-vy] [-a | -gxX <pattern>]
-B - анализ SHLIBS установленных пакетов
-d - проверка на отсутствие зависимостей
-r - пересчитать размер и checksums
-s - найти неверные checksums
-v - verbose (использовать чтобы увидеть реально работу)# pkg check -d или -r или -s или
++ поиск принадлежности файла пакету:
формат:pkg which [-qo] <file>
# 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 [-fq]
# pkg update -f (принудительно полностью скачать удаленный репозиторий
и обновить локальный без сравнения на свежесть локального с удаленным)++ выполнить апгрейд установленных пакетов:
формат:pkg upgrade [-fLnqy] [-r reponame]
# 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 [-qlr]
# pkg stats
Local package database:
Installed packages: 3
Disk space occupied: 6932 kBRemote 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 [-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 [-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создание пакетов в формате pkg из всех ранее установленных в системе
портов или пакетов и сохранение их в /usr/ports/packages/All:
# pkg create -a -o /usr/ports/packages/Allсоздание одного пакета в формате pkg установленных ранее из портов:
# pkg create -o /usr/ports/packages/All packagename
++ очистка локального кеша - данных об удаленных пакетах которые out-of-date и которые больше не сопровождаются:
# pkg cleanболее здесь расписывать нечего :)
++ создание репозитория:
формат:pkg repo [-fq] <repo-path> [rsa-key]
пример создания собственного локального репозитория из всех установленных
у нас пакетов:# cd /scratch/huge_free_space
# pkg create -a
# pkg repo .теперь можем использовать собственный репозиторий для установки через
pkg add/install++ регистрация уже установленных пакетов или портов в локальной базе:
формат:pkg register [-ld] -f <plist-file> -m <metadatadir> -i <input-path>
... в man'е вроде описано, но как применить непонятно...
++ посмотреть какие пакеты слинкованы со специфичными shared library:
формат:pkg shlib <library>
# pkg shlib libpkg.so.0
libpkg.so.0 is linked to by the folowing packages:
pkg-1.0
#динамическая библиотека задается без пути но включая версию ABI,
при поиске используется точное соответствие.прим: непонятно как работает, не показывает явные зависимости, при
взведенной переменной SHLIBS как в pkg.conf, так и в среде.++ dump/restore локальной базы данных:
формат:
pkg backup -d <dest_file>
pkg backup -r <src_file>прозрачная команда:
# pkg backup -d /var/tmp/pkgng_db.dump
# pkg backup -r /var/tmp/pkgng_db.dump++ взаимодействие с базами пакетов:
формат:
pkg shellpkg 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);
#URL: http://unix1.jinr.ru/~lavr/pkgng_usage.html
Обсуждается: http://www.opennet.me/tips/info/2715.shtml
+1
Lavr - спасибо снова! :)
Очень хорошая подборка информации. Спасибо!
Чем порты не устраивают?Кто гарантирует, что в пакажьщь не вкомпилён бекдор?
А где гарантия что бекдора нет в сорцах?
В сорцах есть возможность его поискать.
> В сорцах есть возможность его поискать.Ага, например, в KDE. Делов то проверить несколько сот тысяч строк кода! :)
В оформлении окон рутов немА.
И аудируемых «строк кода» получается сильно меньше.
если это будет чей то репозиторий, то да, там может быть бекдор или другая бяка, но когда ты ставишь софт с репозитория то там идет предупреждение и при этом дважды.
Дальше, я ставлю с основного репозитория FreeBSD, насколько они пишут, то у них там есть группа по безопасности, которая сначала проверяет пакадж и потом вносят в систему тех же портов или пакаджей, так что не так просто туда даже полезный софт в список снести.
а так удачи им и процветания!
я правда пошел чуть иным путем, ну ничего все работает.
В настоящем случае и сам PKGNG отсутствует в портах?А как вы поступаете, когда пакет XXX собран НЕ С ТОЙ версией JPEG или TIFF, что стоит у вас в системе?
Переустанавливаете 1500 пакаджей или просто компилите?
> В настоящем случае и сам PKGNG отсутствует в портах?я сделал установку через github https://github.com/pkgng/pkgng почитайте про установку.
> А как вы поступаете, когда пакет XXX собран НЕ С ТОЙ версией JPEG или TIFF, что стоит у вас в системе?
особо с этим не сталкивался еще, но вот я установил скайп через pbi-manager( загрузил файл skype***.pbi и установил, лeнь было через порт собирать в формате pkg ) и некоторые зависимости подтянул, а некоторые не соотвествували версиям, и работает и звук и сообщения пишу.
> Переустанавливаете 1500 пакаджей или просто компилите?
почитайте тут про pkg set
Тем, что порты - это монстрообразное, неповоротливое, не обновляемое гумно
> Тем, что порты - это монстрообразное, неповоротливое, не обновляемое гумнов монстрообразных, неповоротливых, гаменных руках.
> Тем, что порты - это монстрообразное, неповоротливое, не обновляемое гумноИ чем же, в вашем воображении, порты отличаются от актуальной версии исходного кода?
> И чем же, в вашем воображении, порты отличаются от актуальной версии исходного
> кода?Глобально ни чем, разве что портами удобнее пользоваться.
Я про другое писал: что порты, что установка софта из исходно кода - зло, в первую очередь, что это все становится крайне трудно обновляемым или совсем не обновляемым.
А есть ли уже howto для типовых задач. Например: как идеологически правильно ставить apache22 + mod_php5. Если я правильно понимаю, то через пакеты-ng - никак, только через порты. А как при этом обеспечить правильное обновление системы? Т.е. все, что пакетами ставилось - пусть пакетами и обновляется; а остальное - portupgrade.
> А как при этом обеспечить правильное
> обновление системы? Т.е. все, что пакетами ставилось - пусть пакетами и
> обновляется; а остальное - portupgrade.А я думаю никак. Всё осталось по старому. Либо только используй репозитарий пакетов, либо порты. Первым пользоваться до сих пор невозможно. Во-первых т.к. там до сих пор кучи пакетов нету и собирает их слоупок. Во-вторых мы никогда не увидим пакеты типа xxx-pgsql и xxx-mysql как в бинарных линуксах, т.к. это разруливается опциями портов, и следовательно в репе не может быть два пакета собранных из одного порта с разными опциями.
Зато мне понравилась простота создания своих реп.
Сейчас для portupgrade (не -devel) наблюдаю странное. При обновлении пакет удаляется из старой базы и появляется в новой. Сколько эта багофича продержится - хз, но можно перегнать пакеты по portupgrade -Ofa.
Кто-нибудь знает способ без полного пересбора окружения?
Лавруш, сенк за подборку.
Я на все это смотрю и становится печально. У фри есть порты со сбором всего из сорцов и бинарные недопакеджи. Теперь еще будут бинарные pkgng без сорцов. Почему нельзя сразу предусмотреть и сборку из сорцов и бинарный сетап/обновление? зачем городить вторую недосистему?
Вот хочу я, например, обновляться бинарно, но mplayer пересобирать из сорцов, т.к. он компилится с флагами под конкретные процессоры, но при этом я не хочу держать N рапозиториев под N моих машин с разными процессорами, как? почему нельзя сделать как-ой то массив в конфиге: "собирать из сорцов"?
ИМХО, нужен какой-то флаг что мол данный порт ставился из сортов в тех же OPTIONS, а ещё как вариант на лету сравнивать выставленные опции порта по дефолту и сравнивать их с теми, что сохранены в OPTIONS и если различий нет, то надеяться что в репе пакет собран с теми же опциями. Это уже два варианта для проверки, что обновлять исходниками, а что пакетами.
Много воды и дублирующей информации. Если правильно понял, переключение сводится к
1. обновлению портов (в том числе переустановка portupgrade и portmaster)
2. установка pkg (из портов или пусковиком /usr/sbin/pkg, доступным с релиза 9.1)
3. конвертация установленных портов в новый формат с помощью pkg2ng, конвертация опций портов
4. задание переменной WITH_PKGNG в /etc/make.conf
А где собственно пакеты ?
http://pkgbeta.freebsd.org/freebsd:9:x86:32/latest/All/
тут их аж 3
9.1 RC3
все по книжке
только pkg install ... не находит ничего
за конфликта он пока прикрыт на время, вот гдето про это читал в разсылке
Временное решение:
http://mirror.exonetric.net/pub/pkgng/${ABI}/latest
PACKAGESITE : http://mirror.exonetric.net/pub/pkgng/freebsd:9:x86:32/latest/
Подскажите как установить или обновить пакет с опциями. Не могу разобрать где прописать WITH_ при установке или обновлении
Подскажите как установить или обновить пакет с опциями. Не могу разобрать где прописать WITH_ при установке или обновлении