URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93911
[ Назад ]

Исходное сообщение
"FreeBSD 9.0 проблема pkgdb -L"

Отправлено westvovik , 15-Окт-12 20:27 
после обновления портов через

portsnap fetch update
portmaster -ad

Делаю pkgdb -L

выдает undefined method `with_pkgng?' for main:Object

Раньше все работало


Содержание

Сообщения в этом обсуждении
"FreeBSD 9.0 проблема pkgdb -L"
Отправлено lavr , 16-Окт-12 00:28 
> после обновления портов через
> portsnap fetch update

после верхнего следует обязательно выполнять пункт:

# less /usr/ports/UPDATING

> portmaster -ad

и сразу станет понятно что -ad - просто так без подготовки выполнять опасно

> Делаю pkgdb -L

каша какая, и portmaster и portupgrade

> выдает undefined method `with_pkgng?' for main:Object
> Раньше все работало


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено westvovik , 16-Окт-12 12:28 
>> после обновления портов через
>> portsnap fetch update
> после верхнего следует обязательно выполнять пункт:
> # less /usr/ports/UPDATING
>> portmaster -ad
> и сразу станет понятно что -ad - просто так без подготовки выполнять
> опасно
>> Делаю pkgdb -L
> каша какая, и portmaster и portupgrade

А причем тут portupgrade?
pkgdb - вроде как отдельная утилита

>> выдает undefined method `with_pkgng?' for main:Object
>> Раньше все работало


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено lavr , 16-Окт-12 12:41 
>[оверквотинг удален]
>>> 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)?


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено westvovik , 16-Окт-12 15:40 
>[оверквотинг удален]
>>>> Делаю 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
...
и т.д.

Подскажите что можно сделать, а начинающий в этом деле так что сильно не ругайтесь :)


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено lavr , 16-Окт-12 20:24 
>>[оверквотинг удален]
> Охх прочитал инфу о переходе на 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.org

  Portmaster 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
  # pkg2ng

20121015:
  AFFECTS: users of ports-mgmt/portupgrade
  AUTHOR: bdrewery@FreeBSD.org

  Portupgrade 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+=DOCS

p7zip_SET+=MODULES
p7zip_UNSET+=MINIMAL

unrar_SET+=OPENSSL_AES
unrar-iconv_SET+=OPENSSL_AES

perl5.14_SET+=USE_PERL PERL_64BITINT PTHREAD
perl5.14_UNSET+=DEBUGGING GDBM PERL_MALLOC THREADS MULTIPLICITY SITECUSTOMIZE

python27_SET+=NLS PYMALLOC THREADS UCS4
python27_UNSET+=IPV6 EXAMPLES FPECTL PTH SEM UCS2

m4_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 9.0 проблема pkgdb -L"
Отправлено DeadLoco , 17-Окт-12 02:26 
>>>[оверквотинг удален]

Такие долготерпение и скрупулезность заслуживают прижизненных почестей.


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено westvovik , 17-Окт-12 16:45 
Да, огромное спасибо за ваш развернутый ответ, нынче в интернете не много людей которые могут поделиться знаниями!

"FreeBSD 9.0 проблема pkgdb -L"
Отправлено lavr , 17-Окт-12 19:12 
> Да, огромное спасибо за ваш развернутый ответ, нынче в интернете не много
> людей которые могут поделиться знаниями!

ну это не правда, ибо многое зависит от:

- у одних это потребность чтобы идти дальше
- есть готовые поделиться, но они либо сильно заняты, либо не хотят писать на
детском уровне, либо делают это в своих блогах, журналах и твиттерах
- и конечно[отдельный пункт ибо психологический(на мой взгляд)], нужно правильно ставить
вопросы и правильно спрашивать, ибо форум не для фундаментальных знаний, а для пинка под
зад в правильном направлении

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


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено PavelR , 17-Окт-12 18:18 
>>>>[оверквотинг удален]
> Такие долготерпение и скрупулезность заслуживают прижизненных почестей.

Узнал много нового. Этот ответ тянет на отдельную статью для пользующихся FreeBSD нерегулярно.


"FreeBSD 9.0 проблема pkgdb -L"
Отправлено lavr , 17-Окт-12 19:04 
>>>>>[оверквотинг удален]
>> Такие долготерпение и скрупулезность заслуживают прижизненных почестей.
> Узнал много нового. Этот ответ тянет на отдельную статью для пользующихся FreeBSD
> нерегулярно.

да перестаньте...

А статьи будут, болванки уже готовы, попробую сделать в стиле FreeBSD Handbook,
но с небольшими добавлениями в css для читабельности:

- portmaster - работа с портами с использованием optionsng и pkgng
- работа с новым пакетным менеджером pkgng (переработанная статья и в html)
- jails с виртуальным сетевым стеком VIMAGE (тут придется освоить минимальное
рисование чтобы было понятно что из себя представляет epair или создание моста для
jail'ов на базе netgraph)
- короткая справка по обновлению src и ports в FreeBSD используя svn

ps. как всегда хотелось бы коротко, но у меня получается в стиле: расписано все как
для неориентирующихся