Bug #640
Блокировки в бинарном профиле
Status: | New | Start: | 03/20/2014 | |
---|---|---|---|---|
Priority: | Urgent | Due date: | ||
Assignee: | - | % Done: | 0% |
|
Category: | - | Spent time: | - | |
Target version: | - | |||
Votes: | 0 |
Description
При обновлении часто возникают блокировки из-за того, что у пакетов изменились флаги, но эти флаги когда-то требовали другие пакеты. Сейчас уже не требуют, но бинарник был собран давным давно и его зависимости остались без изменений.
Чтоб было понятнее, поясню на примере sys-auth/polkit-kde-agent
Год назад он требовал dev-qt/qtgui с флагами accessibility и dbus, сейчас зависимость от qtgui из ебилда убрали, но версия не поменялась.
Судя по всему, именно из-за этого и не был пересобран пакет и в кеше по-прежнему старые зависимости.
polkit-kde-agent был собран аж 01.04.2013 и с тех пор не обновлялся.
Как-то нужно это отслеживать, т. к. эта проблема штатными средствами portage не решается никак. Ну или я не смог найти решения. А я хорошо искал.
Возможным решением может быть копирование таких пакетов в оверлей и незначительная смена их версии, чтобы они могли штатно пересобраться.
History
Updated by Артём Власов over 10 years ago
Ещё одним решением может быть правка файла Packages
в каталоге с бинарными пакетами, но это неразумно.
Ведь если мы знаем, что поправить, то знаем, что нужно пересобрать. Остается просто сделать это.
Updated by Артём Власов over 10 years ago
Нашел более-менее приемлемое решение, как обойти проблему при обновлении:
1. Выполняем
emerge -ep world
Появится сообщение о блокировке. Например такое:
emerge: there are no ebuilds built with USE flags to satisfy ">=dev-qt/qtgui-4.7.4:4[accessibility,dbus]". !!! One of the following packages is required to complete your request: - dev-qt/qtgui-4.8.5-r1::gentoo (Missing IUSE: dbus) - dev-qt/qtgui-4.8.5-r1::gentoo (Missing IUSE: dbus) (dependency required by "net-irc/konversation-1.4" [binary]) (dependency required by "@selected" [set]) (dependency required by "@world" [argument])
Смотрим самую верхнюю строчку, начинающуюся с 'dependency required by' и копируем имя пакета. В данном случае это net-irc/konversation
Снова выполняем предыдущую команду, но дополняем её параметром --usepkg-exclude 'net-irc/konversation'
. Имя пакета обязательно в кавычках. Если пакетов несколько (см. ниже), имена разделяются пробелами.:
emerge -ep world --usepkg-exclude 'net-irc/konversation'
Если снова получили блокировку, аналогичным образом добавляем к флагу --usepkg-exclude очередное имя:
emerge -ep world --usepkg-exclude 'net-irc/konversation kde-misc/kde-gtk-config'
Повторяем до тех пор, пока emerge не перестанет выдавать сообщения о блокировках.
Затем меняем -ep на -uND и спокойно обновляемся.
Например прямо сейчас, чтобы обновиться, мне пришлось выполнить это:
emerge -uND world --usepkg-exclude 'net-p2p/ktorrent net-irc/konversation net-libs/libktorrent app-cdr/k3b kde-misc/synaptiks sys-auth/polkit-kde-agent sys-auth/polkit-qt dev-libs/libdbusmenu-qt media-video/kdenlive kde-misc/openofficeorg-thumbnail media-video/kffmpegthumbnailer kde-misc/kde-gtk-config'
Updated by Артём Власов over 10 years ago
Процитирую себя же, чтоб не затерялось:
(01:27:18 PM) Yuego1: seamuz: вощщем нету от eclean-pkg толку (01:35:34 PM) Yuego1: seamuz: и по поводу твоего "финта ушами" с FEATURES: http://pastebin.calculate-linux.org/en/show/6460 (01:45:00 PM) Yuego1: seamuz: однако, http://pastebin.calculate-linux.org/en/show/6461 (01:47:32 PM) Yuego1: seamuz: и всё же, после всего проделанного выше: http://pastebin.calculate-linux.org/en/show/6462 (01:49:28 PM) Yuego1: я балбес. не тот флаг указал ) (01:52:35 PM) Yuego1: seamuz: фиг там. после того даже, как собрал бинарник принудительно, ничего не поменялось. блокировка никуда не делась (01:52:35 PM) Yuego1: в общем, выходит, emerge плевать хотел на локальный кеш. зеркало для него важнее (02:03:00 PM) Yuego1: хотя... всё сложнее. в бинпакете снова оказались те же зависимости. более того, они не в ебилде записаны. они в kde4-base.eclass автоматом дописываются в DEPEND
Updated by Сергей Федотов over 10 years ago
Та балбес, это я. Я тебя дезинформировал. Надо собирать с -b а не с -k.
--buildpkg [ y | n ] (-b short option) --usepkg [ y | n ] (-k short option)
Updated by Артём Власов over 10 years ago
Сергей Федотов wrote:
Та балбес, это я. Я тебя дезинформировал. Надо собирать с -b а не с -k.
[...]
Это-то я знаю. Только и сам головой не подумал - скопипастил. Потом-то ещё раз уже правильно всё сделал :)
Но в любом случае результат тот же - повторно даже из обновлённого пакета не хочет ставить.