Глобальное обновление Gentoo

Материал из Belgorod Linux User Group - Белгород

Перейти к: навигация, поиск

Gentoo: Глобальное обновление

смена CHOST, CFLAGS, make.profile, обновление gcc, установка nptl, переход на unicode, xorg-x11-7.0

  • Как правильно изменить CHOST? Какими будут последствия?
  • Какими выставить CFLAGS, CXXFLAGS для вашего типа процессора?
  • Как правильно перейти на новую ветку компилятора gcc (к примеру с 3.3.5 на 4.4.1)?
  • Как установить новый профиль Gentoo, сменив его на 2006.0?
  • Как перейти на nptl?
  • Как перейти на UTF8 локаль?
  • Как перейти с xorg 6 на xorg 7?

Статья рассказывает о том как правильнее обновить старую систему Gentoo Linux, переведя ее на самые свежие пакеты. Показывает как это можно сделать корректнее, с какими проблемами можно столкнуться и как их решить. Ценность статьи в том, что написана она на собственном опыте, а не теоретически.

Итак, приступим. Дано: старая система Gentoo Linux (к примеру 2005.0), возможно установленная со stage3 и не оптимизированная. Требуется получить: свеженькую систему наподобие 2006.0, с самыми свежими (даже unstable) пакетами.

Содержание

Шаг 1. Обновляем порты

Начнем с обновления дерева портеджей:

emerge --sync

Данная команда обновит все дерево, скачав новые ebuild-ы и удалив лишние из вашего PORTDIR (обычно это /usr/portage, подробнее см. /etc/make.conf). В принципе можно скачать и полностью новый snapshot дерева ( к примеру от сюда: http://mirror.aiya.ru/pub/gentoo/snapshots/ или http://ftp.chg.ru/pub/Linux/gentoo/snapshots/), удалить старое дерево и распаковать на его место новое (не забыв конечно же сохранить свою папку distfiles).

Шаг 2. Обновляем программу portage

Далее желательно обновить и саму программу portage:

ACCEPT_KEYWORDS="~x86" emerge portage

ACCEPT_KEYWORDS="~x86" Означает принятие нестабильной (unstable) версии программы.

Шаг 3. Чистим хлам

Мы будем пересобирать и обновлять "мир". Это так сказать "избранное", т.е. те программы, которые были установлены пользователем и должны обновляться при emerge world. Все эти программы перечислены в так называемом worl-файле. Обычно он расположен в /var/lib/portage/world По нему желательно пробежаться глазами, дабы понять что же будет у нас пересобрано, а за одно удалить лишние давно неиспользуемые пакеты. Удалять пакеты нужно по:

emerge -C <имя_пакета>

Шаг 4. Чистим зависимости

Теперь можно очистить систему от лишних пакетов:

emerge clean
emerge depclean

Последняя команда чистит неиспользуемые зависимости, по этому с ней нужно быть осторожнее - она может удалить и нужные пакеты. Перед ее выполнением man рекомендует произвести бекап. А после нее - обязательно заглянуть в /var/log/emerge.log и просмотреть какие именно пакеты были удалены и если что – вернуть нужные.

Проблемные пакеты

После этого этапа у меня возникла циклическая зависимость (точнее даже циклическая блокировка) между пакетами shadow и pam-login, выдав что-то вроде:

[blocks B     ] sys-apps/pam-login (is blocking sys-apps/shadow-4.0.14-r3)
[blocks B     ] >=sys-apps/shadow-4.0.14-r2 (is blocking sys-apps/pam-login-4.0.14)
   

Дело в том, что в новой версии shadow уже включены функции pam-login, и она блокирует пакет pam-login. В тоже время старый pam-login блокировал shadow. Таким образом depclean удалил мне pam-login, оставив старый shadow. В результате в систему невозможно было войти. ;)

Устраняется эта проблема удалением обоих пакетов:

emerge -C shadow
emerge -C pam-login

И установкой нового shadow:

ACCEPT_KEYWORDS="~x86" emerge --oneshot shadow

Шаг 5. Смена профиля

Теперь можно перейти на новый профиль. К примеру 2006.0 Для этого сначала посмотрим какой у нас текущий профиль:

ls -FGg /etc/make.profile

должно показать что-то типа:

/etc/make.profile -> /usr/portage/profiles/default-linux/x86/2005.0/

Чтобы перейти на новый профиль надо удалить предыдущий и сделать ссылку на нужный:

# rm -rf /etc/make.profile
# ln -snf /usr/portage/profiles/default-linux/x86/2006.0 /etc/make.profile

