RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Как перевести систему от a.out к ELF (миграция с 2.X на 3.X)
Что описывает этот документ?
Данный документ описывает каким образом можно перевести FreeBSD с формата a.out на формат ELF.
Кому и почему следует сделать это?
Всем, кто использует FreeBSD и собирается в дальнейшем использовать FreeBSD. Данная операция производится один раз. Этой операцией сдедует воспользоваться потому, что поддержка версий 2.2.X закончена, а вы, скорее всего, захотите пользоваться новым программным обеспечением, поставляемым в виде портов (aka ports).
Документ будет полезен пользователям, у которых возникли проблемы при переводе ядра из формата a.out в формат ELF.
Данную операцию aout-to-elf следует проводить для старых версий FreeBSD (aka 2.2.X и 3.0-SNAP до 15.09.1998)), а пункт 3.2 будет полезен пользователям FreeBSD-3.0, желающим перейти на 3.0-STABLE.
Следует рассмотреть содержимое каталога /etc и сравнить его с содержимым каталога /usr/src/etc. Изменения, произошедшие, от версии 3.0-aout к версии 3.0-STABLE-ELF значительны.
Например: появились новые системные псевдо-пользователи (bind, tty, kmem). Система при сборке захочет воспользоваться этими пользователями, а не найдя их - сборка новой версии прекратится с сообщением об ошибке... Для проведения данной операции рекомендуется использование инструмента mergemaster из /usr/ports/sysutils.
Компиляция и установка системы в формате ELF
Перейдите в однопользовательский режим с помощью команды: # shutdown now
либо загрузите систему с опцией >-s и выполните в командной строке: # fsck -p # mount -u / # mount -a -t ufs # swapon -a
Очистите >/usr/obj: # cd /usr/obj # chflags -R noschg * # rm -rf * Проверьте количество свободного пространства : # df -k ........ >БУДЬТЕ ОСТОРОЖНЫ! Обратите внимание на количество свободного места тома /usr!!!
При переходе с формата a.out на ELF понадобится около 400Mb свободного места. (синтаксис csh) # setenv BINFORMAT aout # make aout-to-elf-build |& tee build.log
Можно выпить чашечку кофе и т.д. Данная операция займет несколько часов. После её окончания следует заглянуть в build.log и проверить наличие ошибок. Если ошибок нет - то можно проводить инсталляцию.
# make aout-to-elf-install Процесс инсталляции ELF-версии достаточно интерактивен и интуитивен. В конце концов произойдет следующее:
все "бинарники" будут заменены на аналогичными, но в формате ELF;
все библиотеки (aka libs) в формате a.out будут перенесены в соответствующие им директории на уровень ниже ../aout (например: aout-библиотеки из /usr/lib будут перемещены в /usr/lib/aout)
Компиляция и установка ядра в формате ELF
# cd /sys/i386/conf Следует рассмотреть ядро LINT. Некоторые драйверы поменяли свои название, а некоторые и вовсе были исключены.
Например: драйвер CD-ROM'а был переписан и название устройства изменено с >wcd0 на >acd0.
Итак, после исправлений в вашем ядре:
# config -r MY_KERNEL # cd ../../compile/MY_KERNEL # make depend # make # file kernel kernel: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped # После сборки ядра ОС может выдать сообщение, о том, что новое ядро собрано в формате ELF, а загрузчик вашей ОС не поддерживает ядро в этом формате.
Следует сделать следующее: узнать название загрузочного диска (например:wd0s1);
# cat /etc/fstab обязательно убедится (!!!) в существовании каталога >/boot; создать файл >/boot.config следующим образом:
# echo /boot/loader > /boot.config Далее самая опасная операция: