LINUX.ORG.RU

Сломал portage, прервав обновление мира.

 ,


0

1

portage-2.3.2 Обновлял мир командой emerge -uND world. В какой-то момент по ошибке прервал процесс с помощью Ctrl+C. Выдало несколько штатных сообщений по поводу пакетов, которые уже обновились, последним было:

 * Messages for package media-libs/harfbuzz-1.3.1:

 * ERROR: media-libs/harfbuzz-1.3.1::gentoo failed (compile phase):
 *   emake failed
 * 
 * If you need support, post the output of `emerge --info '=media-libs/harfbuzz-1.3.1::gentoo'`,
 * the complete build log and the output of `emerge -pqv '=media-libs/harfbuzz-1.3.1::gentoo'`.
 * The complete build log is located at '/tmp/portage/media-libs/harfbuzz-1.3.1/temp/build.log'.
 * The ebuild environment file is located at '/tmp/portage/media-libs/harfbuzz-1.3.1/temp/environment'.
 * Working directory: '/tmp/portage/media-libs/harfbuzz-1.3.1/work/harfbuzz-1.3.1-abi_x86_32.x86'
 * S: '/tmp/portage/media-libs/harfbuzz-1.3.1/work/harfbuzz-1.3.1'
Далее попробовал снова запустить обновление и теперь получаю
└─> emerge -uND world

These are the packages that would be merged, in order:

Calculating dependencies... done!
Traceback (most recent call last):
  File "/usr/lib/python-exec/python2.7/emerge", line 50, in <module>
    retval = emerge_main()
  File "/usr/lib64/python2.7/site-packages/_emerge/main.py", line 1224, in emerge_main
    return run_action(emerge_config)
  File "/usr/lib64/python2.7/site-packages/_emerge/actions.py", line 3261, in run_action
    retval = action_build(emerge_config, spinner=spinner)
  File "/usr/lib64/python2.7/site-packages/_emerge/actions.py", line 338, in action_build
    settings, trees, myopts, myparams, myaction, myfiles, spinner)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 9247, in backtrack_depgraph
    myaction, myfiles, spinner)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 9284, in _backtrack_depgraph
    success, favorites = mydepgraph.select_files(myfiles)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3606, in select_files
    return self._select_files(args)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3949, in _select_files
    return self._resolve(myfavorites)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 4100, in _resolve
    if not self._create_graph():
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 2401, in _create_graph
    allow_unsatisfied=allow_unsatisfied):
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3112, in _add_pkg_deps
    allow_unsatisfied):
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3128, in _add_pkg_dep_string
    allow_unsatisfied)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3208, in _wrapped_add_pkg_dep_string
    pkg, dep_priority, root_config, selected_atoms[pkg]):
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 3407, in _minimize_children
    root_config.root, atom, parent=parent)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 5364, in _select_pkg_highest_available
    ret = self._select_pkg_highest_available_imp(root, atom, onlydeps=onlydeps, parent=parent)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 5576, in _select_pkg_highest_available_imp
    root, atom, onlydeps=onlydeps, parent=parent)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 5872, in _wrapped_select_pkg_highest_available_imp
    onlydeps=onlydeps):
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 5282, in _iter_match_pkgs_atom
    installed=installed, onlydeps=onlydeps, myrepo=repo)
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 6580, in _pkg
    if not self._pkg_visibility_check(pkg) and \
  File "/usr/lib64/python2.7/site-packages/_emerge/depgraph.py", line 5620, in _pkg_visibility_check
    if pkg.visible:
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 177, in visible
    self._visible = self._eval_visiblity(self.masks)
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 171, in masks
    self._masks = self._eval_masks()
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 403, in _eval_masks
    self.cpv, self._metadata)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/config.py", line 2041, in _getMissingLicenses
    cpv, metadata["USE"], metadata["LICENSE"], metadata["SLOT"], metadata.get('repository'))
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 872, in __getitem__
    v = self._pkg._init_use()
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 664, in _init_use
    use_str = self._get_pkgsettings()["PORTAGE_USE"]
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 639, in _get_pkgsettings
    pkgsettings.setcpv(self)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/config.py", line 1384, in wrapper
    return f(self, *args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/config.py", line 1559, in setcpv
    self.puse = self._use_manager.getPUSE(cpv_slot)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/_config/UseManager.py", line 555, in getPUSE
    puse_matches = ordered_by_atom_specificity(cpdict, pkg)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/_config/helper.py", line 34, in ordered_by_atom_specificity
    bestmatch = best_match_to_list(pkg, keys)
  File "/usr/lib64/python2.7/site-packages/portage/dep/__init__.py", line 2058, in best_match_to_list
    for x in match_to_list(mypkg, mylist):
  File "/usr/lib64/python2.7/site-packages/portage/dep/__init__.py", line 2026, in match_to_list
    if x not in matches and match_from_list(x, pkgs):
  File "/usr/lib64/python2.7/site-packages/portage/dep/__init__.py", line 2341, in match_from_list
    use = getattr(x, "use", None)
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 633, in use
    self._init_use()
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 664, in _init_use
    use_str = self._get_pkgsettings()["PORTAGE_USE"]
  File "/usr/lib64/python2.7/site-packages/_emerge/Package.py", line 639, in _get_pkgsettings
    pkgsettings.setcpv(self)
  File "/usr/lib64/python2.7/site-packages/portage/package/ebuild/config.py", line 1381, in wrapper
    raise AssertionError('setcpv recursion detected')
AssertionError: setcpv recursion detected
Попытка собрать отдельный пакет выдаёт ту же ошибку. Хотя всякие eix и equery работают. eix-sync обновил дерево, equery вот:
└─> equery u bash
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for app-shells/bash-4.3_p48:
 U I
 - - afs          : Add OpenAFS support (distributed file system)
 - - bashlogger   : Log ALL commands typed into bash; should ONLY be used in restricted environments such as honeypots
 - - examples     : Install examples, usually source code
 - - mem-scramble : Build with custom malloc/free overwriting allocated/freed memory
 + + net          : Enable /dev/tcp/host/port redirection
 + + nls          : Add Native Language Support (using gettext - GNU locale utilities)
 - - plugins      : Add support for loading builtins at runtime via 'enable'
 - + readline     : Enable support for libreadline, a GNU line-editing library that almost everyone wants
 - - vanilla      : Do not add extra patches which change default behaviour; DO NOT USE THIS ON A GLOBAL SCALE as the severity of the meaning changes drastically
В гугле пока только одно сообщение с такой ошибкой нагуглил(оно и понятно, её только в прошлом месяце закоммитили). Там предлагают, если я правильно понял, привести /etc/portage в дефолт, всё пересобрать, а потом свои юзы накатывать. У меня пакетов куча, не хотелось бы.

Есть у кого идеи, что именно я сломал? Я посмотрел в код, где добавили этот эксепшн, но моего знания питона не хватило, чтобы конкретно понять, что там происходит.

Попробуй

$ python-updater
Хотя, оно тоже использует emerge...

Еще я бы попробовал

$ env-update
$ source /etc/profile

Еще попробуй поиграйся с версиями python с помощью eselect.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 2)
Ответ на: комментарий от Kroz

