Changing the CHOST variable/ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теоретически это не нужно делать и нет 100% гарантии, что это актуально в данном примере.

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

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

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

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

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

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

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

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

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