Восстановление emerge

Calculate CLD 10.0

Выполнил emerge portage, потом попытался запустить emerge и получил вот что:

calculate bin # emerge
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 15464, in emerge_main
    portdb = trees[settings["ROOT"]]["porttree"].dbapi
  File "/usr/lib/portage/pym/portage/util.py", line 1117, in __getitem__
    result = lazy_item.func(*pargs, **kwargs)
  File "/usr/lib/portage/pym/portage/dbapi/porttree.py", line 1121, in __init__
    settings["PORTDIR"], mysettings=settings)
  File "/usr/lib/portage/pym/portage/dbapi/porttree.py", line 293, in __init__
    self.auxdbmodule = self.mysettings.load_best_module("portdbapi.auxdbmodule")
  File "/usr/lib/portage/pym/portage/__init__.py", line 2011, in load_best_module
    mod = load_mod(best_mod)
  File "/usr/lib/portage/pym/portage/__init__.py", line 171, in load_mod
    mod = __import__(modname)
  File "/usr/lib/portage/pym/portage/cache/sqlite.py", line 14, in <module>
    from pysqlite2 import dbapi2 as db_module
ImportError: No module named pysqlite2
calculate bin #

То есть emerge не работает и не запускается. Как его починить/восстановить? Хорошо бы без переустановки системы.

Ну если emerge ещё собирать может, можно выполнить:

revdep-rebuild

Подробнее обновление системы описано [[System update guide|здесь]].

Emerge уже ничего не может. Последнее, что он смог - emerge portage. После чего и перестал работать напрочь, выдавая при запуске вышеуказанные комменты.
Revdep-rebuild я уже пробовал, не помогает. Загрузиться с livecd и переписать оттуда emerge тоже пробовал, тоже безрезультатно. Или, может быть, неправильно списывал?

Загрузитесь с livecd и выполните.

quickpkg portage

Бинарный файл пакета создастся по этому пути: /usr/calculate/share/packages/CLD/x86_64/
Перенесите его в систему.
После этого можно будет его установить либо при помощи emerge -K =категория/пакет-версия, либо простой распаковкой архива.

Что было сделано:

  • загрузился с LiveCD;

  • запустил терминал;

  • набрал и запустил “quickpkg portage”;

  • получил сообщение о том, что готовый результат лежит в /usr/calculate/share/packages/CLD/i686;

  • запустил Midnight Commander и пошёл по указанному адресу;

  • нашёл файл portage-2.1.6.13.tbz2, открыл его в MC, распаковал вложенные папки etc и usr на жёсткий диск с заменой старых файлов;

  • закрыл все окна, дал команду на перезагрузку компьютера с HDD.

Что получилось:

calculate guest # emerge -h
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 15464, in emerge_main
    portdb = trees[settings["ROOT"]]["porttree"].dbapi
  File "/usr/lib/portage/pym/portage/util.py", line 1117, in __getitem__
    result = lazy_item.func(*pargs, **kwargs)
  File "/usr/lib/portage/pym/portage/dbapi/porttree.py", line 1121, in __init__
    settings["PORTDIR"], mysettings=settings)
  File "/usr/lib/portage/pym/portage/dbapi/porttree.py", line 293, in __init__
    self.auxdbmodule = self.mysettings.load_best_module("portdbapi.auxdbmodule")
  File "/usr/lib/portage/pym/portage/__init__.py", line 2011, in load_best_module
    mod = load_mod(best_mod)
  File "/usr/lib/portage/pym/portage/__init__.py", line 171, in load_mod
    mod = __import__(modname)
  File "/usr/lib/portage/pym/portage/cache/sqlite.py", line 14, in <module>
    from pysqlite2 import dbapi2 as db_module
ImportError: No module named pysqlite2
calculate guest #

То есть - то же самое. Emerge, как и раньше, при запуске выдаёт вот такой код с ошибками и прекращает работу.
Что же всё-таки делать?

Похоже здесь есть решение: http://en.gentoo-wiki.com/wiki/Portage_SQLite_Cache

  • 5.1 ImportError: No module named pysqlite2

Да, действительно, инструкция помогла.
Собственно, стоило только закомментировать всего одну(!) строку в файле /etc/portage/modules (а там и была всего одна строка), и нормальная работа emerge восстановилась.
Ура, всё заработало!
Но обновлять питона по инструкции с сайта я не стал, вместо этого использовал с emerge опцию –pretend, получил информацию о необходимости установки связанных модулей, установил их и ОК.
Видимо, проблема с крахом emerge как раз в пропущенной мною опции –pretend. То есть, по идее, вместо emerge portage надо было набирать emerge --pretend portage.
Выводы: надо опцию –pretend вставить в emerge как обязательную по умолчанию. Пусть автоматически проверяет зависимости пакетов.

–pretend

Вместо выполнения установки, просто отображает пакеты которые будут установлены, если опция --pretend не будет использоваться. Использование --pretend настоятельно рекомендуется перед установкой незнакомых пакетов.

Более подробно можно почитать [[emerge|здесь]].