python-updater что-то задумался и такое впечатление, что ничего не делает. Подожду ещё чуть-чуть, но он даже активности в top'е не показывает.

shell-script ★★★★★ ()
Ответ на: комментарий от yars068

Т.е. я сломал именно портаж или питон? Списки установленных пакетов и прочего поидее не должны были побиться? Я просто подобного поведения портежа вообще не встречал. Были зависимости неразрешённые, были всякие кривые ебилды, но вот так прям ошибки на любое действие - впервые.

shell-script ★★★★★ ()
Ответ на: комментарий от Kroz
└─> python-updater 
 * Starting Python Updater...
 * Main active version of Python:    2.7
 * Active version of Python 2:       2.7
 * Active version of Python 3:       3.4
 * Globally supported Python ABIs in installed repositories:
 *   gamerlay:                       2.4 2.5 2.6 2.7 3.1 3.2 3.3 2.5-jython 2.7-jython 2.7-pypy-1.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0
 *   gentoo:                         2.4 2.5 2.6 2.7 3.1 3.2 3.3 2.5-jython 2.7-jython 2.7-pypy-1.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0
 *   hasufell:                       2.4 2.5 2.6 2.7 3.1 3.2 3.3 2.5-jython 2.7-jython 2.7-pypy-1.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0
 *   x-portage:                      2.4 2.5 2.6 2.7 3.1 3.2 3.3 2.5-jython 2.7-jython 2.7-pypy-1.7 2.7-pypy-1.8 2.7-pypy-1.9 2.7-pypy-2.0

 * No packages need to be reinstalled.

shell-script ★★★★★ ()

Посмотрел в /tmp/portage параллельно с harfbuzz ещё гит компилялся. А вот как определить, что в этот момент устанавливалось, интересно. Тогда, может получится этот пакет отдельно собрать на другой машине и поставить.

shell-script ★★★★★ ()
Ответ на: комментарий от yars068
└─> df -h | grep '/tmp'
/dev/sdb7           11G         143M   11G            2% /tmp

А /var/ разве используется при обновлении мира? У меня винт, если что по-старинке много лет назад разбит, там /tmp отдельным разделом без всяких новомодных симлинков. :) Переразбивать лень пока.

