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

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

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

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.3.1. Настройка BOOTP сервера

Для GNU/Linux есть два BOOTP сервера. Первый — CMU bootpd. Второй, на самом деле являющийся сервером DHCP — ISC dhcpd. В Debian GNU/Linux они находятся в пакетах bootp и dhcp3-server соответственно.

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

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.3.4, «Копирование TFTP образов в каталог TFTP сервера».

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

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

Одним из свободных DHCP серверов является ISC dhcpd. В Debian GNU/Linux он доступен из пакета dhcp3-server. Вот пример его конфигурационного файла (обычно /etc/dhcp3/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;
}

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

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

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

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

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

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

Замечание

Исторически, TFTP-серверы используют каталог /tftpboot для хранения образов. Однако, пакеты Debian GNU/Linux могут использовать другие каталоги, чтобы соответствовать Filesystem Hierarchy Standard. Например, tftpd-hpa по умолчанию использует /var/lib/tftpboot. Вам может потребоваться изменить примеры конфигурации для соответствия.

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

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

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



[2] Все доступные в Debian альтернативы in.tftpd по умолчанию протоколируют TFTP запросы в системные журналы. Некоторые из них имеют параметр -v, который увеличивает подробность протокола. В случае проблем с загрузкой рекомендуется проверять сообщения журналов, чтобы понять причину ошибки.