Обновление Calculate Linux failed

Дело в том, что, как видно по сообщениям выше - я решительно не могу понять, почему portage хочет обновиться именно до тестовой версии. Я специально этого не делал, а потому и ответить на вопрос - зачем - не в состоянии. Каким образом спрятать её обратно - тоже не знаю. На данный момент все файлы в папках /etc/portage/package.{%anyword% :slight_smile: } пусты, либо закомментированы знаком #.

увы, это от безысходности - сперва решил погуглить и попробовать исправить самостоятельно, используя опции подсмотренные в других топиках со схожими проблемами :slight_smile:

http://pastebin.calculate-linux.org/en/show/a3540cc4cf7e07377c76e98d775b00a6

тут мой косяк - добавил sudo только в первую команду и забыл в последующие. Потом исправил. Результатом, похоже, оказалось только то, что gentoolkit удалился, а вот portage обновиться так и не смог и теперь блокирует установку gentoolkit обратно. О_о

Я тут не совсем правильно выразился. Не смог найти подходящее определение.
https://old.calculate-linux.org/main/en/a_portage_introduction#Masked-packages

Как видно по Вашим логам, Вы всякий раз выполняете команды на новой версии репозитория портежей не получив положительного результата. Это неправильно.
Вы постоянно модифицируете дерево зависимостей и тем осложняете себе задачу. Остановитесь на какой-то одной версии (на той, которая есть в настоящий момент), успешно обновите систему и только потом снова можете синхронизировать портежи с центральным репозиторием.

Какова обычная схема обновления системы:

  1. Синхронизируются портежи (по сути это список доступных версий пакетов) командой emerge --sync
  2. Если есть обновление для пакета portage — обновить в первую очередь его командой emerge -1 portage
  3. Запустить обновление остальной системы командой emerge -auDN @world
  4. Переустановить пакеты из набора @preserved-rebuild командой emerge -a @preserved-rebuild
  5. Почистить систему от мусора командой emerge -a --depclean

Ровно эти действия и выполняет утилита cl-update.
Необходимо обязательно добиться успешного выполнения каждого шага.
В стандартной ситуации всё проходит без ошибок и никаких дополнительных действий не требуется.
Но у Вас особый случай — давно не обновлялись, есть размаскированные тестовые пакеты (которые могут ломать дерево зависимостей), взаимная блокировка пакетов portage и gentoolkit — поэтому придётся выполнить вручную каждый шаг.

Portage у Вас размаскированной тестовой версии (видно по логам). Первый шаг — уйти на стабильную. Вам надо найти, в каком файле размаскирован portage и обратно замаскировать его (можно командой grep -rF ‘sys-apps/portage’ /etc/portage). В вашем снимке каталога /etc/portage пакет sys-apps/portage размаскирован в файле portage/package.keywords/custom — надо его обратно замаскировать. Проверить, какая версия пакета будет устанавливаться в систему можно командой emerge -pv1 <имя-пакета>.

Что делать, если «засор не рассосался»?
Можно попробовать разгрузить систему от условно необязательных пакетов и обновиться снова.
Как понять, кто обязательный, а кто необязательный?
Все пакеты в системе собраны в пересекающиеся наборы (имеющиеся наборы можно вывести командой emerge --list-sets). Так вот, всё, что понаставлено ручками, находится в наборе @world — пришпиленные туда пакеты прописаны в файле /var/lib/portage/world. Можно сохранить копию этого файла и почистить его в текстовом редакторе от «лишних» пакетов (без фанатизма).
После этого чистим систему и пробуем обновиться:

  1. emerge -a --depclean
  2. emerge -1 portage
  3. emerge -auDN --changed-deps y @world
    После того, как обновитесь — восстановите файл world и заново запустите обновление командой emerge -auDN @world

Ну или пойти ещё сильнее — обновить всё дерево пакетов начисто командой emerge -a --emptytree @world
Главное вдумчиво читать логи команды emerge.
Как-то так…

Начинающим все равно без посторонней помощи не обойтись.

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

У него мне не ясен этот момент.
Я не уверен, но может это поможет что-то прояснить

equery y sys-apps/portage

