[SOLVED] Проблемы с portage (emerge)
Hrundix 13 января, 2009 - 00:35
Моя проблема почти полностью описана в этом топике: http://gentoo.ru/node/11914
Тем не менее. Началось с этого:
emerge -pv portage These are the packages that would be merged, in order: Calculating dependencies \Traceback (most recent call last): File "/usr/bin/emerge", line 6979, in <module> retval = emerge_main() File "/usr/bin/emerge", line 6973, in emerge_main myopts, myaction, myfiles, spinner) File "/usr/bin/emerge", line 6240, in action_build retval, favorites = mydepgraph.select_files(myfiles) File "/usr/bin/emerge", line 2120, in select_files if not self.validate_blockers(): File "/usr/bin/emerge", line 2571, in validate_blockers blocker_cache.flush() File "/usr/bin/emerge", line 1335, in flush cPickle.dump(self._cache_data, f, -1) cPickle.PicklingError: Can't pickle <type 'method-wrapper'>: attribute lookup __builtin__.method-wrapper failed
однако:
emerge -pv 123 These are the packages that would be merged, in order: Calculating dependencies \ emerge: there are no ebuilds to satisfy "123".
Кратко, что сделано:
1. http://www.gentoo.org/proj/en/portage/doc/manually-fixing-portage.xml
После этого получаю:
emerge portage
Traceback (most recent call last):
File "/usr/bin/emerge", line 4049, in <module>
emerge_main()
File "/usr/bin/emerge", line 3770, in emerge_main
portage.global_updates(settings, trees, mtimedb["updates"])
AttributeError: 'module' object has no attribute 'global_updates'
2. Переставил из бинарников python 2.4 и 2.5 - не помогло
3. Из stage3 от 24 декабря рекурсивно перезаписал: /bin /lib /usr /sbin - вернулся к subj
4. Снова прошёл п.1
5. Удалил /var/cache/edb и /usr/portage/ (кроме /usr/portage/distfiles и /usr/portage/profiles ) не помогло:
emerge sync
Traceback (most recent call last):
File "/usr/bin/emerge", line 4049, in <module>
emerge_main()
File "/usr/bin/emerge", line 3770, in emerge_main
portage.global_updates(settings, trees, mtimedb["updates"])
AttributeError: 'module' object has no attribute 'global_updates'
»
- Для комментирования войдите или зарегистрируйтесь

