Сетевая загрузка с Linux - PXE
Введение
Эта статья в некоторой степени связана с нашей предыдущей темой, в которой рассматривается тема загрузки и установки Linux с использованием сети, независимо от того, локальная она или нет. На этот раз мы будем рассматривать установку Linux без оптических, дискет или других съемных носителей, просто используя локальную сеть. Предполагается, что в вашей сети будет как минимум два компьютера, а клиенту потребуется сетевая карта и BIOS, способные использовать PXE. Мы проведем вас от начала до конца, но вам понадобятся некоторые базовые знания в области сетевых технологий и конфигурации Linux, а также использование редактора по вашему выбору. Вы узнаете, что такое PXE, как настроить DHCP-сервер, как настроить TFTP-сервер, чтобы клиент мог иметь доступ к файлам, а также множество интересных вещей, как обычно.
PXE
PXE (произносится как «pixie») означает Preboot eXecution Environment и был представлен Intel и Systemsoft в 1999 году. Короче говоря, это возможность большинства современных сетевых карт и BIOS, которая позволяет системе загружаться из локальной сети, как если бы она загружалась из жесткий диск или CD-ROM. Поддержка PXE должна присутствовать в микропрограмме сетевого адаптера, которая при соответствующей настройке в BIOS будет получать IP-адрес от сервера PXE и загружать необходимые загрузочные образы. Чтобы IP-адрес был доступен, сервер должен предложить DHCP. После того как IP-адрес сдан в аренду, TFTP-сервер (который может быть тем же самым, что и DHCP-сервер) передает необходимые файлы клиенту, чтобы он мог загрузить их после загрузки. Вот и вся идея, так хватит разговоров, давай приступим к работе?
Установка необходимых инструментов и настройка
Прежде чем мы начнем, важно понять, как устроена настройка сети, на которой мы это тестировали. Сервер является машиной Debian с двумя сетевыми картами, и дистрибутив, который мы будем устанавливать, также является Debian, а именно Squeeze, amd64. Вы можете использовать любой другой дистрибутив, но, вероятно, расположение некоторых файлов конфигурации будет отличаться. В этой статье не рассматривается, как вы будете настраивать программные источники для фактической установки. Мы приведем вас только к работающему установщику Debian, и это все. Вы найдете множество учебных пособий о том, как настроить локальный репозиторий Debian или как настроить шлюз в Linux.
Итак, контрольный список: нам понадобится DHCP-сервер, TFTP-сервер, а также initrd и образ ядра для передачи клиенту. Мы выбрали довольно необычный подход в нашей настройке, и вы поймете, почему.
Outside world ------> Router ------> Switch ------>(eth0) Server(eth1) ------> Client
Итак, маршрутизатор выдает адреса DHCP (маленький, домашний маршрутизатор) в виде 192.168.0.x. Сервер, который также будет раздавать DHCP-адреса, имеет свое внешнее соединение через eth0 и внутреннее соединение для клиента через eth1. Клиент имеет единственное соединение Ethernet напрямую с сервером PXE, но это не значит, что вы не можете настроить сервер в качестве шлюза для сетевой установки или добавить другой сетевой адаптер для клиента для внешнего доступа. Возможностей много, важная проблема - загрузка через PXE. Начнем с установки TFTP-сервера.
TFTP
TFTP расшифровывается как Trivial File Transfer Protocol, и это де-факто «язык», когда речь идет о передаче файлов для использования с PXE. На Debian мы устанавливаем его так:
# aptitude install tftpd-hpa
Теперь мы должны правильно его настроить. Прежде всего, в нашем примере мы запустим tftpd standalone, то есть мы не будем использовать xinetd. Конфигурация будет отличаться, если вы планируете использовать xinetd, и мы не рекомендуем это. Теперь все, что нам нужно сделать, это отредактировать / etc / default / tftpd-hpa:
#make sure these lines are present RUN_DAEMON=yes TFTP_OPTIONS="-l -s /var/lib/tftpboot"
Давайте убедимся, что указанный выше каталог существует, и запустим демон:
# mkdir -p /var/lib/tftpboot # /etc/init.d/tftpboot-hpa start
DHCP
Мы должны предложить клиенту адрес до того, как мы начнем установку по сети, и это делается с помощью протокола динамической конфигурации хоста. DHCP-сервер имеет пул адресов, с которого он предлагает IP-адреса при запросе. Один устанавливает серверную часть с
# aptitude install dhcp3-server
Файл конфигурации находится по адресу /etc/dhcp/dhcpd.conf (может быть / etc / dhcp3 в более старых версиях Debian) и является очень хорошо прокомментированным файлом. Прежде чем мы покажем вам, как выглядит наш файл, можно сделать небольшое резюме: eth0 - внешний мир через коммутируемую сеть (192.168.0.x) и eth1 - прямая ссылка на клиент (192.168.1.x).
ddns-update-style none; # Remember the semicolons at the end of each line! DHCPDARGS=eth1; default-lease-time 86400; max-lease-time 604800; authoritative; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.30; filename "pxelinux.0"; option subnet-mask 255.255.255.0; } # There is more to this file than we've shown, but what you have here is enough for PXE.
Теперь мы должны установить сетевую информацию eth1, находящуюся в / etc / network / interfaces:
allow-hotplug eth1 iface eth1 inet static address 192.168.1.2 netmask 255.255.255.0
Перезагрузите сеть, и мы почти закончили:
# ifdown eth1 # ifup eth1
Конфигурирование PXE
Теперь мы должны настроить файл, который будет запрашивать клиент, файл, в котором мы расскажем, как найти то, что ему нужно. Итак, давайте создадим каталог pxelinux.cfg:
# mkdir /var/lib/tftpboot/pxelinux.cfg
и создайте файл с именем «default», который будет иметь следующее содержимое:
DISPLAY boot.txt DEFAULT squeeze_amd64_install LABEL squeeze_amd64_install kernel debian/squeeze/amd64/linux append vga=normal initrd=debian/squeeze/amd64/initrd.gz -- PROMPT 1 TIMEOUT 0
Вы видите ссылку на файл boot.txt, поэтому создайте его в / var / lib / tftpboot и добавьте в него строку "squeeze_amd64_install".
Теперь, чтобы скопировать необходимые файлы куда-нибудь, чтобы их нашел клиент:
# cd /var/lib/tftpboot # wget http://ftp.heanet.ie/pub/ftp.debian.org/debian/dists/squeeze/main/\ installer-amd64/20110106+squeeze3/images/netboot/debian-installer/amd64/pxelinux.0 # mkdir -p debian/squeeze/amd64/ # cd debian/squeeze/amd64/ # wget http://ftp.heanet.ie/pub/ftp.debian.org/debian/dists/squeeze/main/\ installer-amd64/20110106+squeeze3/images/netboot/debian-installer/amd64/linux # wget http://ftp.heanet.ie/pub/ftp.debian.org/debian/dists/squeeze/main/\ installer-amd64/20110106+squeeze3/images/netboot/debian-installer/amd64/initrd.gz
Теперь, надеясь, что все в порядке, вы можете просто загрузить свой клиент и изменить его настройки BIOS для сетевой загрузки. Прежде чем мы закончим, мы должны объяснить вам, какую настройку сети мы выбрали. Возможно, мы могли бы сделать это проще, например, напрямую подключиться к нашему провайдеру и получить доступ к сети (Интернет). Идея состоит в том, что PXE-сервер в нашем сценарии не может получить свой IP-адрес (eth0) от DHCP, поскольку эта настройка не будет работать: если вы не собираетесь использовать сценарий с двумя сетевыми платами на сервере, как мы это сделали Вам нужен какой-то фиксированный IP-адрес. Таким образом, возможны следующие варианты: подключить интернет-провайдера, настроить маршрутизатор на выдачу только статических IP-адресов, сделать сервер PXE / DHCP / TFTP также шлюзом или создать локальный репозиторий. Мы выбрали последнее, потому что оно наилучшим образом соответствует нашей топологии и целям,и это действительно включает в себя только настройку веб-сервера в локальной сети. Если бы мы объяснили все ваши варианты, включая iptables для шлюза или apache для HTTP-сервера, эта статья была бы огромной. Вместо этого мы предпочли придерживаться названия и дать вам именно это: Сетевая загрузка с Linux.
Помните, что это всего лишь пример: как и в случае с NetbootCD, вы можете добавить столько дистрибутивов, сколько захотите, при условии, что у вас достаточно места на сервере.
Последние мысли
Прежде всего, мы рекомендуем терпение. PXE, как известно, работает довольно медленно, независимо от вашего главного гигабитного коммутатора, который вы купили на прошлой неделе. Во-вторых, прочитайте комментарии и примеры в dhcpd.conf, так как они будут полезны сейчас и позже.