Фэндом


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

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

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

bootdir
	bootpcdisk.out boot
	/386/bin/ip/ipconfig
	/386/bin/auth/factotum
	/386/bin/disk/kfs
	/386/bin/cfs

который сообщает, что каталог /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 выглядит примерно так:

bootdir
	bootpcdisk.out boot
	ipconfig.hack ipconfig
	factotum.hack factotum
	/386/bin/disk/kfs
	/386/bin/cfs

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

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

exec("/boot", ["boot", 0]);

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

open("#c/cons", OREAD);
open("#c/cons", OWRITE);
open("#c/cons", OWRITE);
bind("#c", "/dev", MAFTER);
bind("#ec", "/env", MAFTER);
bind("#e", "/env", MCREATE|MAFTER);
bind("#s", "/srv", MREPL|MCREATE);
execl("/boot/boot", "/boot/boot", 0);

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

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

bootdir
	bootext boot
	/386/bin/rc
	/rc/lib/rcmain
	/386/bin/bind
	/386/bin/cat
	/386/bin/cp
	/386/bin/echo
	/386/bin/mount
	/386/bin/sleep
	factotum.hack factotum
	/386/bin/ip/ipconfig
	/386/bin/cfs
	/386/bin/aux/srvthru

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

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

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

#!/boot/rc -m /boot/rcmain

cd /boot
cp '#r/rtc' '#c/time'
bind -a /boot /bin
bind -a '#I' /net
bind -a '#l0' /net
bind -a '#S' /dev
bind '#p' /proc
bind '#d' /fd
bind -a /boot /
ipconfig
echo 'authdom=cs.bell-labs.com auth=204.178.31.3' >>/net/ndb
factotum -sfactotum -u -a 204.178.31.3
cargs=()
if(~ $#cfs 1 && ! ~ $cfs off)
	cargs=(-c $cfs)
srvthru $cargs tcp!204.178.31.2!17009 il!emelie!9fs boot emelie
mount -c /srv/boot /root
bind -ac /root /
bind -c /root/mnt /mnt
mount -a '#s/factotum' /mnt
rootdir=/root
rootspec=
/386/init -t
/boot/rc -m/boot/rcmain -i	# in case init fails

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

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

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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

Также на Фэндоме

Случайная вики