Changing the CHOST variable/ru

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

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

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

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

Обновление make.conf
To start out with the CHOST variable change, edit the file and add/change the CHOST value to suit the requirements.

Please note that if you are planning to use another value of CHOST than the profile default, you may need to update the CHOST_${ABI} variable as well. You can query the current value of this variable via portageq tool:

If this value is equal to your CHOST, you're good. Otherwise, you should override it as well, e.g.:

Собираем пакеты
Rebuild the following packages in this order:

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

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

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

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

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

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

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

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

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

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

Если все еще находятся файлы, попробуйте отследить их, прежде чем продолжить.

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

Теперь можно пересобрать все пакеты:

In theory, it should not be necessary to do so, but it cannot be 100% guaranteed that this is actually the case. Alternatively, you can manually rebuild all the known problematic packages:
 * multilib packages using CHOST prefixing or header wrapping,
 * Perl, Python and other tools that store configured compiler path.

Note that you may need to remove paths that do not apply to your system from the above invocation.

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

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

Это происходит, поскольку процессе обновления CHOST не соответствует CTARGET, из-за чего компилятор считает что в системе используется кросс-компиляция. Как следствие, LDPATH не вносится в, что приводит к ошибке.

Пожалуйста, обратитесь к руководству по обновлению GCC, чтобы узнать какие пакеты нуждаются в пересборке после обновления GCC.

В некоторый редких случаях, могут также «сломаться» старые версии python. Это можно исправить, добавив (измените в соответствии со старым CHOST и версией gcc) в, запустите  и, затем,. Однако, как можно увидеть, этих проблем определённо стоит избегать — не изменяйте CHOST и версию gcc одновременно.

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