Версия portage какая?
Версия portage какая?
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
С какой версии начались
С какой версии начались проблемы, уже не выяснить. После того, как был проделан п.3, версия стала 2.1.6.4, после п.4 версия стала 2.1.1.
Может это как-то связано с правами доступа?
У меня вываливалось нечто похоже... В одном случае, когда /usr был смонтирован в режме ro, в другом - старая версия portage неверно обрабатывала симлинк /usr/portage/distfiles, в третьем - тоже какие-то проблемы с правами были на distfiles.
ls -ld /usr/portage/distfiles стоит проверить, возможно chown -R portage:portage сделать...
Нет, с правами доступа всё ок.
Не помогло :(
Может это что подскажет! ;-)
# grep -B20 -A2 'cPickle.dump(self._cache_data, f, -1)' /usr/bin/emerge
# grep -B1 'cPickle' /usr/bin/emerge | head -n4
# locate pickle
/var/cache/edb/vdb_metadata.pickle
/var/cache/edb/vdb_blockers.pickle
/usr/lib32/openoffice/program/python-core-2.3.4/lib/test/pickletester.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/test/test_xpickle.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/test/test_pickletools.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/test/test_pickle.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/test/test_cpickle.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/pickletools.py
/usr/lib32/openoffice/program/python-core-2.3.4/lib/pickle.py
/usr/lib64/python2.5/test/pickletester.py
/usr/lib64/python2.5/test/test_xpickle.py
/usr/lib64/python2.5/test/pickletester.pyc
/usr/lib64/python2.5/test/pickletester.pyo
/usr/lib64/python2.5/test/test_pickletools.pyc
/usr/lib64/python2.5/test/test_pickletools.pyo
/usr/lib64/python2.5/test/test_pickletools.py
/usr/lib64/python2.5/test/test_pickle.py
/usr/lib64/python2.5/test/test_cpickle.pyc
/usr/lib64/python2.5/test/test_cpickle.pyo
/usr/lib64/python2.5/test/test_pickle.pyc
/usr/lib64/python2.5/test/test_pickle.pyo
/usr/lib64/python2.5/test/test_cpickle.py
/usr/lib64/python2.5/test/test_xpickle.pyc
/usr/lib64/python2.5/test/test_xpickle.pyo
/usr/lib64/python2.5/bsddb/test/test_pickle.py
/usr/lib64/python2.5/bsddb/test/test_pickle.pyc
/usr/lib64/python2.5/bsddb/test/test_pickle.pyo
/usr/lib64/python2.5/pickletools.py
/usr/lib64/python2.5/pickletools.pyc
/usr/lib64/python2.5/pickletools.pyo
/usr/lib64/python2.5/pickle.pyc
/usr/lib64/python2.5/pickle.pyo
/usr/lib64/python2.5/site-packages/Pyrex/Compiler/Lexicon.pickle
/usr/lib64/python2.5/pickle.py
/usr/include/boost/python/object/pickle_support.hpp
# locate cPickle
/usr/lib32/openoffice/program/python-core-2.3.4/lib/lib-dynload/cPickle.so
/usr/lib64/python2.5/lib-dynload/cPickle.so
# qfile /usr/lib64/python2.5/lib-dynload/cPickle.so
dev-lang/python (/usr/lib64/python2.5/lib-dynload/cPickle.so)
# qfile /usr/lib64/python2.5/pickle.py
dev-lang/python (/usr/lib64/python2.5/pickle.py)
# /usr/sbin/python-updater ???
# env-update && source /etc/profile ???
# ls -ld /var/cache/edb
drwxr-xr-x 3 root portage 200 Окт 24 04:37 /var/cache/edb
# ls -l /var/cache/edb
итого 2106
-rw-r--r-- 1 root root 3 Окт 24 04:26 counter
drwxrwsr-x 3 root portage 72 Сен 19 15:50 dep
-rw-rw-r-- 1 root portage 2370 Окт 24 04:26 mtimedb
-rw-r--r-- 1 root portage 48588 Окт 24 04:37 vdb_blockers.pickle
-rw-r--r-- 1 root portage 2093635 Окт 24 04:36 vdb_metadata.pickle
Ещё вариант лечения:
# cp -L /var/lib/portage/preserved_libs_registry ~/ && : > /var/lib/portage/preserved_libs_registry
Леонид, увы, я плохо
Леонид, увы, я плохо разбираюсь в Python и как это работает (впрочем, почитал кто такой pickle, но дало это мне мало).
Сейчас в системе установлен из бинарников portage-2.2, соответственно и:
ничего не дают...
Вот вывод "locate pickle":
Но сделать какой-либо вывод из этого не могу...
Запускать /usr/sbin/python-updater - ни малейшего смысла, т.к. он проверит пакеты и запустит "emerge xxx yyy zzz", ну а это subj
У меня такого нет: /var/lib/portage/preserved_libs_registry
Как будто я знаю Phyton! =))
Даже с пёрлом почти не знаком, тока с PHP! =))) У меня совпали номера строк по трассировке из исходного поста на 100% - это соотвествует sys-apps/portage-2.1.4.5. Я предложил вывод потому что он может навести Вас на мысль:
# grep -B20 -A2 'cPickle.dump(self._cache_data, f, -1)' /usr/bin/emerge def flush(self): """If the current user has permission and the internal blocker cache been updated, save it to disk and mark it unmodified. This is called by emerge after it has proccessed blockers for all installed packages. Currently, the cache is only written if the user has superuser privileges (since that's required to obtain a lock), but all users have read access and benefit from faster blocker lookups (as long as the entire cache is still valid). The cache is stored as a pickled dict object with the following format: { version : "1", "blockers" : {cpv1:(counter,(atom1, atom2...)), cpv2...}, "virtuals" : vardb.settings.getvirtuals() } """ if self._modified and \ secpass >= 2: try: f = portage_util.atomic_ofstream(self._cache_filename) cPickle.dump(self._cache_data, f, -1) f.close() portage_util.apply_secpass_permissions(Особенно интересен комментарий сверху. Я думал он и наведёт Вас на мысль. Теперь о сути исходной проблемы... В первом листинге ниже - как этот пиклер подключается:
# grep -B1 'cPickle' /usr/bin/emerge | head -n5 try: import cPickle except ImportError: import pickle as cPickle --Теперь всё становится совсем понятным. Особенно, если сравнить различающийся между нами вывод ls -l /var/cache/edb/ ;-) Задача пиклера - управлять сериализованным словарём, в данном случае - в этой директории. Проблема видимо как раз таки с правами (владельцем) на директорию / файлы в ней. У Вас почему-то два питона. Попробуйте забэкапить и прибить "ускоренный" пиклер - т.е. вот эти два файла: /usr/lib/python2.4/lib-dynload/cPickle.so и /usr/lib/python2.5/lib-dynload/cPickle.so, проверить по симлинкам/окружению, который из питонов активен. Далее, я так понял, можно очистить кэш /var/cache/edb/.
Ещё заметил, что у меня владельцем /var/lib/portage/world является root. И ещё замечу, что в моём варианте пиклер не содержит строки вида raise PicklingError("Can't pickle %r attribute lookup..."), следовательно, раз файл относится к питону 2.5, значит у Вас отрабатывает питоновский пиклер от версии 2.4. Возможно ещё решение восстановления питона из бинарного пакета. Надеюсь, это поможит обуздать взбесившийся портеж без переустановки!.. =)))
Выше я привёл не вариант лечения, а один из вариантов воспроизведения похожей ошибки, извиняюсь! =)))
Леонид, спасибо за советы. Но
Леонид, спасибо за советы. Но по-прежнему не работает. Опробовано следующее (при каждой попытке выполнялось rm -rdf /var/cache/edb/*):
- Удаление /usr/lib/python2.4/lib-dynload/cPickle.so
- Удаление /usr/lib/python2.5/lib-dynload/cPickle.so
- Замена файла /usr/lib/python2.4/lib-dynload/cPickle.so файлом /usr/lib/python2.4/pickle.py
- Замена файла /usr/lib/python2.5/lib-dynload/cPickle.so файлом /usr/lib/python2.5/pickle.py
- Переключение с активного Python 2.5 на Python 2.4
- Установка Python 2.5 из бинарника (впрочем, я уже перезаписывал каталоги /bin /lib /usr /sbin из декабрьского stage3)
- Удаление /usr/portage полностью
Граждане, подкиньте ещё идей, пожалуйста!
Если поставишь 2.2, то я
Если поставишь 2.2, то я попробую твою ошибку отследить и осмыслить.
А то 2.1 сильно отличается (-:Е
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Поставил
Поставил portage-2.2_rc22.
rm -rdf /var/cache/edb/*; emerge -pv 123 Performing Global Updates: /usr/portage/profiles/updates/1Q-2004 (Could take a couple of minutes if you have a lot of binary packages.) ... ... Пропущено Hrundix-ом ... ... Performing Global Updates: /usr/portage/profiles/updates/1Q-2009 (Could take a couple of minutes if you have a lot of binary packages.) .='update pass' *='binary update' #='/var/db update' @='/var/db move' s='/var/db SLOT move' %='binary move' S='binary SLOT move' p='update /etc/portage/package.*' ... p These are the packages that would be merged, in order: Calculating dependencies Traceback (most recent call last): File "/usr/bin/emerge", line 40, in <module> retval = _emerge.emerge_main() File "/usr/lib/portage/pym/_emerge/__init__.py", line 15181, in emerge_main myopts, myaction, myfiles, spinner) File "/usr/lib/portage/pym/_emerge/__init__.py", line 13961, in action_build mydepgraph = depgraph(settings, trees, myopts, myparams, spinner) File "/usr/lib/portage/pym/_emerge/__init__.py", line 4389, in __init__ pkg_cache=self._pkg_cache) File "/usr/lib/portage/pym/_emerge/__init__.py", line 1090, in __init__ root_config=root_config, type_name="installed") File "/usr/lib/portage/pym/_emerge/__init__.py", line 1443, in __init__ self.slot_atom = portage.dep.Atom("%s:%s" % (self.cp, self.slot)) File "/usr/lib/portage/pym/portage/dep.py", line 495, in __call__ instance = super(_AtomCache, cls).__call__(s) File "/usr/lib/portage/pym/portage/dep.py", line 532, in __init__ raise InvalidAtom(s) portage.exception.InvalidAtom: sys-devel/libperl:1 ����}@�������}@����}@�������}@����}@�������}�?����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@��� ����}@����}@�������}@����}@������5}�?����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@��� �}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}�?�������}@����}@�������}@����}@�������}@����}@������ �}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@� ������}@����}@�������}@���I5�?������.$�?�����?������e!�?����A�?�������H�?����}@�������}@����}@�������k�?����}@�������}@����}@����� ��}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������V�?���>�?�������R�?���(2�?�������K�?����*�?������Q(�? ���_@�������}@����}@�������}@����}�?�������}@����}@�������}@����}@�������}@����}@�������}@����{�?������Q�?���V`�?�������C�?���=Q�? �������C�?���)V�?������Y@�?���I�?������qF�?����H�?������e�?����}@�������}@Ага... Постараюсь не забыть и
Ага... Постараюсь не забыть и расковырять. Пни меня на всякий случай в Яббере, когда буду в сети, хорошо?
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Да я тебе, яхонтовый мой,
Да я тебе, яхонтовый мой, хоть информер по электрической почте заведу, чтобы каждые 5 минут пинал. Только расковыряй :)
Calculating dependencies... :-(
Ошибка, я смотрю возникает, в разных питонах и portage, но на одном и том же месте - при построении кэша зависимостей. Я так думаю, с источником дерева portage вряд ли проблема, значит остаётся железо (скорее всего глючит память). Едва ли накануне на этом сервере переставлялся glibc?
Память... маловероятно. Эта
Память... маловероятно. Эта машина - мой домашне-рабочий сервер. На нём крутятся несколько активно посещаемых вебсайтов (apache, php, mysql), 1-2-3-4 раза в сутки в wmware включается WinXP, rtorrent, bind, nfs, samba. Всё это и сейчас работает как часики!
Последняя перезагрузка была в октябре, когда менял UPS, следующая 12 января, когда пытался бороться с проблемой.
Маловероятно, что память... glibc не переустанавливал.
Запости где нить что
Запости где нить что содержится в /var/db/pkg/sys-devel/libperl-*/SLOT
Похоже там что то битое
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
Кстати, да. Если
Кстати, да. Если присмотреться, то 2.2 вываливает свою внутреннуюю ошибку с жалобой на invalid atom в районе sys-devel/libperl. Только я не уверен, что правильно себе представляю содержание /var/db/pkg...
emerge --metadataне его перестраивает?Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Не еон ее не трогает как
Не еон ее не трогает как раз.
Это то что установлено на системе и описание как это установлено
___________________________________________
Working on Gentoo for iPAQ hx4700 and Openmoko Neo Freerunner :-)
Если у вас компьютер с Windows, есть два выхода: выбросить компьютер в форточку или выбросить форточки с компьютера
И всё же...
В операции участвует дерево портежей, сам портеж, питон, ну может ещё в какой-то степени glibc/ядро. Если контрольная сумма снэпшота дерева портежей после скачивания совпала, конечно мог tar/bzip сглючить. ИМХО, можно проверить без перезагрузки, создав небольшой файл (dd), смонтировав его через mount --loop, далее по хендбуку развернуть в новый раздел стейдж и снэпшот, сделать чрут и там уже позапускать emerge. Только чтобы не было привязки к glibc родительской системы, лучше экспериментировать со stage1. Если проблем не будет, тогда дело действительно не в памяти.
portage
Я извиняюсь, конечно, но у меня такая (или почти такая же) проблемка была после обновления glibc с 2.8 на 2.9.
Ну, я сравнивал 2.8 и 2.9,
Ну, я сравнивал 2.8 и 2.9, там есть изменения в реализации malloc()/mmap(). Тут уже обсуждалось, но на glibc-2.9, ИМХО переезжать рано, там ещё много всяких глюков типа этого могут найти...
alexxy написал(а):Запости где
Да, Лёша, это оно.
Проблема деёствительно оказалать в файле /var/db/pkg/sys-devel/libperl-5.8.8-r1/SLOT
Собственно:
cat /var/db/pkg/sys-devel/libperl-5.8.8-r1/SLOT 1 ����}@�������}@����}@�������}@����}@�������}�?����}@�������}@����}@�������}@����}@�������}@����}@�������}@�� ��}@�������}@����}@�������}@����}@�������}@����}@������5}�?����}@�������}@����}@�������}@����}@�������}@���� }@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@� ������}@����}�?�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@��� ����}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@������ �}@���I5�?������.$�?�����?������e!�?����A�?�������H�?����}@�������}@����}@�������k�?����}@�������}@����}@��� ����}@����}@�������}@����}@�������}@����}@�������}@����}@�������}@����}@�������V�?���>�?�������R�?���(2�?��� ����K�?����*�?������Q(�?���_@�������}@����}@�������}@����}�?�������}@����}@�������}@����}@�������}@����}@��� ����}@����{�?������Q�?���V`�?�������C�?���=Q�?�������C�?���)V�?������Y@�?���I�?������qF�?����H�?������e�?��� �}@�������}@Ну и удалив из файла лишнее - "...����}@�������}@����}@�������}..." - всё заработало.
Леша, Леонид, Коля, огромное и человеческое вам спасибо! :)
P.S. Конечно, любопытно, с чего бы этот "/var/db/pkg/sys-devel/libperl-5.8.8-r1/SLOT" так перекорёжило, ну да это уже не принципиально. Фиг с ним. SOLVED :)