Приведение в порядок /var/lib/portage/world

В world должен быть список программ, которые нужно доустановить к тем, которые уже входят в "system" (т.е. в текущий профайл).

  • в world не должно быть никаких библиотек, и т.д., которые не нужны сами по себе, а нужны только для удовлетворения чьих-то зависимостей (чтобы не продолжать устанавливать/обновлять их, если они уже станут не нужны по какой-то причине);
  • программ, которые уже входят в "system", не должно быть в world;
  • в world нельзя указывать определенную версию софта, это лучше делать в /etc/portage/package.mask;
  • перед серьёзными обновлениями желательно просмотреть /etc/portage/*, т.к. там могут быть уже не актуальные записи мешающие текущему обновлению.

Обновление profile

Не каждый Gentoo release включает в себя новый profile (например, 2004.1 был без profile).

Даже если новый profile есть, то переходить на него не обязательно (если это будет обязательно, то старый профайл будет "протестующий" (deprecated) и emerge об этом должен будет громко кричать).

Инструкции по обновлению profile будут выкладываться здесь: http://www.gentoo.org/doc/ru/gentoo-upgrading.xml и как правило сводиться к изменению симлинка /etc/make.profile

USE-флаги

Запустить emerge -uDpv --newuse world и проверить что USE-флаги для всех пакетов выставлены корректно, и при необходимости скорректировать

USE-флаги выставляются в /etc/make.conf и /etc/portage/package.use
Запуск обновления системы (если не нужно обновлять toolchain)

Если

emerge -puDav --newuse world

показывает что будет обновляться пакет входящий в toolchain (linux-headers, glibc, binutils или gcc), то крайне рекомендуется полностью перекомпилировать всю систему - см. следующий пункт - а иначе можно вместо следующего пункта просто запустить:

emerge -uDav --newuse world

Обновление одного из пакетов входящих в toolchain

Если обновляется хотя-бы один из linux-headers, glibc, binutils или gcc, то рекомендуется пересобрать их дважды, после чего весь system, после чего весь world.

Примечание: Цель двойной компиляции toolchain - получить гарантированно стабильный и корректный toolchain не зависящий от предыдущего. Перекомпилировать system/world после этого жёсткой необходимости нет, по крайней мере если остальной софт продолжает работать (возможно даже используя библиотеки из старого toolchain - см. предыдущие пункты об апгрейде).

Цель перекомпиляции system/world - чтобы весь софт получил потенциальное преимущество от установки нового toolchain. system перекомпилируется перед world из тех-же соображений, т.к. при компиляции программ из world используются утилиты из system.

Если увеличивается первая или вторая цифра версии gcc, то перед второй сборкой нужно переключиться на новую версию через gcc-config - иначе новый gcc просто установится параллельно со старым в "новый слот", но по умолчанию использоваться будет старый.

При сборке system после двойной перекомпиляции toolchain нет необходимости опять компилировать toolchain как часть system. Аналогично при сборке world после system нет небходимости опять компилировать пакеты из system как часть world. Это можно попробовать обойти либо вручную, либо используя скрипты [1], либо через бинарные пакеты и `emerge -k` (я предпочитаю последний вариант).

Итак, рекомендованный набор команд:

для того, чтобы безопасно использовать `emerge -k` нужно очистить каталог с текущими бинарными пакетами
pkgdir=$(portageq pkgdir)
rm -rf $pkgdir

первая сборка toolchain
emerge -1 linux-headers glibc binutils gcc-config gcc

выбрать новый gcc если он установился в новый слот, см. `gcc-config -l`
gcc-config имя_или_номер_нового_gcc
source /etc/profile

emerge -1 libtool

компиляция toolchain с созданием бинарных пакетов
emerge -1b glibc binutils gcc portage

не компилить glibc, binutils и gcc
emerge -1bke system

не компилить предыдущие пакеты (включая system)
emerge -1bke world

Чисто теоретически существует пакет binutils-config, который когда-нибудь может потребоваться использовать аналогично gcc-config.

Удаление неиспользуемых пакетов.

После обновления системы в ней могут оказаться пакеты, которые никто не использует. Эти пакеты желательно удалить, т.к. они не будут в дальнейшем обновляться при `emerge -uDav --newuse world`.

emerge -a depclean

После обновления библиотек может потребоваться перекомпилировать программы, которые эти библиотеки используют:

revdep-rebuild