4.4. Подготовка файлов для загрузки по TFTP

Если ваша машина подключена к локальной сети, то вы можете загрузить её по сети с другой машины через TFTP. Для этого на удалённую машину в определённое место вам нужно поместить загрузочные файлы и настроить поддержку загрузки вашей машины.

Вам нужно настроить TFTP сервер, а если машин много, то BOOTP сервер или RARP сервер или DHCP сервер.

Reverse Address Resolution Protocol (RARP) — это один из путей указать клиенту какой адрес IP для него предназначен. Другой способ — использовать BOOTP протокол. BOOTP — это IP протокол, который информирует компьютер о его IP адресе и где в сети получить загрузочный образ. DHCP (Dynamic Host Configuration Protocol) более гибок и обратно совместим с BOOTP. Некоторые системы могут быть настроены только через DHCP.

Trivial File Transfer Protocol (TFTP) используется для загрузки загрузочного образа на клиентскую машину. Теоретически, можно использовать любой сервер на любой платформе, которая реализует эти протоколы. В примерах этого раздела мы используем команды из SunOS 4.x, SunOS 5.x (так называемый Solaris) и GNU/Linux.

4.4.1. Настройка RARP сервера

Для настройки RARP вам нужно знать Ethernet адрес (так называемый MAC адрес) клиентского компьютера, на который будет выполняться установка. Если вы не знаете адреса, то можете получить её из сообщений начальной загрузки OpenPROM, воспользоваться командой OpenBoot .enet-addr или загрузиться в «Rescue» режиме (например, со спасательной дискеты) и выполнить команду /sbin/ifconfig eth0.

Если система с RARP сервером использует ядро Linux 2.2.x, то вам необходимо заполнить RARP таблицу ядра. Чтобы сделать это, выполните следующие команды:

# /sbin/rarp -s 
client-hostname
client-enet-addr

# /usr/sbin/arp -s 
client-ip
client-enet-addr

Если вы получили

SIOCSRARP: Invalid argument

то вероятно, нужно загрузить модуль RARP ядра или пересобрать ядро с поддержкой RARP. Попробуйте modprobe rarp , а затем попробуйте команду rarp ещё раз.

В системе с RARP сервером использующей ядро Linux 2.4.x нет RARP модуля, а вместо него вы должны использовать программу rarpd. Процедура очень похожа на ту, которая используется в SunOS из следующего параграфа.

В SunOS вам нужно проверить, что аппаратный адрес Ethernet клиента содержится в базе данных «ethers» (или в файле /etc/ethers или через NIS/NIS+) и базе данных «hosts». Затем, вам нужно запустить демона RARP. В SunOS 4 выполните команду (от суперпользователя): /usr/etc/rarpd -a; в SunOS 5 используйте /usr/sbin/rarpd -a.

4.4.2. Настройка BOOTP сервера

В GNU/Linux есть два BOOTP сервера: CMU bootpd и ISC dhcpd (на самом деле DHCP сервер); они находятся в пакетах bootp и dhcp.

Чтобы использовать CMU bootpd, во-первых, вы должны раскомментировать (или добавить) соответствующую строку в /etc/inetd.conf. Для этого в Debian GNU/Linux вы можете запустить update-inetd --enable bootps, затем /etc/init.d/inetd reload. Или же можно добавить следующую строку вручную:

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

Теперь вы должны создать файл /etc/bootptab. Внутри он напоминает хорошо знакомый и загадочный формат старых добрых BSD файлов printcap, termcap и disktab. Подробности смотрите на странице руководства bootptab. Для CMU bootpd вам нужно знать аппаратный адрес (MAC) клиента. Вот пример /etc/bootptab:

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

Нужно изменить по крайней мере параметр «ha», который содержит аппаратный адрес клиента. Параметр «bf» содержит файл, который клиент должен получить по TFTP; подробности смотрите в Раздел 4.4.5, «Копирование TFTP образов в каталог TFTP сервера».

Настройка BOOTP в ISC dhcpd очень проста, так как он считает клиента BOOTP, как один из вариантов клиента DHCP. Некоторые архитектуры требуют сложной конфигурации для загрузки клиентов по BOOTP. Если у вас один из таких случаев, прочитайте раздел Раздел 4.4.3, «Настройка DHCP сервера». Если нет, то достаточно просто добавить директиву allow bootp в конфигурационный блок подсети, содержащей клиента и перезапустить dhcpd командой /etc/init.d/dhcpd restart.

4.4.3. Настройка DHCP сервера

Есть один свободный DHCP сервер — это ISC dhcpd. В Debian GNU/Linux он доступен из пакета dhcp. Вот пример его конфигурационного файла (обычно /etc/dhcpd.conf):

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

Замечание: новый (и предпочтительный) пакет dhcp3 использует /etc/dhcp3/dhcpd.conf.

В этом примере определён единственный сервер servername, который работает в качестве DHCP, TFTP серверов и шлюза сети. Вам почти наверняка нужно изменить опцию domain-name, а также имя сервера и аппаратный адрес клиента. Опция filename должна содержать имя файла, который нужно получить по TFTP.

После редактирования конфигурационного файла dhcpd, перезагрузите сервер командой /etc/init.d/dhcpd restart.

4.4.4. Включение TFTP сервера

Для запуска TFTP сервера вы должны убедиться, что tftpd включён. Обычно, это делается добавлением в /etc/inetd.conf строки вида:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Пакеты Debian сами создают такую строку при установке.

Загляните в этот файл и запомните каталог, который используется в качестве аргумента in.tftpd— он вам потребуется далее. Аргумент -l в некоторых версиях in.tftpd включает запись протокола всех обращений в системные журналы — это полезно для диагностики ошибок. Если вы изменили /etc/inetd.conf, вам нужно об этом сказать запущенному процессу inetd. На машине Debian выполните /etc/init.d/inetd reload; на других машинах определите ID процесса inetd и запустите kill -HUP inetd-pid.

4.4.5. Копирование TFTP образов в каталог TFTP сервера

Далее, поместите нужный загрузочный образ TFTP из Раздел 4.2.1, «Где искать установочные образы» в каталог загрузочных образов tftpd. Как правило, этот каталог называется /tftpboot. Вы можете сделать ссылку на этот файл для файла, который tftpd будет передавать для загрузки определённому клиенту. К сожалению, имя файла определяется TFTP клиентом и никак не стандартизовано.

4.4.5.1. Загрузка SPARC по TFTP

На SPARC архитектурах используются имена субархитектур, например «SUN4M» или «SUN4C»; в некоторых случаях, имя архитектуры оставляют пустым, для того чтобы имя файла клиент искал просто как ip-клиента-в-шестнадцатеричной-форме. То есть, если система с субархитектурой SUN4C и IP адресом 192.168.1.3, то имя файла будет C0A80103.SUN4C. Простой способ его определения — это ввести следующую команду в оболочке командной строки (предполагается, что машине назначен IP адрес равный 10.0.0.4).

$ printf '%.2x%.2x%.2x%.2x\n' 10 0 0 4

Она выведет октеты IP адреса в шестнадцатеричном виде; для получения правильного имени файла, вам нужно сделать все буквы заглавными и если нужно, добавить имя субархитектуры.

Также вы можете заставить некоторые sparc системы брать имя файла из последнего параметра команды загрузки OpenPROM, например boot net my-sparc.image. Он всё ещё должен располагаться в каталоге, в котором его будет искать TFTP сервер.