пакета
ROM-o-matic. Для создания образа необходимо:
- выбрать тип сетевой карты (справку по поддерживаемым
картам можно получить здесь);
- выбрать формат загрузчика (зависит от того, куда вы
хотите поместить код загрузчика);
- произвести, если требуется, дополнительную настройку
загрузчика, нажав кнопку Configure;
- нажать кнопку Get ROM и скачать заказанный
образ.
VMware 4.0 эмулирует сетевую карточку AMD 79c970 PCnet
LANCE, поэтому в первом пункте выберем
pcnet32:lancepci, во втором - Floppy bootable ROM
Image, нажмем кнопку Get ROM и сохраним образ
загрузчика в C:\Temp\boot.img.
Образ загрузчика может считываться компьютером с жесткого
диска, дискеты или из встроенной FLASH памяти сетевой карты.
Последний вариант - наиболее удобный, однако прежде чем
записывать загрузчик во FLASH, необходимо убедится в его
работоспособности. Поэтому, для тестирования, мы запишем
загрузчик на дискету.
Сделать это можно с помощью программы
rawrite2, которая входит в стандартный
дистрибутив Debian
(находится на первом диске в каталоге install). В
качестве параметров ей необходимо указать файл с загрузчиком и
устройство для записи.
Вставим чистую дискету в дисковод A и дадим
команду:
rawrite2 -f C:\Temp\boot.img -d a
Теперь можно попробовать загрузить клиентский компьютер
(выбрав его в списке и нажав Ctrl+B). Загрузка
остановится на сообщении Searching for server
(DHCP).... После слова lancepci будет отображен
MAC адрес сетевой карты, у меня он такой:
00:0C:29:E6:36:BC. Запишем его, он пригодится при
настройке DHCP.
4. Настройка сервера
4.1. Установка операционной системы
Для установки ОС необходим дистрибутив, состоящий минимум
из двух дисков. Вставьте первый диск дистрибутива Debian в
устройство чтения дисков и запустите виртуальный сервер.
На приглашение boot: введите vanilla и
нажмите Enter. Это запустит установку с ядром,
поддерживающим множество устройств, в том числе SCSI
устройства. Далее установка проходит в обычном режиме.
Поддержка сети должна быть установлена обязательно. Если
Debian найдет сетевую карточку, то он автоматически предложит
вам настроить сеть. Если же этого не произойдет, необходимо
выбрать драйвер сетевой карточки вручную (pcnet32).
Несколько слов о настройке сети. Зададим имя компьютера
(hostname): server. В качестве интерфейса для
установки Debian через NFS или HTTP выберем etH2. На
вопрос об автоматической конфигурации по DHCP ответим
согласием.
После установки ядра системы и драйверов произойдет
перезагрузка. Установщик Debian задаст несколько стандартных
вопросов по настройке системы, а затем предложит установить
дополнительные пакеты (запустить tasksel и
dselect для их установки). Откажитесь - это проще
выполнить из командной строки. Почтовую систему также
настраивать не нужно.
Войдите в систему как root и дайте следующую
команду:
apt-get install mc dhcp ftpd tftpd
nfs-kernel-server bind kernel-source-2.4.18 make gcc
libc6-dev
Все необходимое программное обеспечение находится на первом
и втором дисках дистрибутива. Подробное описание процесса
установки находится в [2].
4.2. Настройка адаптера eth0
Построим следующую сетевую конфигурацию: сервер через
адаптер etH2 будет связан с внешними сетями (в том числе с
Internet, если компьютер подключен к Internet), а через
адаптер eth0 - с внутренней сетью, состоящей из виртуальных
компьютеров. Корректную настройку etH2 обеспечит VMware, а
интерфейс eth0 необходимо сконфигурировать вручную.
Для этого отредактируем файл
/etc/network/interfaces, добавив в него следующие
строки:
auto eth0
iface eth0 inet static
address 192.168.223.2
netmask 255.255.255.0
Вместо адреса 192.168.223.2 необходимо указать адрес,
следующий за адресом адаптера VMnet1. После перезагрузки
виртуального компьютера интерфейс должен заработать.
4.3. Настройка DHCP
Сервис DHCP отвечает за выдачу клиенту его IP адреса,
имени, других параметров сети, а также имени файла с ядром
операционной системы. Его настройка осуществляется с помощью
конфигурационного файла /etc/dhcpd.conf. Мы
используем такой файл:
option domain-name "private.net";
option domain-name-servers server.private.net;
subnet 192.168.223.0 netmask 255.255.255.0 {
group {
filename "net_boot_kernel";
host node01 {
hardware ethernet 00:0C:29:E6:36:BC;
fixed-address 192.168.223.3;
option host-name "node01";
}
}
}
После subnet указан IP адрес адаптера VMnet1, с
замененной на 0 последней цифрой. В строке
filename сказано, что имя файла с ядром для сетевой
загрузки - net_boot_kernel. В строке hardware
ethernet необходимо указать ранее записанный MAC адрес
клиента, в строке fixed-adress указывается IP,
который будет выдан клиенту.
Нам необходимо, чтобы DHCP сервер обрабатывает запросы
только с интерфейса eth0 (из внутренней сети), поэтому
отредактируем файл /etc/default/dhcp, присвоив
переменной INTERFACES значение eth0.
Небольшие изменения нужны для DHCP клиента. В файл
/etc/dhclient.conf добавим следующие две строки:
supersede domain-name "private.net";
prepend domain-name-servers 127.0.0.1;
Первая строка указывает домен поиска, а вторая - добавляет
дополнительный (к тому, который будет получен от DHCP сервера)
DNS сервер. Эти изменения необходимы для формирования
правильного файла resolv.conf.
Теперь, при загрузке клиента, на экране должны отобразиться
IP адреса клиента и сервера, полученные от сервера (службу
DHCP предварительно необходимо перезапустить). Более подробную
информацию по настройке DHCP можно найти в [3].
4.4. Настройка FTP и TFTP
Перекачивание ядра с сервера на клиент осуществляется по
протоколу TFTP. Для его корректной работы в файле
/etc/inetd.conf должна присутствовать строка:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /exports
Последним параметром указан каталог, в котором будет
производиться поиск ядра операционной системы. Все директории
и файлы должны быть доступны на чтение всем.
Если при попытке загрузить клиента, вы получаете сообщение
TFTP error 1 (File not found), значит TFTP настроен
правильно.
Для настройки ftp отредактируем файл
/etc/ftpusers, удалив из него строчку root,
что позволит подключаться к серверу по ftp под именем
root из ОС Windows.
4.5. Настройка DNS
Доменом нашей виртуальной сети будет называться
private.net. Сервер будет иметь имя
server.private.net, а клиенты имена
nodeXX.private.net, где XX - порядковый номер
клиента.
Основным конфигурационным файлом DNS сервера является
/etc/bind/named.conf. В раздел options этого
фала добавим строку:
listen-on { 192.168.223.2; 127.0.0.1; };
Первый IP адрес - адрес интерфейса eth0. Теперь DNS сервер
будет обрабатывать запросы только с этих адресов. В конец
файла добавим строки:
zone "223.168.192.in-addr.arpa" {
type master;
file "/etc/bind/server.rev";
};
zone "private.net" {
type master;
file "/etc/bind/server.hosts";
};
Далее необходимо создать файлы
/etc/bind/server.rev и
/etc/bind/server.hosts. Ниже приведены их
листинги.
Файл server.rev:
@ IN SOA server.private.net. root.server.private.net. (
2004120420 ; Serial
8H ; Refresh
4H ; Retry
4W ; Expire
1D ) ; Negative Cache TTL
IN NS server.private.net.
2 IN PTR server.private.net.
3 IN PTR node01.private.net.
Файл server.hosts:
@ IN SOA server.private.net. root.server.private.net. (
2004120420 ; Serial
8H ; Refresh
4H ; Retry
4W ; Expire
1D ) ; Negative Cache TTL
IN NS server.private.net.
localhost IN A 127.0.0.1
server IN A 192.168.223.2
node01 IN A 192.168.223.3
На этом настройка сервера DNS закончена. За дополнительной
информацией обращайтесь к [4].
4.6. Создание ядра
Компиляция ядра
Стандартное ядро не подходит для загрузки по сети, поэтому
необходимо его перекомпилировать.
Перед компиляцией ядра необходимо выяснить конфигурацию
оборудования виртуального сервера. Для этого в Debian можно
воспользоваться командой lspci. Запишем модели IDE,
SCSI и Ethernet контроллеров. В VMware 4.0 это Intel
Corp.82371AB PIIX4 IDE, BusLogic BT-946C [MultiMaster 10] и
AMD 79c970 [PCnet LANCE] соответственно.
Перейдем в каталог /usr/src и выполним команду
tar --bzip2 -x -f
kernel-source-2.4.18.tar.bz2
Теперь зайдем в каталог /usr/src/kernel-source-2.4.18 и
выполним команду
make mrproper config
Сейчас необходимо выбрать конфигурацию ядра, отвечая на
вопросы. Все, что может понадобиться до того, как станут
доступны сетевые ресурсы (сетевые карты, поддержка чипсетов,
протокола TCP, NFS и т.д.) необходимо включить в ядро.
Дополнительно, необходимо включить следующие настройки:
- CONFIG_BLK_DEV_LOOP
- CONFIG_BLK_DEV_NBD
- CONFIG_BLK_DEV_RAM (только при подключении корневой
файловой системы с RAM диска)
- CONFIG_BLK_DEV_RAM_SIZE = 30720 (только при подключении
корневой файловой системы с RAM диска)
- CONFIG_BLK_DEV_INITRD (только при подключении корневой
файловой системы с RAM диска)
- CONFIG_PACKET
- CONFIG_FILTER
- CONFIG_IP_PNP
- CONFIG_IP_PNP_DHCP
- CONFIG_NFS_FS
- CONFIG_NFS_V3
- CONFIG_ROOT_NFS (только при подключении корневой
файловой системы через NFS)
После завершения настроек скомпилируем ядро командой
make bzImage
Предполагается, что версии установленного и компилируемого
ядра совпадают. Если же это не так, и при компиляции ядра
некоторые из опций были скомпилированы как модули, необходимо
командой make modules произвести перекомпиляцию
модулей. Подробнее о компиляции ядра можно узнать в [5].
Подготовка ядра для удаленной загрузки
Чтобы ядро можно было загружать через сеть с помощью Etherboot или Netboot, оно должно
быть специальным образом подготовлено. Для этого служит
программа mknbi, входящая в пакет mknbi
(при создании этого документа использовалась версия 1.4.4).
Поместить ее на сервер можно, подключившись из OC Windows к
серверу по ftp.
Для ее установки необходимо распаковать файл с исходными
текстами в каталог /usr/src/mknbi-1.4.4 и выполнить
команды
make
mkdir
/usr/local/lib/mknbi
cp first32elf*
/usr/local/lib/mknbi
Программа имеет несколько параметров, из которых мы
рассмотрим четыре:
--format=format Указывает формат
выходного файла.
--target=target Указывает тип
целевого двоичного кода.
--rootdir=rootdir Задает имя
каталога, из которого будет подмонтирована корневая файловая
система
--ip=string Позволяет задать IP
адреса клиента, сервера, шлюза и маску подсети. Также возможно
указать dhcp или bootp для автоматической
настройки с помощью этих протоколов.
Создадим каталог, в котором будет располагаться ядро для
удаленной загрузки:
mkdir /exports
Дальнейшие действия зависят от того, каким образом мы будем
подключать коревую файловую систему. Для подключения через NFS
необходимо выполнить команду (предполагается, что корневая
файловая система будет располагаться в каталоге
/exports/node01)
./mknbi --format=elf --target=linux
--rootdir=/exports/node01 --ip=dhcp
/usr/src/kernel-source-2.4.18/arch/i386/boot/bzImage >
/exports/net_boot_kernel
Для варианта с RAM диском команда выглядит несколько
иначе:
./mknbi --format=elf --target=linux
--rootdir=/dev/ram0 --ip=dhcp
/usr/src/kernel-source-2.4.18/arch/i386/boot/bzImage
/initrd/initrd.gz > /exports/net_boot_kernel
О том, как создать файл /initrd/initrd.gz, который
содержит образ корневой файловой системы, рассказывается в
п.4.8.
По окончании этого этапа клиентский компьютер уже может
загружать ядро. За информацией по mknbi обращайтесь к [6].
4.7. Настройка NFS
Настройка предоставляемых сервером NFS в сетевое
использование ресурсов осуществляется с помощью файла
/etc/exports.
В нашем примере используем такой файл
/usr node01.private.net(rw,no_root_squash)
/exports node01.private.net(rw,no_root_squash)
/ 192.168.223.4(rw,no_root_squash)
Последняя строка нужна для доступа рабочего виртуального
компьютера (на котором мы будем формировать файловую систему
клиента) к серверу и после создания файловой системы клиента
ее необходимо удалить.
Дополнительная информация по настройке NFS доступна в [7].
4.8. Настройка файловой системы для
клиента
Для завершения настройки сетевой загрузки необходимо
подготовить файловую систему клиента. Для этого в самом начале
нами был создан третий виртуальный компьютер. Установим на
него ОС Debian согласно тем же рекомендациям, что были даны в
п.4.1.
Имеется один нюанс: поскольку мы раздаем IP адреса
статически, прежде, чем новый компьютер сможет получить
конфигурацию от DHCP сервера, необходимо подправить файл
/etc/dhcpd.conf. Когда установщик Debian задаст
вопрос о конфигурации по DHCP, переключимся на другой терминал
(нажав Alt+F2), выполним команду ifconfig -a
и запишем MAC-адрес адаптера. После этого переключимся в
виртуальный компьютер сервера, и отредактируем файл
/etc/dhcpd.conf, добавив в раздел group
строки:
host work {
hardware ethernet 00:0C:29:03:AB:CA;
fixed-address 192.168.223.4;
}
Во второй строке необходимо указать записанный MAC адрес.
Чтобы изменения вступили в силу, необходимо перезапустить DHCP
сервер командой
/etc/init.d/dhcp restart
Можно продолжать установку. Команда для установки пакетов с
программным обеспечением теперь будет выглядеть следующим
образом:
apt-get install mc portmap
Для варианта с подключением корневой файловой системы по
NFS будем пользоваться каталогом /tmp. Для варианта с
RAM-диском необходимо предварительно создать образ RAM-диска.
Сделать это можно различными способами. Приведем один из
них:
dd if=/dev/zero of=/initrd/initrd bs=1k
count=30720
mke2fs -m0 -F
/initrd/initrd
mount -t ext2 -o loop
/initrd/initrd /mnt
Здесь мы создаем пустой файл объемом 30 Мб, затем формируем
в нем файловую систему ext2 и монтируем его как loop
устройство в каталог /mnt, в котором и будем
создавать файловую систему.
Процесс создания файловой системы одинаков для обоих
вариантов и заключается в следующем:
- Скопируйте каталоги /bin, /dev,
/etc, /lib, /sbin целиком;
- Создать каталоги home, root,
proc, tmp;
- Создать каталоги usr, usr/bin;
скопировать каталог /usr/sbin, скопировать файл
expr в каталог usr/bin;
- Создать каталоги var, var/lock,
var/log, var/log/news, var/run,
var/tmp, var/lib; скопировать каталог
var/lib/dhcp.
Подправим файл /mnt/etc/fstab. В самом простом
виде он может выглядеть так:
/dev/ram0 / ext2 errors=remount-ro 0 1
proc /proc proc defaults 0 0
server.private.net:/usr /usr nfs
Для подключения корневой файловой системы по NFS первую
строку необходимо заменить на
server.private.net:/exports/node01 / nfs
Теперь необходимо создать файл
/etc/dhclient-enter-hooks, внести в него следующие
две строки, чтобы каждый клиент установил свое имя, полученное
от DHCP сервера
echo "$new_host_name" > /etc/hostname
hostname -F /etc/hostname
и сделать этот файл исполняемым:
chmod a+x /etc/dhclient-enter-hooks
Если вы скомпилировали ядро более новой версии, то
необходимо в каталог /lib/modules скопировать каталог
с перекомпилированными модулями, а старый каталог удалить.
Если смонтирован файл с RAM диском, его необходимо
отключить командой
umount /mnt
а затем выполнить команду
mount -t nfs server.private.net:/ /mnt
для подключения файловой системы сервера в каталог
/mnt. Далее, для первого варианта необходимо
скопировать содержимое /tmp в каталог
/mnt/exports/node01, а для второго - выполнить
команды
gzip -9 /initrd/initrd
cp
/initrd/initrd.gz /mnt/initrd
после чего файловую систему сервера необходимо
размонтировать, выполнив
umount /mnt
Теперь необходимо присоединить полученный образ к ядру, как
описано в конце п.4.6.
Заключение
Итак, мы подробно рассмотрели организацию процесса сетевой
загрузки. В примере мы создали только одного клиента, с
названием node01. Для подключения последующих, на сервере в
файлы dhcpd.conf, server.rev,
server.hosts, exportfs нужно добавить
соответствующие записи. При необходимости можно создать и
новую файловую систему, поместив ее в каталог
/exports/nodeXX, или создав новое ядро для удаленной
загрузки.
Все вышеописанные действия без каких либо изменений могут
быть применены для создания реальной сети из реальных
машин.
Литература
- Введение
в загрузку по сети и Etherboot
- Installing
Debian GNU/Linux 3.0 For Intel x86
- DHCP
mini-HOWTO
- DNS
HOWTO
- Ставим
ядро 2.6, или Ядерная физика для домохозяйки
- Документация
по mknbi
- NFS
HOWTO
- Загрузка
машин по сети
- Удаленная
загрузка и Linux: Настройка удаленно загружаемых рабочих
станций с Linux, DOS, Windows 95/98 и Windows NT