Changing the CHOST variable/ru

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

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

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

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

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

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

Вывод и  должен выглядеть следующим образом:

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

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

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

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

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

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

Now run the following commands to update the environment:

Next, verify everything is fixed:

If there are still files found, try to track it down before going on.

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

It is now possible to rebuild all the packages:

In theory, it should not be necessary to do so, but it cannot be 100% guaranteed that this is actually the case.

Следующие пакеты должны быть пересобраны:

All packages using perl install to the CHOST directory and hence need rebuilding. In case is not available on the system yet, install  first.

Теперь пересоберите все пакеты, которые имеют файлы установленные в директориях

When encountering other packages that need recompiling, please let us know through the |discussion page of this guide.

Известные проблемы
When upgrading from gcc 3.3 to 4.1 at the same time as changing the CHOST variable (please don't do that anyway), a couple of users reported broken packages that need recompiling, such as and :

This happens because during the upgrade, the CHOST variable doesn't exactly match the CTARGET variable value, making the compiler assume that the system is using cross-compiling. As a consequence, LDPATH isn't inserted into, resulting in this error.

Please see the 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 the old CHOST and gcc version) to, running  and then. However, as can be seen, this situation needs to be avoided - don't change CHOST and gcc at the same time.

Обратная связь
That should be all, feedback (both if it worked, failed or other problems were encountered) is welcome, please use the |discussion page or post to this forum thread. Much in this guide comes from vapier, thanks for your help!