[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. Я предложил вывод потому что он может навести Вас на мысль:
Особенно интересен комментарий сверху. Я думал он и наведёт Вас на мысль. Теперь о сути исходной проблемы... В первом листинге ниже - как этот пиклер подключается:
Теперь всё становится совсем понятным. Особенно, если сравнить различающийся между нами вывод 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.
Ага... Постараюсь не забыть и
Ага... Постараюсь не забыть и расковырять. Пни меня на всякий случай в Яббере, когда буду в сети, хорошо?
Текстовый редактор 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
Собственно:
Ну и удалив из файла лишнее - "...����}@�������}@����}@�������}..." - всё заработало.
Леша, Леонид, Коля, огромное и человеческое вам спасибо! :)
P.S. Конечно, любопытно, с чего бы этот "/var/db/pkg/sys-devel/libperl-5.8.8-r1/SLOT" так перекорёжило, ну да это уже не принципиально. Фиг с ним. SOLVED :)