Я кажется догадываюсь что происходит…
Смотрите, portage говорит о конфликте двух версий пакета в одном слоте:

  • sys-apps/portage-2.3.79:0/0::gentoo (строка 19 лога), которая выбрана для установки из командной строки (строка 20 лога) и, также, нужна пакету app-portage/gentoolkit-0.4.2-r1:0/0::gentoo (строка 21, надо лог смотреть в raw режиме, чтобы длинные строки были видны)
  • sys-apps/portage-2.3.19-r1:0/0::gentoo (строка 24), который притянут установленным в систему (старым) пакетом app-portage/layman-2.4.2:0/0::gentoo

В итоге пакет portage надо обновить, но его держит старый layman через зависимости.
Кстати, это было бы видно в логе команды:
emerge -C gentoolkit && emerge -1 portage && emerge gentoolkit
который @ArPi не предоставил…

Надо попробовать тронуть обновление этих пакетов командой:
emerge -1 portage gentoolkit layman
И посмотреть логи…

Я немного забылся. Это в генту. В генту с либрекадом и бустом ничего такого не происходит. Наверно из-за того что собран на gcc 8.3.0
librecad

А в CL у меня такой баг.

На днях обновлял систему Calculate 3х-летней давности.
Оставлю здесь инструкцию: Как обновлять старые Gentoo и Calculate
(может быть @ArPi пригодится)

Основная проблема для таких систем — очень старый portage и python (у меня были portage-2.3.0 и python-3.4.4). Поэтому первым делом надо получить на системе рабочий portage актуальной версии. Этого можно достигнуть установкой новой версии portage и python в отдельное виртуальное python-окружение без пакетного менеджера.
Предварительно надо синхронизировать дерево портежей старыми инструментами.
Итак:

  1. Устанавливаем python 3.6.9:
$ mkdir ~/tmp && cd ~/tmp
$ tar -xf /usr/portage/distfiles/Python-3.6.9.tar.xz
$ cd Python-3.6.9
$ ./configure --prefix=${HOME}/python-3.6.9
$ make -j $(nproc) all && sudo make install
$ ~/python-3.6.9/bin/python3 --version
Python 3.6.9
  1. Создаем виртуальное python-окружение и устанавливаем туда portage-2.3.76
$ ~/python-3.6.9/bin/python3 -m venv ~/portage-2.3.76
$ bash
$ source ~/portage-2.3.76/bin/activate
$ cd ~/tmp
$ tar -xf /usr/portage/distfiles/portage-2.3.76.tar.bz2
$ cd portage-2.3.76
$ pip install -U pip setuptools
$ python setup.py --bindir=${VIRTUAL_ENV}/bin --sbindir=${VIRTUAL_ENV}/bin --portage-bindir=${VIRTUAL_ENV}/exec-lib --mandir=${VIRTUAL_ENV}/share/man --docdir=${VIRTUAL_ENV}/share/doc
$ hash -r
$ emerge --version
Portage 2.3.76 (python 3.6.9-final-0 ...
  1. Обновляем систему
    Предварительное обновление желательно (но не обязательно) запускать на пустом @world, поскольку некоторые пакеты, собранные из исходников могут потребовать отсутствующие пока build-зависимости.
сохраняем @world
$ sudo mv /var/lib/portage/world /root/backup/
$ sudo touch /var/lib/portage/world
$ sudo VE=${VIRTUAL_ENV} -i
входим в виртуальное окружение с новым portage и обновляем всю систему целиком
$# source ${VE}/bin/activate
$# emerge -a --emptytree --autounmask-keep-masks y @world
$# eselect python update
покидаем виртуальное окружение
$# exit
$ exit
  1. После успешного обновления восстанавливаем @world и обновляемся обычным порядком командами:
$ sudo emerge -auDN @world
$ sudo emerge -a --depclean

После обновления чистим ненужный мусор в домашнем каталоге.

Все это красиво и познавательно, но по времени и по количеству манипуляций будет не меньше чем если применить стандартный виндузятниковый способ - переустановка ОС - при условии, что хомяковый раздел стоит отдельно.
Надо было сразу автору топика предложить этот способ и не мучить его т.к. есть ночные наисвежайшие сборки CL.