shell-script ★★★★★ ()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Попробуй сам пайтон запустить. $ python Если не запустится, то надо смотреть, что изменилось (eselect news read), может, что-то есть, что надо обновлять в первую очередь, м.б., сам emerge и его зависимости.

yars068 ★★★★ ()
Ответ на: комментарий от yars068

Питон работает. А вот обновить ничего не могу, потому как emerge валится с этой ошибкой при попытке посчитать зависимости по юзам. Экспериментально сейчас попробовал сперва поставить пакет, у которого есть юзы - ошибка. Взял переустановил тот же python-updater - всё отлично.

shell-script ★★★★★ ()
Ответ на: комментарий от shell-script

Используется.

Переразбивать лень пока.

Зачем переразбивать? Наоборот, так даже лучше. С SSD, конечно, обновление пошустрее будет, но если некритично, можно оставить как есть.

yars068 ★★★★ ()
Ответ на: комментарий от Kroz

Держи. Как видно, кроме /home/ везде место есть(надо почистить, кстати).

└─> df -h
Файловая система Размер Использовано  Дост Использовано% Cмонтировано в
/dev/root          1,9G         326M  1,4G           19% /
devtmpfs            10M            0   10M            0% /dev
tmpfs              396M         552K  395M            1% /run
shm                2,0G            0  2,0G            0% /dev/shm
cgroup_root         10M            0   10M            0% /sys/fs/cgroup
/dev/sdb2          966M          67M  850M            8% /boot
/dev/sdb5           28G          16G   11G           61% /usr
/dev/sdb6           11G         3,6G  6,8G           35% /var
/dev/sdb7           11G         143M   11G            2% /tmp
/dev/sdb8           11G         542M  9,8G            6% /opt
/dev/sdb9          394G         370G  3,4G          100% /home
none               2,0G            0  2,0G            0% /run/user/1000

shell-script ★★★★★ ()

Рекомендую переходить на Void.

slon ()
Ответ на: комментарий от shell-script

ну, хз, наверное, ещё дело в том, что пред этим я питон и портаж пересобрал, может ещё и это помогло.

Deleted ()
Ответ на: комментарий от Deleted

Как я уже писал, не могу пересобрать ни одного ебилда, у которого есть USE-флаги. Если я правильно понимаю, когда я прервал обновление, по какой-то причине сломалось что-то в базе установленных пакетов и теперь портеж не может просчитать, кого и с чем собирать. Поэтому мне кажется, что вариант загрузиться с live-cd и пересобрать оттуда тоже не вариант - база-то моя битая. Вот как бы её теперь починить, вопрос.

Хотя это только догадки, я с внутренностями портежа довольно поверхностно знаком.

shell-script ★★★★★ ()
Ответ на: комментарий от shell-script

попробуй удалить, а перед этим забекапить, /var/db/pkg.

хотя, это всё странно, у меня оно начало глючить так: сначала, просто чрез раз выдавала такие ошибки, потом всё чаще и чаще, но даже тогда можно было что-то раза с 10-ого собрать, потом васче перестало всё работать, удалил /usr/portage, помогло, хотя и наверное, не с первого раза.

Deleted ()

Удаление /var/cache/edb тоже не помогло.

shell-script ★★★★★ ()
Ответ на: комментарий от Deleted

Тоже бесполезно.

Я вот сейчас посмотрел, оказывается портаж обновился до 2.3.2 именно в процессе этого обновления, если верить qlop. Судя по гиту портажа исключение с этой ошибкой добавили только в прошлом месяце. Может бага? И может стоит попробовать откатиться на 2.3.0 для проверки?

shell-script ★★★★★ ()
Ответ на: комментарий от shell-script

попробуй откатиться, но у меня такое было только на одном из трёх компов. все трое на ~.

кста, ты откуда синхронизируешь дерево?

Deleted ()
Последнее исправление: Lifun (всего исправлений: 1)
Ответ на: комментарий от Deleted

Откатился до 2.3.0. Сейчас заново сборку мира запустил, там полторы сотни пакетов, так что посмотрим, нормально соберётся, но известно будет позже.

Теперь же надо подумать, как написать багрепорт.

shell-script ★★★★★ ()
Ответ на: комментарий от shell-script

переходи на гит, что на гитхабе gentoo-mirror.

на форумах была тема с такой же проблемой, даж писал там, а найти не могу :(. её, вроде бы, решили как-то.

Deleted ()
Ответ на: комментарий от Deleted

Ну, как сборка закончится, надо будет переключиться.

Думаю, задачу можно считать решённой. Спасибо всем отписавшимся за подсказки!

shell-script ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.