Что описывает этот документ?
Данный документ описывает каким образом можно перевести 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 Далее самая опасная операция:
# setenv SLICE wd0s1 # disklabel -B -b /boot/boot1 -s /boot/boot2 $SLICE Если данная операция завершилась нормально, инсталлируем новое ядро: # cd /sys/compile/MY_KERNEL # make install После перезагрузки (в момент загрузки FreeBSD) вы увидите следующее: >> FreeBSD/i386 BOOT