после обновления портов черезportsnap fetch update
portmaster -adДелаю pkgdb -L
выдает undefined method `with_pkgng?' for main:Object
Раньше все работало
> после обновления портов через
> portsnap fetch updateпосле верхнего следует обязательно выполнять пункт:
# less /usr/ports/UPDATING
> portmaster -ad
и сразу станет понятно что -ad - просто так без подготовки выполнять опасно
> Делаю pkgdb -L
каша какая, и portmaster и portupgrade
> выдает undefined method `with_pkgng?' for main:Object
> Раньше все работало
>> после обновления портов через
>> portsnap fetch update
> после верхнего следует обязательно выполнять пункт:
> # less /usr/ports/UPDATING
>> portmaster -ad
> и сразу станет понятно что -ad - просто так без подготовки выполнять
> опасно
>> Делаю pkgdb -L
> каша какая, и portmaster и portupgradeА причем тут portupgrade?
pkgdb - вроде как отдельная утилита>> выдает undefined method `with_pkgng?' for main:Object
>> Раньше все работало
>[оверквотинг удален]
>>> portsnap fetch update
>> после верхнего следует обязательно выполнять пункт:
>> # less /usr/ports/UPDATING
>>> portmaster -ad
>> и сразу станет понятно что -ad - просто так без подготовки выполнять
>> опасно
>>> Делаю pkgdb -L
>> каша какая, и portmaster и portupgrade
> А причем тут portupgrade?
> pkgdb - вроде как отдельная утилитаотдельная от чего?
# pkg_info -W /usr/local/bin/pkgdb
>>> выдает undefined method `with_pkgng?' for main:Object
>>> Раньше все работалопотому что ОПАСНО апгрейдить ВСЕ и "бездумно": portmaster -ad
прим: ранее обновлялся portupgrade на использование pkg (pkgng)?
>[оверквотинг удален]
>>>> Делаю pkgdb -L
>>> каша какая, и portmaster и portupgrade
>> А причем тут portupgrade?
>> pkgdb - вроде как отдельная утилита
> отдельная от чего?
> # pkg_info -W /usr/local/bin/pkgdb
>>>> выдает undefined method `with_pkgng?' for main:Object
>>>> Раньше все работало
> потому что ОПАСНО апгрейдить ВСЕ и "бездумно": portmaster -ad
> прим: ранее обновлялся portupgrade на использование pkg (pkgng)?Охх прочитал инфу о переходе на pkg2ng
сделал все как написано в less /usr/ports/UPDATING
pkg2ng переделал базу пакетовдалее вот что вылезло куча пакетов
pkg_info: the package info for package 'GeoIP-1.4.8_3' is corrupt
pkg_info: the package info for package 'apache22-2.2.22_8' is corrupt
pkg_info: the package info for package 'apr-1.4.6.1.4.1_1' is corrupt
pkg_info: the package info for package 'autoconf-2.69' is corrupt
pkg_info: the package info for package 'automake-1.12.4' is corrupt
pkg_info: the package info for package 'bash-4.2.37' is corrupt
pkg_info: the package info for package 'bison-2.5.1,1' is corrupt
pkg_info: the package info for package 'ca_root_nss-3.13.6' is corrupt
pkg_info: the package info for package 'cmake-2.8.9' is corrupt
pkg_info: the package info for package 'cmake-modules-2.8.9' is corrupt
pkg_info: the package info for package 'curl-7.24.0_1' is corrupt
pkg_info: the package info for package 'cvsps-2.1_1' is corrupt
pkg_info: the package info for package 'db42-4.2.52_5' is corrupt
pkg_info: the package info for package 'dbmail-3.0.2_4' is corrupt
pkg_info: the package info for package 'exim-mysql-4.80' is corrupt
pkg_info: the package info for package 'expat-2.0.1_2' is corrupt
pkg_info: the package info for package 'gdbm-1.9.1' is corrupt
pkg_info: the package info for package 'gettext-0.18.1.1' is corrupt
pkg_info: the package info for package 'ghostscript9-nox11-9.06_1' is corrupt
pkg_info: the package info for package 'git-1.7.12.3' is corrupt
pkg_info: the package info for package 'glproto-1.4.15' is corrupt
pkg_info: the package info for package 'gmake-3.82_1' is corrupt
pkg_info: the package info for package 'help2man-1.40.12' is corrupt
pkg_info: the package info for package 'icu-4.8.1.1_1' is corrupt
pkg_info: the package info for package 'lcms2-2.4' is corrupt
pkg_info: the package info for package 'libGL-7.6.1_2' is corrupt
pkg_info: the package info for package 'libgcrypt-1.5.0_1' is corrupt
pkg_info: the package info for package 'libiconv-1.14' is corrupt
...
и т.д.Подскажите что можно сделать, а начинающий в этом деле так что сильно не ругайтесь :)
>>[оверквотинг удален]
> Охх прочитал инфу о переходе на pkg2ng
> сделал все как написано в less /usr/ports/UPDATING
> pkg2ng переделал базу пакетов1. В системе FreeBSD существуют понятия:
- порты - это дерево с Makefile'ами, описательной частью - pkg-descr,
со списком того что будет установлено - pkg-plist, патчами в директории files
Каждый порт в отдельности, представляет собой проект СБОРКИ объекта из исходных
текстов (sources).
Сборка осуществляется командой make. Порт может зависеть от другого ПО, те от
других портов и тд и тп рекурсивно. Это означает для сборки какого-то порта, прежде
будут собраны и установлены зависимости, которые нужны для СБОРКИ или РАБОТЫ
требуемого порта.- пакеты - это уже СОБРАННЫЕ порты, могут иметь зависимости необходимые для
работы требуемого пакеты, понятно что если существуют зависимости, они должны
быть установлены2. Система пакетов во FreeBSD старая и в настоящее время не соответствует
современным требованиям, предъявляемым к системам пакетов, общее название
pkg_install (СТАРАЯ СИСТЕМА ПАКЕТОВ):- состоит из утилит pkg_info, pkg_add, pkg_delete, pkg_create, pkg_version,
pkg_update- НОВАЯ СИСТЕМА пакетов, общее название pkgng (package new generation),
утилита pkg:Commands supported:
add Registers a package and installs it on the system
audit Reports vulnerable packages
autoremove Removes orphan packages
backup Backs-up and restores the local package database
check Checks for missing dependencies and database consistency
clean Cleans old packages from the cache
create Creates software package distributions
delete Deletes packages from the database and the system
fetch Fetches packages from a remote repository
help Displays help information
info Displays information about installed packages
install Installs packages from remote package repositories
query Queries information about installed packages
register Registers a package into the local database
remove Deletes packages from the database and the system
repo Creates a package repository catalogue
rquery Queries information in repository catalogues
search Performs a search of package repository catalogues
set Modifies information about packages in the local database
shell Opens a debug shell
shlib Displays which packages link against a specific shared library
stats Displays package database statistics
update Updates package repository catalogues
updating Displays UPDATING information for a package
upgrade Performs upgrades of packaged software distributions
version Displays the versions of installed packages
which Displays which package installed a specific fileСтарая и новая системы пакетов НЕСОВМЕСТИМЫ, необходимо пользоваться какой-то одной
и соответствующими командами, ибо формат базы пакетов разный и тд и тпИтого, общее представление теперь есть.
Далее необходимо решить:
- либо вы будете пользоваться старой системой пакетов и соответствующими
утилитами: pkg_add, pkg_info и тд и тп- либо новой системой пакетов и утилитой pkg
# pkg info
# pkg search
# pkg rquery
# pkg query
# pkg install/add
# pkg delete
...Если мы переходим на новую систему пакетов, нам необходимо преобразовать старый
формат (дерево установленных портов и паетов) - /var/db/pkg/name
в новый, который будет хранится в базе sqlite:# ls -la /var/db/pkg/*.sqlite
-rw-r--r-- 1 root wheel 2825216 Oct 11 13:04 /var/db/pkg/local.sqlite
-rw-r--r-- 1 root wheel 82740224 Sep 10 13:03 /var/db/pkg/repo.sqlite
#где local.sqlite - база установленных пакетов и портов в новом формате (pkgng)
repo.sqlite - данные с удаленного репозиторияЧто мы делаем если у нас все в старом формате, а мы решили перейти на новый PKGNG,
1) делаем копию старого формата, вручную, на всякий случай (своя копия всегда надежна и
понятна):# cd /var/db/pkg
# tar zcvf /var/tmp/oldpkg_db.tgz .прим: мы всегда сможем вернуть ее назад, навсегда или на время чтобы разрешить какую-либо
проблему (а их быть не должно)2) переводим старый формат /var/db/pkg/name в новый, используя утилиту pkg2ng
# pkg2ng
которая создаст архив старой базы (мы ранее создали вручную) и переведет все
в новый формат.
Теперь, мы не можем использовать pkg_info!!!
Вместо этого мы будем использовать pkg:# pkg info
# pkg install
# pkg delete> далее вот что вылезло куча пакетов
> pkg_info: the package info for package 'GeoIP-1.4.8_3' is corrupt
> pkg_info: the package info for package 'apache22-2.2.22_8' is corrupt...
> ...
> и т.д.вы перешли на НОВУЮ систему пакетов, а использовали утилиту pkg_info от
старого пакетного менеджера, вместо:# pkg info
# pkg info | grep bash (например)Но и это не все, как уже было сказано, есть:
- система ПАКЕТОВ
- система ПОРТОВУтилита для работы с пакетами: pkg
а утилиты для работы с портами:
- portmaster
- portupgrade
- и другие утилиты для работы с портами из портов (по написанию масло масляное, но
по сути верно)Так вот утилиты portmaster, portupgrade - либо нужно патчить для того чтобы они
регистрировали установленные порты в базе пакетов в НОВОМ формате, либо установить
более свежие, которые уже включают эти патчи:# less /usr/ports/UPDATING
...
20121015:
AFFECTS: users of ports-mgmt/portmaster
AUTHOR: bdrewery@FreeBSD.orgPortmaster now support pkgng. To use pkgng, enable the patch in the port,
enable pkgng in your make.conf, and convert your existing /var/db/pkg
database. Also see UPDATING entry 20121010 if you are on a recent CURRENT
and do not want to use pkg.# make -C /usr/ports/ports-mgmt/portmaster config build deinstall install clean
# echo 'WITH_PKGNG=yes' >> /etc/make.conf
# pkg2ng20121015:
AFFECTS: users of ports-mgmt/portupgrade
AUTHOR: bdrewery@FreeBSD.orgPortupgrade now support pkgng. To use pkgng, enable it in your make.conf,
and convert your databases.# echo 'WITH_PKGNG=yes' >> /etc/make.conf
# pkg2ng
# pkgdb -fu
...После того как мы проапгрейдим portmaster или portupgrade для использования новой
системы пакетов, как указано выше, мы должны в файл /etc/make.conf внести запись:/etc/make.conf
...
WITH_PKGNG=yes
...для portupgrade после выполнения pkg2ng, выполнить: pkgdb -fu
И это не все, потому как если вы давно не пользовались портами и регулярно НЕ ЧИТАЕТЕ
списки рассылки freebsd, форум freebsd и UPDATING, то вероятно НЕ ЗНАЕТЕ что
летом, порты перевели на использование нового фреймворка OPTIONSNG:http://wiki.freebsd.org/Ports/Options/OptionsNG
что это? Старые опции в портах: WITH_NAME, WITHOUT_NAME - неудобны в использовании
и были заменены, стало очень удобно использовать новые опции для использовании
с порт-менеджерами и просто для сборки портов, например в /etc/make.conf:...
#-- global ports options
#-- batch /dialog - noninteractive mode for make ports
#BATCH=yes
#NO_DIALOG=yes
#-- don't install port docs, examples
#NOPORTDOCS=yes
#NOPORTEXAMPLES=yes
#-- make without debug info/flags
#WITHOUT_DEBUG=yes
#-- Intel KMS driver with new xorg 1.10...
#WITH_KMS=yes
#WITH_NEW_XORG=yes
#-- use PKGNG
WITH_PKGNG=yes
#-- global optionsng for all
#OPTIONS_UNSET=NLS IPV6 VDPAU
#OPTIONS_UNSET=DOCS DEBUG DEBUGGING#-- individual ports optionsng
arj_UNSET+=DOCSp7zip_SET+=MODULES
p7zip_UNSET+=MINIMALunrar_SET+=OPENSSL_AES
unrar-iconv_SET+=OPENSSL_AESperl5.14_SET+=USE_PERL PERL_64BITINT PTHREAD
perl5.14_UNSET+=DEBUGGING GDBM PERL_MALLOC THREADS MULTIPLICITY SITECUSTOMIZEpython27_SET+=NLS PYMALLOC THREADS UCS4
python27_UNSET+=IPV6 EXAMPLES FPECTL PTH SEM UCS2m4_UNSET+=LIBSIGSEGV
bison_SET+=NLS
libcheck_UNSET+=DOCS EXAMPLES
libiconv_SET+=EXTRA_ENCODINGS
pcre_SET+=JIT
...Важное, если мы ранее собирали что-то из портов со СВОИМИ опциями, они должны
были сохранится в /var/db/ports/name/optionsДля работы со свежими портами, необходимо старые опции сконвертировать в новый
формат:# /usr/ports/Tools/scripts/options2ng.sh -p
Можно считать что в целом, почти все, за исключением важных моментов:
pkg-config был заменен на pkgconf и тд и тп - читайте что необходимо было
сделать и тому подобное...# less /usr/ports/UPDATING
примечание: лучше выбрать какой-то один менеджер портов:
- либо portmaster
- либо portupgrade
- либо другой из портов с поддержкой pkgngчтобы не запутаться и лучше хорошо знать и иметь опыт с одним, чем получить кашу
работая сразу с несколькими.
Для работы с portmaster, нужно в его конфиге задать сохранение shared libraries,
тогда с обновлениями проблем не будет.> Подскажите что можно сделать, а начинающий в этом деле так что сильно
> не ругайтесь :)никто и не ругает, но если хотите заниматься Unix'ами, нужно регулярно и много
читать, учиться пользоваться man'ами и главное - думать.Все понятно расписано?
>>>[оверквотинг удален]Такие долготерпение и скрупулезность заслуживают прижизненных почестей.
Да, огромное спасибо за ваш развернутый ответ, нынче в интернете не много людей которые могут поделиться знаниями!
> Да, огромное спасибо за ваш развернутый ответ, нынче в интернете не много
> людей которые могут поделиться знаниями!ну это не правда, ибо многое зависит от:
- у одних это потребность чтобы идти дальше
- есть готовые поделиться, но они либо сильно заняты, либо не хотят писать на
детском уровне, либо делают это в своих блогах, журналах и твиттерах
- и конечно[отдельный пункт ибо психологический(на мой взгляд)], нужно правильно ставить
вопросы и правильно спрашивать, ибо форум не для фундаментальных знаний, а для пинка под
зад в правильном направлениии еще куча мелких но, вида: устал - потом, надоело по сто раз одно и тоже,
не маленькие пусть изучают, нечего пальцы гнуть, мы не обязаны делать чужую
работу и тд и тп
>>>>[оверквотинг удален]
> Такие долготерпение и скрупулезность заслуживают прижизненных почестей.Узнал много нового. Этот ответ тянет на отдельную статью для пользующихся FreeBSD нерегулярно.
>>>>>[оверквотинг удален]
>> Такие долготерпение и скрупулезность заслуживают прижизненных почестей.
> Узнал много нового. Этот ответ тянет на отдельную статью для пользующихся FreeBSD
> нерегулярно.да перестаньте...
А статьи будут, болванки уже готовы, попробую сделать в стиле FreeBSD Handbook,
но с небольшими добавлениями в css для читабельности:- portmaster - работа с портами с использованием optionsng и pkgng
- работа с новым пакетным менеджером pkgng (переработанная статья и в html)
- jails с виртуальным сетевым стеком VIMAGE (тут придется освоить минимальное
рисование чтобы было понятно что из себя представляет epair или создание моста для
jail'ов на базе netgraph)
- короткая справка по обновлению src и ports в FreeBSD используя svnps. как всегда хотелось бы коротко, но у меня получается в стиле: расписано все как
для неориентирующихся