Changing the CHOST variable/ru

Данный документ объясняет, как изменить переменную CHOST на существующей системе.

Введение
Изменение CHOST может доставить много «головной боли» и серьезно испортить вашу систему. Зачем тогда нужно данное руководство?

Существуют ситуации, когда изменение CHOST необходимо. К примеру, вы хотите обновить библиотеку glibc до версии 2.4, которая поддерживает nptl, но в CHOST — i386, что делает использование nptl невозможным. В данном случае у вас не так уж и много возможностей, и изменение CHOST — это одна из них.

Проблемы могут возникнуть, даже если следовать этим инструкциям, так что, пожалуйста, внимательно читайте и очень тщательно выполняйте их. В данном примере мы изменим CHOST с i386 на i686. Если вы делаете другое изменение, то, пожалуйста, скорректируйте команды соответствующим образом.

Собираем пакеты
Сначала отредактируйте файл, изменив значение CHOST на то, которое вам необходимо. Затем пересоберите пакеты в данном порядке:

Проверяем, что всё работает
Пришло время проверить, что настройки  и   в порядке, и никакого «мусора» в  не осталось.

Вывод  и   должен выглядеть следующим образом (может отличаться в зависимости от вашей версии gcc и значения CHOST, здесь gcc 4.1.1 и i686):

Теперь проверим, остались ли указания на старый CHOST в :

Перед удалением файла проверьте файлы с новым CHOST:

Всё выглядит хорошо, так как для  всегда должен быть только один файл в  (например, 05gcc), так что удалим файл с ошибочными указаниями:

Аналогично поступим с файлами : если существует больше одного файла, смотрим, который является устаревшим и удаляем его. Далее, проверьте.

Выглядит отлично, эти два файла и должны быть тут. Пришло время заглянуть в каталог gcc.

Файлы и  в порядке, а  — «мусор», который нужно удалить.

Теперь запустите следующую команду для обновления переменных среды:

Проверим, что всё в порядке:

Если что-то нашлось, значит вы пропустили какие-то файлы. Разберитесь с ними перед тем как продолжить.

Завершение изменений
Теперь нужно пересобрать  и запустить. Убедитесь, что указали правильную версию gcc (текущую выбранную, здесь 4.1.1) и вашу старую архитектуру (здесь i386). Замените $CHOST новым значением переменной CHOST, а  вашей версией gcc. Следующий пример подразумевает CHOST=i686.

Если хотите, можете пересобрать все пакеты в системе:

Теперь всё сделано, теоретически. Но нет 100% гарантии, что так и будет. Если вы не пересобирали цель world, то вам нужно перекомпилировать как минимум следующий набор пакетов:

Все пакеты, использующие perl устанавливаются в каталог, связанный с CHOST, а значит, требуют пересборки. Если в системе не установлен, установите сначала.

Если вы обнаружили пакет, который также требует пересборки, то, пожалуйста, дайте знать автору этого документа.

Известные проблемы
При обновлении с gcc 3.3 до 4.1 одновременно с изменением CHOST (и всё же, пожалуйста, не делайте этого), пара пользователей сообщала о «битых» пакетах, которые нуждаются в пересборке, таких как groff и courier:

Error messsage

This happens because during the upgrade, the CHOST doesn't exactly match CTARGET and the compiler assumes cross-compiling. As a consequence, LDPATH isn't inserted into, resulting in this error.

Please see our GCC upgrade guide for what needs to be rebuilt after a GCC upgrade.

In some rare cases, this can break old versions of python, too. This may be fixed by adding (change accordingly to your old chost and gcc version) to , running   and then. However, as you can see, you really should avoid running into this problem - don't change CHOST and your gcc version at the same time.

Feedback
That should be all, feedback (both if it worked, failed or other problems were encountered) is welcome, please send an email to or post to this forums thread. Much in this howto comes from vapier, thanks for your help!

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Wernfried Haas
 * Mike Frysinger
 * Chris White