HOWTO Полное обновление системы

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск
Вернуться в раздел руководства

Посоветовать или спросить,
пожаловаться или поблагодарить
можно на странице обсуждений.
Обсуди эту статью на форуме Gentoo.ru

Содержание

[править] Приведение в порядок /var/lib/portage/world

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

  • в world не должно быть никаких библиотек, и т.д., которые не нужны сами по себе, а нужны только для удовлетворения чьих-то зависимостей (чтобы не продолжать устанавливать/обновлять их, если они уже станут не нужны по какой-то причине)
  • программ, которые уже входят в "system", не должно быть в world
  • в world нельзя указывать определенную версию софта, это лучше делать в /etc/portage/package.mask
  • скрипт regenworld может помочь восстановить world путем анализа /var/log/emerge.log и генерации на его базе файла world (он перезапишет текущий world!)
  • скрипт dep -p -w (входящий в состав пакета udept) поможет найти избыточные записи в world(которые всё-равно нужны другим записям в world или входят в system).
  • Перед серьёзными обновлениями желательно просмотреть /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

[править] Некоторые причины не использовать emerge -U вместо -u

  • Причина 1: Проблемы со SLOT

Это, к примеру, происходит потому, что некоторые люди хотели gimp-2 вместо gimp-1.2. Представьте ситуацию, где gimp-1.2 помечен stable и находится в SLOT 1, gimp-2 помечен unstable и находится в SLOT 2. Теперь при выполнении ACCEPT_KEYWORDS=~x86 emerge gimp получите gimp-2.

Позже, когда вы посчитаете, что наступило время обновить свою систему чем-либо похожим на "emerge -U world", эта команда установит gimp-1.2, потому, что gimp находится в world-файле, и флаг "-U" не обрабатывает SLOT должным образом.

  • Причина 2: Проблемы, в случае удаления ebuild-ов с Portage-дерева.

Допустим, в Portage находятся 2 версии пакетов foo, foo-1.4 (помеченный как stable) и foo-1.6 (помеченный как unstable). Вы хотите вариант unstable и делаете emerge, как с вышеуказанным gimp. Позже обновляете world как было сказано выше, но в промежутке этого времени вышло критическое обновление для foo-1.6 - foo-1.6.1. Теперь появляется несколько возможностей обработки.

  1. foo-1.6 был удален из Portage. Будет установлен foo-1.4, несмотря на "снижение" версии вместо флага "-U"
  2. Ситуация будет еще хуже, если foo-1.6 не был удалён из Portage по какой-либо причине: foo-1.6 (тот, что с критической уязвимостью) будет оставаться на вашей системе до тех пор, пока не будет помечено stable что-либо выше чем foo-1.6.
Предупреждение: Не рекомендуется использовать ACCEPT_KEYWORDS=~x86 emerge foo о чем можно почитать здесь http://www.gentoo.org/doc/ru/gentoo-amd64-faq.xml#keyword

[править] Обновление одного из пакетов входящих в 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` нужно очистить
# каталог с текущими бинарными пакетами
# (напр., переместить его в /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 -uDav --newuse world` в системе могут оставаться

устаревшие пакеты с дырами в безопасности - в слотах!

glsa-check -l | grep '\[N\]'
emerge ... # если нужно

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

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

emerge -a depclean # очень осторожно!!!
  • После обновления библиотек может потребоваться перекомпилировать программы, которые эти библиотеки используют:


Примечание: Для glsa-check, revdep-rebuild необходимо установить пакет gentoolkit
rm /root/.revdep-rebuild*.?_*
revdep-rebuild -p
revdep-rebuild

[править] Обновление конфигов.

dispatch-conf
  • Отслеживание важных сообщений при установке пакетов.

В процессе emerge system и emerge world выдаётся очень много сообщений, причём важные комментарии перемешаны с командами компиляции. В старых версиях portage отследить их при сборке нескольких пакетов одновременно не было возможно. В новых версиях, программа emerge собирает их, и выдаёт повторно все вместе по окончании сборки цепочки пакетов, по какой бы причине она не закончилась - из-за ошибки при сборке какого-то пакета или просто по окончании цепочки.

Есть одно исключение. Если в цепочку входит сам пакет portage, после сборки этого пакета сборке программа перезапускает сама себя. При этом, сразу после установки portage выдаётся первая часть сообщений (относящихся к пакетам, которые были собраны до portage, и к самой portage), а после сборки остальной цепочки - все остальные сообщения.

Так или иначе, все эти сообщения можно получить из log-файлов после окончания установки emerge world. Для этого нужно использовать либо enotice, либо portlog-info.

Личные инструменты