238 lines
8.5 KiB
HTML
238 lines
8.5 KiB
HTML
<html><head><title>Daemon News : Booting FreeBSD 5.0 on a Sun machine over the network</title>
|
||
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head>
|
||
|
||
<body bgcolor="#ffffff">
|
||
|
||
<h2>Загрузка FreeBSD 5.0 на Sun машине через сеть</h2>
|
||
<h3>Anthony Volodkin <<a href="mailto:anthonyv@brainlink.com">anthonyv@brainlink.com</a>></h3>
|
||
|
||
<h2>Введение</h2>
|
||
|
||
<p class="Normal">
|
||
За последние годы порт FreeBSD-sparc64 привлек значительное внимание разработчиков.
|
||
За годы было сделано многое; тем не менее, еще много предстоит сделать в области
|
||
поддержки устройств и устойчивости. Одним из недостатков порта FreeBSD-sparc64
|
||
является недостаточная поддержка некоторых набортных устройств SCSI, которые
|
||
используются на Sun Ultra 1, Ultra 2 и возможно других моделях. Это препятствует
|
||
распознаванию FreeBSD присоединенных дисководов и, таким образом, загрузке с
|
||
диска.
|
||
</p>
|
||
|
||
<p class="Normal">
|
||
Для того, чтобы позволить разработчикам протестировать их код, особенно драйверы
|
||
дисков, необходима загрузка машины без использования диска. FreeBSD Handbook
|
||
описывает процедуру загрузки бездисковой рабочей станции, но это не полностью
|
||
применимо к загрузке системы FreeBSD-sparc64 на машине, такой как Ultra 2. Решение
|
||
ниже вовлекает использование TFTP и поддержку ядром корневого раздела, подмонтированного
|
||
через NFS, для загрузки FreeBSD из сети.
|
||
</p>
|
||
|
||
<p class="Normal">
|
||
Наш пример установки вовлек быструю i386 машину, работающую под управлением
|
||
FreeBSD 4.7-RELEASE и Sun Ultra 2 с FreeBSD 5.0-DP2. Эта процедура применима к
|
||
широкому диапазону аппаратного обеспечения Sun и будет работать с поздними
|
||
выпусками FreeBSD 5.0.
|
||
</p>
|
||
|
||
<h2>Установка DHCPd</h2>
|
||
|
||
<p class="Normal">
|
||
Сперва нам необходимо загрузить и установить isc-dhcpd 3.x на машину, которая
|
||
также будет выступать в роли сервера TFTP/NFS. Вы можете обнаружить его в
|
||
<tt>/usr/ports/net/isc-dhcp3/</tt>. После завершения основной конфигурации
|
||
dhcpd, такой как определения подсети, диапазонов адресов IP, етс., мы можем
|
||
приступить к добавлению раздела host для машины, загружающейся из сети.
|
||
</p>
|
||
|
||
<p class="Normal">
|
||
Вот пример:
|
||
</p>
|
||
|
||
<pre> host divine {
|
||
hardware ethernet 08:00:20:89:cf:f3;
|
||
option host-name "divine.local.non-standard.net";
|
||
fixed-address 192.168.1.5;
|
||
always-reply-rfc1048 on;
|
||
filename "loader.nfs";
|
||
next-server 192.168.1.3;
|
||
option root-path "192.168.1.3:/storage3/sparc64-nfsroot";
|
||
}
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Поле <tt>filename</tt> указывает на имя файла, которое должно быть первоначально
|
||
послано машине после ее первого DHCP/BOOTP запроса. Поле <tt>next-server</tt>
|
||
определяет, какой сервер должен быть использован для загрузки ядра, используя
|
||
TFTP или NFS. Опция <tt>root-path</tt> описывает, где расположено ядро на сервере
|
||
NFS.
|
||
</p>
|
||
|
||
<h2>Установка TFTPd</h2>
|
||
|
||
<p class="Normal">
|
||
Следующим шагом мы используем встроенный демон TFTP, который поставляется с
|
||
FreeBSD. Тем не менее, конфигурация по умолчанию в <tt>/etc/inetd.conf</tt>
|
||
в данном случае не будет работать правильно. Нарушения Доступа (даже пока
|
||
соответствующие права доступа не были установлены) и другие ошибки происходят
|
||
когда клиент запрашивает "/loader.nfs" вместо "loader.nfs" или наоборот.
|
||
Для того, чтобы заставить это работать, мы должны модифицировать <tt>inetd.conf</tt>
|
||
примерно следующим образом:
|
||
</p>
|
||
|
||
<pre> tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Этим мы добиваемся цели, и запрос "/loader.nfs" становится идентичен "loader.nfs".
|
||
Теперь все что нам нужно сделать, это получить loader.nfs и поместить его в
|
||
директорию /tftpboot. Вы можете загрузить его с
|
||
<a href="http://non-standard.net/freebsd/loader.nfs">http://non-standard.net/freebsd/loader.nfs</a>
|
||
Для избежания каких-либо проблем с правами доступа, просто выполните следующее:
|
||
</p>
|
||
|
||
<pre> chown -R nobody:nobody /tftpboot
|
||
chmod -R 755 /tftpboot
|
||
</pre>
|
||
|
||
<h2>Установка NFS</h2>
|
||
|
||
<p class="Normal">
|
||
Теперь нам нужно загрузить ISO живой файловой системы с
|
||
<a href="ftp://ftp.freebsd.org/pub/FreeBSD/ISO-IMAGES-sparc64/5.0-DP2-disc2.iso">ftp://ftp.freebsd.org/pub/FreeBSD/ISO-IMAGES-sparc64/5.0-DP2-disc2.iso</a>
|
||
(используйте
|
||
<a href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html">зеркало</a>),
|
||
и подмонтировать его, используя vnconfig. Обратите внимание, что <tt>vnconfig</tt> для FreeBSD 4.7
|
||
известен как <tt>mdconfig</tt> в FreeBSD 5.0-CURRENT.
|
||
</p>
|
||
|
||
<pre> vnconfig vn0 5.0-DP2-disc2.iso # ассоциируем vn0 с образом cd
|
||
mount -t cd9660 /dev/vn0c /mnt # монтируем образ
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Скопируйте содержимое директории /mnt куда-нибудь на вашу машину. Простая
|
||
команда <tt>cp</tt> будет работать; тем не менее, живая файловая система
|
||
содержит символические ссылки, так что лучше использовать <tt>rsync</tt>.
|
||
</p>
|
||
|
||
<pre> cd /storage3/sparc64-nfsroot # переходим в будующую директорию nfsroot
|
||
rsync --progress -avr /mnt/ . # извлекаем содержимое
|
||
umount /mnt
|
||
vnconfig -u vn0
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Создайте /etc/fstab в директории nfsroot (в данном случае это
|
||
/storage3/sparc64-nfsroot) и добавьте в него следующую информацию:
|
||
</p>
|
||
|
||
<pre> # Device Mountpoint FStype Options Dump Pass#
|
||
192.168.1.3:/storage3/sparc64-nfsroot / nfs rw 0 0
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Добавьте следующее к /etc/exports для разрешения машине, загружающейся
|
||
из сети, монтировать ее корневую файловую систему из /storage3/sparc64-nfsroot:
|
||
</p>
|
||
|
||
<pre> /storage3/sparc64-nfsroot -maproot=root 192.168.1.5
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Запустите демоны NFS (Если в качестве сервера вы используете машину 5.0-CURRENT,
|
||
воспользуйтесь командой <tt>rpcbind</tt> вместо <tt>portmap</tt>):
|
||
</p>
|
||
|
||
<pre> portmap
|
||
nfsd -u -t -n 4
|
||
mountd -r
|
||
rpc.statd
|
||
rpc.lockd
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Если вы также хотите запускать NFS в момент загрузки, добавьте следующее в
|
||
/etc/rc.conf
|
||
</p>
|
||
|
||
<pre> portmap_enable="YES"
|
||
nfs_server_enable="YES"
|
||
mountd_flags="-r"
|
||
rpc_statd_enable="YES"
|
||
rpc_lockd_enable="YES"
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Теперь мы готовы к сборке выборочного ядра sparc64. Ядро GENERIC, находящееся
|
||
на образе CD, не включает в себя опций, необходимых для успешной бездисковой
|
||
загрузки. Мы должны получить исходники 5.0-CURRENT, используя cvsup (обратитесь
|
||
к FreeBSD handbook для получения дальнейших инструкций) и отредактировать
|
||
"/usr/src/sys/sparc64/conf/DIVINE" (DIVINE будет нашим ядром-примером),
|
||
добавив следующее:
|
||
</p>
|
||
|
||
<pre> options BOOTP # Использовать BOOTP для получения IP адреса/имени хоста
|
||
options BOOTP_NFSROOT # Монтировать корневую файловую систему через NFS,
|
||
используя информацию BOOTP
|
||
options BOOTP_NFSV3 # Использовать NFS v3 для монтирования корня NFS
|
||
options BOOTP_COMPAT # Временное решение для прерванных демонов bootp.
|
||
options BOOTP_WIRED_TO=hme0 # Использовать интерфейс fxp0 для BOOTP
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Затем мы соберем ядро. На машине i386 возможно пересеченное компилирование
|
||
sparc64 kernel/world:
|
||
</p>
|
||
|
||
<pre> cd /usr/src/
|
||
make TARGET_ARCH=sparc64 buildworld # buildworld для порта sparc64
|
||
make TARGET_ARCH=sparc64 buildkernel # собираем ядро sparc64
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Когда этот процесс завершится, мы перенесем файлы:
|
||
</p>
|
||
|
||
<pre> mv /storage3/sparc64-nfsroot/boot/kernel /storage3/sparc64-nfsroot/boot/kernel.GENERIC
|
||
# перемещаем дерево ядра по умолчанию в nfsroot в другое место
|
||
mkdir /storage3/sparc64-nfsroot/boot/kernel
|
||
# создаем новую директорию kernel
|
||
cp /usr/obj/sparc64/usr/src/sys/DIVINE/* /storage3/sparc64-nfsroot/boot/kernel/
|
||
# копируем ядро, равно как и модули, в новую директорию kernel
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Обратите внимание, что важно не делать <tt>cp -r</tt>, поскольку в директорию
|
||
kernel будут скопированы ненужные для нас в данный момент исходники.
|
||
</p>
|
||
|
||
<h2>Загрузка Sun машины</h2>
|
||
|
||
<p class="Normal">
|
||
Наконец, на приглашении OpenBoot введите следующее:
|
||
</p>
|
||
|
||
<pre> ok (0) boot net:dhcp,192.168.1.3,loader.nfs
|
||
</pre>
|
||
|
||
<p class="Normal">
|
||
Этим мы укажем необходимость использования DHCP для получения адреса IP, затем
|
||
для загрузки и выполнения loader.nfs с 192.168.1.3 через TFTP. После этого вы
|
||
увидите обычное приглашение программы login. Если ваша Ultra 2 не поддерживает
|
||
эти загрузочные опции, вы можете обновить программное обеспечение производителя
|
||
(<a href="http://sunsolve.sun.com/">http://sunsolve.sun.com/</a>).
|
||
</p>
|
||
|
||
<p class="Normal">
|
||
Комментарии или исправления приветствуются на
|
||
<a href="mailto:anthonyv@brainlink.com">anthonyv@brainlink.com</a>. Особая
|
||
благодарность Jake Burkholder за его вклад.
|
||
</p>
|
||
<p class="Normal">
|
||
</p>
|
||
<hr noshade="noshade" color="#dadada"><br>
|
||
<font class="Small">
|
||
Автор имеет все авторские права на эту статью.<br>
|
||
</font>
|
||
</body></html> |