Changing the CHOST variable/ru

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

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

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

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

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

Проверяем, что всё работает
Now it is time to make sure that your  and   settings are sane and you do not have any leftovers in.

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

Next, check to see if there are references to the old CHOST in :

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

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

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

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

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

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

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

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

Завершение изменений
Now it is necessary to re-emerge  and run. Make sure to use the correct gcc version (your current one, 4.1.1 here) and pass your old architecture (i386 here) as argument. Replace $CHOST with your new CHOST, and  with your gcc version. This example assumes a CHOST of i686.

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

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

All packages using perl install to the CHOST directory and hence need remerging. In case you haven't installed, you will need to install  first.

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

Известные проблемы
При обновлении с 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.

Вы можете посмотреть, какие пакеты нуждаются в пересборке после обновления GCC в нашем руководство по обновлению GCC.

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.

Обратная связь
На этом, должно быть, всё. Отзывы (как в случае, если это сработало, так и в случае неудачи или неожиданных проблем) приветствуются: пожалуйста, пишите на e-mail или на форуме в этом треде. Многое в этом руководстве сделано участником vapier, спасибо за помощь!

Благодарности
Мы хотели бы поблагодарить следующих авторов и редакторов за их вклад в это руководство:


 * Wernfried Haas
 * Mike Frysinger
 * Chris White