LINUX.ORG.RU

Gentoo Portage: circular references hell


0

0

Дорогой ЛОР,

Решил сейчас поставить на новую машину Gentoo. До этого, где-то с год назад, я ставил самую базовую систему, настраивал USE-флаги по вкусу, говорил ``emerge kde'' и уходил спать, а когда обогреватель помещения заканчивал отапливать комнату ебилдами — запускал кеды и там настраивал шрифты и прочие важные вещи.

Но сейчас (судя по сообщениям на форумах, с начала 2008), в Gentoo пробрался какой-то СПИД. Теперь при такой попытке на меня сваливается огромное (на целый экран с лишним) число сообщений о circular references. Нет, я понимаю, что glib с +fam хочет gamin, который хочет glib, который с +fam хочет gamin... Но неужели это нельзя, раз уж такое дело, решать автоматически, собрав сначала glib с -fam, потом gamin, а потом glib с запрошенным +fam (нехай по DEPENDS все это можно автоматом определить)?

Вопрос — дано ли мне теперь поставить Gentoo (при условии, что руками разгребать это я не буду хотя бы из принципа) или придется смириться и ставить другой дистро? Gentoo, хоть и красноглаз, но уж очень хорошо подходит под мои быдлокодерские (установка toolchain для кросс-компилирования одной командой и прочие вкусности) и железные (крайне удобно накладывать всякие патчики, не включенные в пакеты) пожелания.

In before «выбрось каку (Gentoo)», «красноглазый должен страдать», «patches welcome».

anonymous

USE=-fam emerge --oneshot dev-libs/glib
emerge --oneshot dev-libs/glib

Или (и, возможно, кошернее - чаще всего, разного рода проблеиы с зависимостями решаются именно так):

emerge -1 --nodeps glib
emerge -1 gamin

Ну и на оф. форум неплохо заглядывать:

http://forums.gentoo.org/viewtopic-t-699705-highlight-glib+gamin+circular.html

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

> А, извини, только сейчас заметил, что на форуме ты уже был и решение тебе известно. Так в чем проблема?

В том, что таких круговых зависимостей много (cups - avahi - ghostscript, скажем, и еще куча), и совершенно не хочется разгребать оно руками.

Есть ли путь как-то оно поручить автомату, сказать свое emerge kde и уйти спать, а не выступать в роли дрессированой обезъяны под руководством пакетного менеджера?

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

> Есть ли путь как-то оно поручить автомату, сказать свое emerge kde и уйти спать, а не выступать в роли дрессированой обезъяны под руководством пакетного менеджера?

1. Написать свой скрипт ;) Проблема: мне лично непонятно, по каким критериям он, например, из пары glib - gamin выберет для emerge -1 --nodeps именно glib.

2. Сменить профиль. Насколько я понял из форумных сообщений (сам с таким не столкнулся, т.к. поставил все нужные пакеты задолго до выхода 2008.0), это проблема 2008.0/desktop. Т.е. меняешь - эмерджишь, по желанию меняешь опять. Проблема: придется чуть-чуть поработать руками, профит не гарантирован.

3. Дождаться пока разработчики разрулят все косяки. Проблема: когда это случиться - ХЗ.

4. Выкинуть генту. Проблема: при всех моих плевках в адрес "родного" дистра у меня на десктопе, например, больше ничего не прижилось.

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

> Проблема: мне лично непонятно, по каким критериям он, например, из пары glib - gamin выберет для emerge -1 --nodeps именно glib.

Глупый, но действенный для простых случаев (их большинство) алгоритм: Берем, скажем, те же gamin и glib. Выбрасываем все флаги каждого пакета, не имеющего никакого отношения ни к каким соседним. В итоге имеем {'gamin': [], 'glib': ['fam']}. Делаем полный перебор всех вариантов отключения флагов (в данном случае — единственный USE="-fam", влияет на ['glib'], соответственно нужно прикинуть — но не делать — что будет после выполнения USE="-fam" emerge -1 --nodeps glib), запоминаем будущее состояние (как бы было если так собрать) и смотрим что стало с зависимостями если бы пакеты были потом собраны как надо. Если все так можно собрать — делаем, перед сборкой первого из круга делаем нужные --nodeps --oneshot-сборки.

