gentoo@localhost # emerge @world || fix blocks

И снова здравствуйте! Не прошло и трёх лет (а нет, прошло) как мне очень захотелось обновить всё что катится, а всё что не катится покатить и тоже обновить. Пришло время моей gentoo сделать очередной rolling realise, знаете ли.

Вот уже третьи сутки пойдут скооро, а к заветному сабжу ещё даже не удалось подступиться, всё всякие зависимости и их блокировки, знаете ли rolling release всё же!


В интернетах получилось найти удивительную комбинацию неадекватного безумия и бесконечной гениальности:

emerge -1av $(equery depends <package-name> | sed 's/-[0-9]\{1,\}.*$//')

Допустим случилось невероятное и у вас возник блок пакета, типа emerge в общем-то и не против поставить уже новую версию пакета, но старая версия очень уж нужна другим пакетам:

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

sys-libs/readline:0

  (sys-libs/readline-8.0_p1:0/8::gentoo, installed) pulled in by
    >=sys-libs/readline-8.0:0= required by (app-shells/bash-5.0_p11:0/0::gentoo, ebuild scheduled for merge)
    ^^                  ^^^^^^                                                                                                                                                        
    sys-libs/readline:0/8= required by (app-text/hunspell-1.7.0-r1:0/1.7::gentoo, installed)
                     ^^^^^                                                                                                      
    (and 10 more with the same problems)

  (sys-libs/readline-7.0_p5:0/7::gentoo, ebuild scheduled for merge) pulled in by
    sys-libs/readline:0/7=[abi_x86_32(-),abi_x86_64(-)] required by (dev-db/sqlite-3.29.0:3/3::gentoo, installed)
                     ^^^^^                                                                                                                           
    (and 12 more with the same problem)

Вариантов решения такой проблемы как бы три:

1) Удалить пакет и забыть, а emerge там как-нибудь сам что-нибудь сделает, но такое можно сделать сильно невсегда

2) Форсировать обновление одного пакета игнорируя зависимости, но тоже такое:

emerge -1av --nodeps sys-libs/readline:0

3) Обновить вручную все те пакеты что требуют старую версию пакета. Вот именно тут приходит на пользу строка упомянутая выше. Она, конечно, не обновляет все пакеты которые требуют старую версию, зато она просто обновляет все пакеты которым нужен указанный пакет. ВО-С-ХИ-ТИ-ТЕ-ЛЬ-НО:

emerge -1av $(equery depends sys-libs/readline:0 | sed 's/-[0-9]\{1,\}.*$//')

Случаются удивительные курьезы с версиями пакетов, например вот мне рассказывают что мой текущий пакет очень-очень устаревший, нужно очень-очень срочно его обновить:

- sys-libs/binutils-libs-2.32::gentoo (masked by: package.mask)
# If you still use one of these old toolchain packages, please upgrade (and
# switch the compiler / the binutils) ASAP. If you need them for a specific
# (isolated) use case, feel free to unmask them on your system.

Но на что же нам предлагают его обновить то?

[ebuild     U  ] sys-libs/binutils-libs-2.32-r1:0/2.32::gentoo [2.32:0/2.32::gentoo] USE="nls -64-bit-bfd -multitarget -static-libs" ABI_X86="32 (64) (-x32)" 20,431 KiB

Ага, то есть 2.32 плохо, а вот 2.32-r1 — это прям вот то что нужно, на острие!

Причём сам пакет замаскирован:

If you still use one of these old toolchain packages, please upgrade (and switch the compiler / the binutils) ASAP.

Affected packages: <sys -devel/gcc-5.4>, <sys-libs/glibc-2.28>, <sys-devel/binutils-2.32-r1>, <sys-devel/binutils-hppa64-2.32-r1>, <sys-libs/binutils-libs-2.32-r1>

Удивительный @world!

2019.09.06 03:30