Новый профиль (2006.0) уже перешел на использование nptl ( Родная Библиотека Потоков POSIX для Linux, подробнее на: http://www.opennet.ru/docs/RUS/nptl_design/ , http://gentoo-wiki.com/NPTL ). По этому в ваши USE-флаги в /etc/make.conf надо будет добавить параметры nptl и nptlonly. Но эти флаги работают только на CHOST >= 586, следовательно если у вас стоит там i386, предется поменять и его.

Шаг 6. Правим make.conf

Правим /etc/make.conf

Приступим. Открываем /etc/make.conf и вносим поправки:

  • В USE флаги добавляем: nptl, nptlonly, unicode
  • CHOST меняем на i686-pc-linux-gnu
  • CFLAGS меняем в соответствии с вашим типом процессора. Подробнее об этом можно почитать на http://gentoo-wiki.com/Safe_Cflags

Ну или подобрать соответствующими программами типа acovea ( http://gentoo-wiki.com/HOWTO_Acovea )

  • Если собираемся ставить нестабильную систему (unstable) добавляем флаг ~x86 так:

ACCEPT_KEYWORDS="~x86"


Шаг 7. Переход на UTF-8

Переход на UTF.

При добавлении USE-флага unicode все поддерживающие его пакеты будут пересобраны.

в файле /etc/conf.d/consolefont выставить:

CONSOLEFONT="Cyr_a8x16"
CONSOLETRANLATION="cp866_to_uni"

в файле /etc/conf.d/keymaps выставить:

KEYMAP="-u ru"
DUMPKEYS_CHARSET="koi8-r"

Внимание! В связи с переходом на OpenRC у меня отваливалась клавиатура в консоли, лечил симлинками:

ln -s /usr/bin/setfont /bin/setfont
ln -s /usr/bin/loadkeys /bin/loadkeys

Меняем локаль: в файле /etc/env.d/02locale выставить:

LC_ALL=""
LANG="ru_RU.UTF-8"

в файле /etc/rc.conf выставить:

UNICODE="yes"

в файле /etc/locales.build выставить:

ru_RU.UTF-8/UTF-8
ru_RU.UTF-8
ru_RU/KOI8-R

выполнить

env-update

Еще можно добавить unicode- шрифты:

emerge terminus-font

и к примеру в /etc/conf.d/consolefont выставить

CONSOLEFONT="ter-k14n"

После перехода на UTF-8 придется поменять шрифты в настройках системы, перейти на другие приложения (типа rxvt-> urxvt и т.п.). Ну и пересобрать ncurses, slang.

Подробнее на: http://ru.gentoo-wiki.com/HOWTO_ru_RU.utf8_Gentoo_way

Если вы не готовы к переходу на UTF-8 (нет именно необходимости в переходе на нее) – этот шаг лучше пропустить.

Шаг 8. Новый GCC

Ставим новый компилятор:

emerge gcc

Шаг 9. Выбираем новый компилятор

Меняем компилятор:

gcc-config -l

выведет список установленных в системе компиляторов по типу:

[1]   i386-pc-linux-gnu-3.3.5 *
[2]   i686-pc-linux-gnu-4.1.1

мы меняем на новый, указав его номер (в данном примере 2) или полное имя (в данном примере i686-pc-linux-gnu-4.1.1).

gcc-config 2

Шаг 10. Шнуровка

Дважды пересобираем компилятор и нужные библиотеки (по типу bootstrap-а).

emerge glibc binutils gcc
emerge glibc binutils gcc

Потом запускаем скрипт с указанием своего старого компилятора и CHOST

fix_libtool_files.sh i386-pc-linux-gnu-3.3.5-20050130 --oldarch i386-pc-linux-gnu

Вышеперечисленное не верно подробности тут [[[1]]] [[[2]]]

Шаг 11. Пересобираем систему

Пересобираем систему:

emerge -e system[/code]

флаг -e означает полную пересборку всех пакетов. Его необходимо указывать при переходе на новый компилятор и/или смене CHOST. На этом этапе пару раз у меня пересборка вываливалась, прося удалить в ручную какие-то файлы (/usr/share/xkb....). Не совпадали контрольные суммы некоторых ebuild-ов (как всегда у файлов udev), приходилось делать:

ebuild /usr/portage/sys-fs/udev/udev-094.ebuild digest

Шаг 12. Новые X11

Переходим на xorg-x11 версии 7.0.

Т.к. с недавнего времени 7.0 уже размаскировали, то для перехода достаточно будет удалить старую версию xorg-x11:

emerge -C xorg-x11

Шаг 13. Пересобираем Мир

Пересобираем Мир.

выполняем что-то на подобие:

USE="X" emerge -euDN world[/code]

флаг -e так же указывает на полную пересборку (при смене компилятора или CHOST), флаг -uD пересборку пакетов включая их зависимости, флаг N - пакеты необходимые для пересбоки при смене USE-флагов. Таким образом если вы меняли только USE флаги - можно указать только uDN, а если меняли CHOST, компилятор - то достаточно будет и просто -e.

Процесс этот достаточно долгий, зависит от установленных у вас в системе пакетов. И сборка тоже частенько вываливается с какими-либо просьбами, по этому хорошо бы добавить к ней какой-либо скрипт уведомления по типу: emerge -uDN world || send_sms_to_me.sh ;)

Шаг 14. Проверка пакетов

Проверка пакетов.

Теперь можно проверить пакеты которые не обновились, но зависят от старых библиотек. Скрипт найдет их и попытается пересобрать. Если возникают какие-либо проблемы - пакет лучше удалить, потом почистить файлы скрипта ( rm /root/.revdep-rebuild.* ) и запустить скрипт снова.

revdep-rebuild

Шаг 15. etc-update

Изменение /etc/

Обязательно после всего этого нужно либо руками (но очень тщательно), либо скриптом пробежаться по всем папкам в /etc/ на предмет файлов ._cfg_000* - это новые версии старых файлов. Их необходимо сравнить и заменить на более свежие с учетом ваших пожеланий. Обязательно заглянуть в /etc/conf.d и /etc/init.d т.к. после смены baselayout - большинство rc-скриптов поменяются! Их необходимо обновить, иначе велик шанс вообще не загрузиться. Скрипт для облегчения этой работы:

etc-update

Шаг 15. Пьем пиво

Поздравляю! Система готова. У вас теперь свеженький Gentoo Linux.


Полезные ссылки

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