Но эо надо лезть в недры Portage, курить как оно устроено... В общем, работа — самый оптимистичнейший минимум на месяц вечеров, если достаточно серьезно сидеть. Не та цена, за которую я хочу поставить себе Gentoo.

anonymous
()

Это очень-очень странно. Делал генту даже из слаквари - циклические депы появлялись пару раз, решались логическим анализом происходящего. Что то где то не то.

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

Черт знает, но экран зависимостей оно мне выплюнуло. Видимо я так хорошо USE-флаги подобрал.

Оно еще и вошло в soft-lockup при сборке gcc-4.3 (ни разу такого не было в жизни). Понадеюсь, что это не с железом что-то (не должно бы), а ведро багует, завтра попробую загрузиться с live-cd бубунты и собирать оттуда...

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

> Делал генту даже из слаквари - циклические депы появлялись пару раз, решались логическим анализом происходящего.

У меня примерно то же (только я ее из слаки ни разу не делал). И об описанной проблеме знаю из только из огорченных сообщений на форумах. Как уже заметил автор исходного поста, это - конкретно проблема 2008.0 (по другим сообщениям - только 2008.0/desktop). Т.е. если все нужные пакеты уже стояли до перехода на 2008.0, то ничего и не заметишь, все проблемы вылазят при clean install. Мне кажется, что разрулить руками там все можно не более, чем за полчаса, но автор занял в этом вопросе принципиальную позицию.

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

> А ты на ~arch?

Нет, размаскировал gcc и glibc. До этого 4.3.0 в том же ubuntu пользовался — ничего, работает. И имеет няшный -march=core2 (in before -funroll-loops -fvectorize-tree -fbreak-everything -O999 -fzomfg-optimized, lol)

Все остальное стабильное. На ~arch я сидел только один раз, в самом начале «gentoo'шной жизни» и мне результат не понравился.

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

> И имеет няшный -march=core2

Хых. Ну да... Еще оно умеет march=native

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

Ну вот, кстати, народ жалуется:

http://bugs.gentoo.org/show_bug.cgi?id=175808

В общем, единственный пока возможный путь (при отсутствии желания разруливать все ручками) - задизейблить мешающие флаги централизованно через make.conf, установить нужные пакеты, вернуть флаги, сделать emerge -uDN world.

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

Фактически практически то же самое сделает смена профиля на просто 2008.0, установка нужных ебилдов, возврат профиля, emerge -uDN world.

genmaxxx
()

$ emerge -pve kde-meta

...

Total: 825 packages (1 upgrade, 824 reinstalls), Size of downloads: 29,610 kB


Нет, я понимаю, что glib с +fam хочет gamin, который хочет glib, который с +fam хочет gamin...

Погляди, там glib хочет не gamin, а virtual/fam.

Попробуй не по отдельности ставить, а именно всё скопом, предварительно снеся все virtual/fam и glib.

$ emerge -pve glib

...
[ebuild   R   ] dev-libs/glib-2.16.5  USE="fam xattr -debug -doc -hardened (-selinux)" 0 kB 
...

Total: 479 packages (1 upgrade, 478 reinstalls), Size of downloads: 25,656 kB

Я несколько раз за последние пару лет сам нарывался на такие
зависимости, поднимал шум на forums.gentoo.org, а потом... сам
разгребал их достаточно легко :) И всегда это были проблемы обновления,
а не установки с нуля.

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

>> А ты на ~arch?

>Нет, размаскировал gcc и glibc

Феерический идиотизм. Я сижу на ~x86, но вот gcc и glibc как раз наоборот держу стабильные.

>И имеет няшный -march=core2 (in before -funroll-loops -fvectorize-tree -fbreak-everything -O999 -fzomfg-optimized, lol)

Пиздуй обратно на свой двач.

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