Загрузочный каталог

В середине декабря 2002 года в систему была добавлена новая характеристика, заменяющая устаревший файл загрузки #//boot на загрузочный каталог и, взамен двоичного файла, требующего компиляции, появился сценарий.

В конфигурационном файле ядра появился новый раздел под названием «bootdir», который содержит список файлов, заменяющих #//boot. В каталоге #/ больше нет двоичных файлов.

Типичный раздел bootdir выглядит примерно вот так:

который сообщает, что каталог /boot содержит четыре файла: boot, ipconfig, factotum, kfs и cfs, скопированные из указанных источников.

Все ядра имеют специальный файл boot$CONF.out, указывающий на загрузочные файлы в /boot.

Теперь, когда все находится в /boot, для всех ядер был изменен initcode; /boot/boot изменен для выполнения /boot/ipconfig (взамен /ipconfig), и т.п. Наконец, изменениям подвергся auth_getkey, теперь для работы с любым типом ядра он сперва выполняет поиск /factotum, а затем /boot/factotum.

Загрузочный файл /386/bin/ip/ipconfig переключается на _386_bin_ip_ipconfig.root.s, а затем _386_bin_ip_ipconfig.root.8. Немного уродливое имя, но mk нормально обрабатывает его. Одно неудачное последствие большого имени — это то, что _386_bin_auth_factotum.root.s является слишком длинным для соединения с текущими файловыми серверами. Вы конечно можете использовать сервер lnfs для работы, но я бы не стал. Для устранения зависимости от lnfs(4) при постройке ядер в файл portmkfile было добавлено новое правило, которое копирует factotum и ipconfig в factotum.hack и ipconfig.hack. После этого раздел bootdir выглядит примерно так:

грустно (!), но проблема устраняется при использовании именно длинных имен файлов.

Pc initcode также был изменен, поскольку до этого он обычно делал:

на ассемблере (pc/initcode.s), сейчас он делает:

на С (port/initcode.c). Указатель устанавливает достаточное пространство имен, когда /boot/boot может быть сценарием оболочки. В конечном счете другие архитектуры также должны изменятся.

Другим примером является ядро под названием pcext, построенное мною однажды ночью. Оно использует rx и trampoline для соединения через шлюз машины Plan 9 к корневому файловому серверу. В нем используется такой bootdir:

(также не требует lnfs для постройки).

Srvthru — очевидная в этих случаях программа: она подключается к rx, производит аутентификацию, запускает trampoline на настоящем файловом сервере, а затем подключает cfs к соединению.

Указателем является сценарий оболочки bootext, существенно упрощающий работу:

Он заботится обо всем, что традиционно делает /boot, используя srvthru как путь установки /srv/boot (а также /srv/emelie).

Copyright © 2003 Перевод Андрей С. Кухар. Последняя модификация 22.08.2003