После появления preserved libs можно смело сносить всё что мешает обновлению. 2-3 года без обновлений - не вопрос. Единственное что - я бы сначала обновил system до снэпшота где-нибудт в 23, а потом заморозил компиляторы и обновил всё остальное - так в целом по времени будет так же, но меньше возмржных поломок
Ну как есть… в какой-то момент установленный portage может ничего не знать о более новых версиях EAPI для пакетов из свежего дерева и не сможет обновиться на новую версию portage.
Некоторые патчи хранятся на зеркалах пока они нужны для текущего дерева, поэтому тот же system, возможно, не получится обновить для промежуточной даты.
Я думаю вполне возможно. Правда может понадобится повозиться с Qt-пакетами, любит они сами от себя зависеть, а портадж ломается. У меня даже скрипт есть специальный с названием updateqt, раз в пол года пригождается. А что там может сломаться? Главное не перезагружаться пока всё не обновишь(а то придется из черной консоли чинить). А там, максимум пару дней возни с mask, unmask и acceptedkewords.
Дженту можно не обновлять до того момента, пока портеж не перестанет понимать ебилды. Вот тогда уже лучше пересобрать с нового стейжа. Есть варианты вытянуть и такую систему, но слишком много ручного труда будет.
Не спеша собрать себе новую генту в чруте используя /var/db/pkg как базу нужных тебе «мешков». Потому что скорее всего придется собирать с -e (как тут уже сказали) поверх старой, а оно надо?
Вообще рекомендую написать скрипт в крон, который (например в пятницу) синькнет портки и вывалит тебе на почту список мешков для обновлений.
На всякий случай уточню: в тех темах мне резонно советовали ставить с нуля. В итоге программы, которые я хотел сохранить, пришлось снести и ставить заново. С новыми библиотеками они не заработали.
И попутно, что заметного произошло в генте за последние пару лет?
Вроде, ничего существенного. Какие-то профили и ядра массово депрекейтили. CuneiForm перестал собираться.
Да, с таким долгим периодом не-обновления можно получить увлекательный квест. Я бы делал так:
Перед началом уменьшаем количество сущностей в системе: например старые уже неиспользуемые слоты gentoo-sources, gcc и т. п., может что-то забытое/ненужное в /var/lib/portage/world. В конце полирнуть emerge -av --depclean.
Далее emerge --sync && eix-update
Разобраться с ._cfg*, особенно в /etc/portage, так как некоторые пакеты могли переехать в другие категории.
Первым всегда обновляется portage
Дальше, мой личный фетиш - я обновляю всё что компилирует и интерпретирует: gcc, python, perl, haskell, clang, rust и т. п. qlist -IC dev-lang/* sys-devel/* в помощь. И, да, не забываем читать официальную вики по апгрейду (например, я надеюсь никто не думает, что gcc на мажорную версию обновляется одной командой?).
Главная цель - обновить @system, загрузчик, ядро, initrc, фирмвари (linux-firmware, intel-microcode, что у вас там ещё) - не совсем в таком порядке, ну да кто думает, разберётся. На этом этапе я временно отключаю флаги, которые тянут зависимости которые сейчас не особо нужны, например -X; остальное подскажет emerge и equery d. И обязательно читать eselect news.
Перегружаемся, естественно в консоль. Если система загрузится, сеть работает, далее, всё просто. Если нет - запасаемся кофе, и отменяем дела на ближайшие день-два.
Вот теперь можно делать emerge -avuDN world. Но лично я люблю делать по фазам: сначала обновляю все консольные утилиты, далее qt, kde-frameworks, boost, далее всё графическое, и напоследок - обновление иксов с драйверами (так как здесь могут быть проблемы). У меня это разложено по сетам.
Смену профиля я бы делал в конце. И, да, в случае 23-го профиля это предполагает пересборку мира, лол. Хотя при таком далёком обновлении я бы в любом случае мир пересобирал бы.
Я уже говорили что обязательно читать eselect news? Вот некоторые занимательные моменты:
Недавно что-то сделали с grub2, и если после обновления не сделать grub-install с замаунчеными директориями с EFI, то система просто не загрузится. Я уже на этом попался, реанимировать пришлось с загрузочной флешки.
Переход на 23-й профиль весьма витиеватый.
Если пользуетесь make install для инсталляции ядра, теперь для этого нужно явно установить sys-kernel/installkernel (раньше он шёл автоматом как зависимость).