В началоHOWTO Полное обновление системы → Обновление одного из пакетов входящих в toolchain
Gentoo-doc HOME Пред.: Некоторые причины не использовать emerge -U вместо -uВ началоУровень выше: HOWTO Полное обновление системыСлед.: Обновление безопасности.

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

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

Примечание

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

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

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

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

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

Листинг 1. Рекомендованный набор команд

# для того, чтобы безопасно использовать `emerge -k` нужно очистить
# каталог с текущими бинарными пакетами
# (напр., переместить его в /tmp/portage-packages)

pkgdir=$(portageq pkgdir)
mv $pkgdir /tmp/portage-packages1
install -d -o portage -g portage $pkgdir

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

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

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

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

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


Примечание

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

Пред.: Некоторые причины не использовать emerge -U вместо -uВ началоУровень выше: HOWTO Полное обновление системыСлед.: Обновление безопасности.
В началоHOWTO Полное обновление системы → Обновление одного из пакетов входящих в toolchain