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.

Note that profiles provide a default setting for CHOST ; depending on the situation, it may be necessary to override it in or remove an override in. In any case, the important point is that the effective value changes.

Please note that if planning to use another value of CHOST than the profile default, the CHOST_${ABI} variable may need updating as well. It is possible to query the value of this variable of the currently set profile with the portageq tool:

If this value is equal to CHOST, it's good. Otherwise, override it as well, e.g.:

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

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

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

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

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

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

Time to move on to the directory.

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

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

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

Завершение изменений
Теперь нужно пересобрать и запустить, который можно найти в. Убедитесь, что указали правильную версию 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, it is possible to 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 paths that do not apply to the current system may need removing from the above invocation.

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

Известные проблемы
Not so many anymore. Usually this just works, as long as no really exotic change is done. Make sure to not combine the CHOST change with other steps though. Some of the notes below are really old...

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

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

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

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

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