Diskless nodes/ru

Данная статья поможет создавать бездисковые станции под управлением Gentoo Linux.

Об этом руководстве
Это руководство поможет настроить бездисковые рабочие станции основанные на дистрибутиве Gentoo Linux. Это руководство предназначено для того чтобы сделать этот процесс удобным для Linux-новичков, насколько это возможно, потому что все когда-то были новичками в какой-то момент :&#41;. В то время как опытные пользователи могут с легкостью объединить множество доступных руководств по бездисковым станциям и сетям вместе, надеемся, что это руководство сможет облегчить установку для всех заинтересованных пользователей, независимо от того, гики они или нет.

Что такое бездисковая машина?
Бездисковая машина - это компьютер без каких-либо обычных загрузочных устройств, таких как жесткие диски, дискеты, или оптические диски. Бездисковые станции загружаются по сети и им необходим сервер, который обеспечит их местом для хранения данных, как это сделал бы локальный жесткий диск. С этого момента, будем называть сервер ведущим устройством - master, в то время как бездисковая машина будет ведомым устройством - slave. Ведомый узел требует сетевую плату с поддержкой загрузки PXE или Etherboot; проверьте поддерживаемый список по адресу Etherboot.org. Большинство современных плат поддерживает PXE, множество встроенных в материнскую плату сетевые платы также будут работать.

Перед тем как начать
Необходимо установить Gentoo на master-узел и иметь достаточно пространства на master-узле, чтобы хранить файловые системы slave-узлов. Также, удостоверьтесь, что один из интерфейсов подключен к интернету отдельно от подключения к локальной сети.

Информация о ядрах
Ядро - это программа, которая располагается между аппаратным обеспечением и всеми остальными программами, которые загружены в системе. По существу, это сердце операционной системы, включающей в себя ядро. Когда компьютер загружается, BIOS выполняет инструкции, найденные в зарезервированном загрузочном пространстве жесткого диска. Эти инструкции обычно являются загрузчиком, который загружает ядро. После того, как ядро загружено, все процессы управляются им.

Чтобы найти больше информации по ядрам и их настройке, проверьте статью о ядре.

Конфигурация ядра на ведущем компьютере
Ядро ведущей машины может быть как и настолько большим, так и настроенным особые нужды, но в то же время, существует несколько требуемых параметров ядра, которые необходимо выбрать. Перейдете в меню конфигурации ядра, введя:

Должен быть графический интерфейс, серого и синего цвета, который предлагает безопасную альтернативу редактированию файла вручную. Если ядро на данный момент функционирует нормально, можно сохранить текущий файл конфигурации, выйдя из графического интерфейса и введя следующую команду:

Перейдите в следующие подменю и убедитесь, что перечисленные элементы меню отмечены как встроенные в ядро - built-in (а не как модули - modular). Параметры, показанные ниже, взяты из ядра версии 2.6.10. Если используется другая версия, текст, или последовательность элементов меню может различаться. Просто убедитесь, что выбраны хотя бы те элементы, которые показаны ниже.

Если необходим доступ к интернету на master-узле и/или нужен безопасный межсетевой экран, убедитесь, что добавили поддержку iptables:

Если необходимо использовать пакетную фильтрацию, можно включить оставшиеся параметры в качестве модулей позже. Чтобы узнать о том, как настроить их должным образом, прочтите главу Gentoo Security Handbook о сетевых экранах.

После того, как ядро переконфигурировано на master-узле, его нужно собрать заново:

Затем, добавьте запись для нового ядра в или, в зависимости от используемого загрузчика, и сделайте новое ядро загружаемым по умолчанию. Теперь когда новый файл bzImage скопирован в загрузочный каталог, все, что требуется сделать - перезагрузить систему чтобы активировать новые параметры.

Настройки ведомого ядра
Рекомендуется, чтобы slave ядро было собрано без модулей, так как их загрузка и настройка в случае удаленной загрузки ядра - сложный и ненужный процесс. Вдобавок, slave ядро должно быть настолько маленьким и компактным, насколько это возможно, чтобы эффективно загрузиться по сети. slave ядро будет скомпилировано в том же месте, где было сконфигурировано master.

Во избежание путаницы и пустой траты времени, возможно, будет хорошей идеей сделать резервное копирование файла конфигурации ведущего ядра введя следующую команд:

slave ядро сейчас будет сконфигурировано таким же образом, как master ядро. Если необходим свежий файл конфигурации, его можно восстановить из файла по умолчанию, введя:

Теперь, перейдите в графический интерфейс конфигурации вводом следующей команды:

Убедитесь, что выбрали следующие параметры как встроенные, а не как модули ядра:

Теперь необходимо собрать slave ядро. Будьте осторожны, постарайтесь не перезаписать или не повредить какие-либо модули ядра, которые были собраны для master:

Теперь, создайте каталог на master-узле, который будет использован для хранения файлов slave-узлов и требуемых системных файлов. Здесь используется, но любое другое место можно выбрать здесь. Теперь, скопируйте slave bzImage в каталог :

Конфигурация предварительных файловых систем для slave-узлов
Файловые системы для систем master и slave могут быть отрегулированы и изменены в значительной степени. На данный момент единственное, что имеет значение, это как получить предварительную файловую систему с подходящими файлами конфигурации и точками монтирования. Во-первых, необходимо создать каталог внутри для первой slave-системы. Каждая slave-система требует собственную root файловую систему, потому что общий доступ к определенным системным файлам вызовет проблемы с разрешениями и сбои. Можно назвать эти каталоги так, как администратор сочтет нужным, но статья предполагает использование IP-адресов slave-машин, так как они уникальны и не могут быть перепутаны. Например, пусть статический IP нашей первой slave-машины будет  :

Различные файлы конфигурации в каталоге нуждаются в изменении для того, чтобы работать на slave-узле. Скопируйте каталог c master-узла в новый root-каталог slave, введя:

Все же, эта файловая система пока не готова, потому что ей требуются разные точки монтирования и каталоги. Чтобы их создать, введите:

Большинство из этих stubs должно быть знакомы; такие stubs как, или  будут заполнены при запуске slave-узла, остальные будут примонтированы позже. Также нужно изменить файл, чтобы отобразить имя хоста slave-узла. Двоичные файлы, библиотеки и другие файлы будут заполнены позже в этом руководстве, прямо перед попыткой загрузить slave-узел.

Несмотря на то, что каталог наполняется , позже, необходимо создать запись. Если этого не сделать, то можно получить сообщение об ошибке unable to open initial console.

Информация о DHCP-сервере
DHCP означает Dynamic Host Configuration Protocol (протокол динамической настройки узла). DHCP-сервер - это первый компьютер с которым будут соединяться slave-узлы при PXE-загрузке. Основной целью DHCP-сервера является назначение IP-адресов. DHCP-сервер может назначать IP-адреса, основываясь на MAC-адресах сети на основе ethernet. Как только slave-узел получит IP-адрес, DHCP-сервер сообщит этому компьютеру где можно получить его первичную файловую систему и ядро.

Перед тем как начать
Перед началом, стоит проверить, что некоторые вещи работают хорошо. Во-первых, проверьте соединение с сетью:

Также необходимо убедиться, что устройство eth0 запущено. Это должно выглядеть следующим образом:

Важно, чтобы оно выводило MULTICAST. Если это не так, пересоберите ядро заново, чтобы включить поддержку multicast.

Установка DHCP-сервера
Если в сети еще нет установленного DHCP-сервера, придется установить его:

Если DHCP-сервер уже присутствует в сети, отредактируйте файл конфигурации для корректной загрузки компьютера по сети с помощью PXE.

Конфигурация DHCP-сервера
Только один конфигурационный файл нужно отредактировать перед запуском DHCP-сервера:. Скопируйте и отредактируйте предусмотренный файл-образец:

Основная схема этого файла задана в виде отступов и выглядит следующим образом:

Раздел  - необязательный и должен использоваться для назначаемых IP-адресов, которые принадлежат к одной и той же топологии сети. По крайней мере, должен быть объявлен один раздел, а необязательный раздел   позволяет группировать параметры между элементами. Хороший пример файла выглядит так:

С IP-адреса после  будет запрошен указанный. Этот IP-адрес должен быть IP-адресом tftp-сервера, обычно тем же самым, что и IP-адрес master-узла. является путем относительно каталога (вследствие того, что параметры, относящиеся к tftp-серверу будут рассмотрены позже). Внутри раздела, параметр   указывает MAC-адрес, а   назначает фиксированный IP-адрес для этого отдельного MAC-адреса. Существует достаточно хорошая man-страница по с параметрами, которые не рассмотрены в этом HOWTO. Можно прочитать ее, введя:

Запуск DHCP-сервера
Перед тем как запустить скрипт инициализации dhcp, отредактируйте файл, так, чтобы он выглядел следующим образом:

Переменная  - это устройство, на котором необходимо запустить DHCP-сервер, в этом случае. Добавление большего количества аргументов к переменной  может быть полезно в случае сложной топологии сети с большим количеством Ethernet-адаптеров. Чтобы запустить dhcp-сервер, введите:

Чтобы добавить dhcp-сервер к сценариям иницализации, введите:

Устранение неполадок, связанных с DHCP-сервером
Чтобы проверить загружается ли узел сети, посмотрите сообщения в. Если узел загружается успешно, файл должен содержать внизу несколько строчек, выглядящих следующим образом:

Если встречается следующее сообщение, это возможно означает, что с файлом конфигурации что-то не то, но в то же время DHCP сервер передает данные верно.

Каждый раз, после изменения файла конфигурации, нужно перезапускать DHCP-сервер. Чтобы перезапустить сервер, введите:

Информация о TFTP-сервере
TFTP означает простой протокол передачи файлов (англ. Trivial File Transfer Protocol). TFTP-сервер предоставит ведомым компьютерам ядра и первичную файловую систему для начальной загрузки. Все ядра и файловые системы ведомых машин будут храниться на TFTP-сервере, поэтому, хорошей идеей будет сделать master-узел TFTP-сервером.

Установка TFTP-сервера
Высоко рекомендуемый tftp-сервер доступен в качестве пакета tftp-hpa. Этот tftp-сервер написан автором SYSLINUX и очень хорошо работает с pxelinux. Чтобы его установить, просто введите:

Настройка TFTP-сервера
Отредактируйте файл. Необходимо указать каталог tftproot в  и также, любые параметры командной строки в. Это должно выглядеть следующим образом:

Параметр  обозначает то, что сервер слушает в автономном режиме (stand alone mode), поэтому нет необходимости запускать inetd. означает, что уровень вывода сообщений log/error должен быть подробный. указывает на корневой каталог tftp-сервера.

Запуск TFTP-сервера
Чтобы запустить tftp-сервер, введите:

Эта команда должна запустить tftp-сервер с параметрами, которые указаны в. Если нужно, чтобы этот сервер автоматически запускался во время загрузки, наберите:

Информация о PXELINUX
Этот раздел не требуется если используется только Etherboot. PXELINUX — это сетевой загрузчик, эквивалентный LILO или GRUB, который обслуживается через TFTP. По существу, это небольшой набор инструкций, который сообщает клиенту где разместить его ядро и временную файловую систему и разрешает различные параметры ядра.

Перед началом
Теперь необходим файл pxelinux.0, который поставляется с пакетом SYSLINUX от H. Peter Anvin. Этот пакет можно установить введя:

Настройка PXELINUX
Перед запуском tftp-сервер необходимо настроить pxelinux. Сначала, скопируйте двоичный файл pxelinux в каталог :

Это создаст файл конфигурации загрузчика по умолчанию. Двоичный файл просматривает каталог  в поисках файла с таким же именем, как и IP-адрес клиента в шестнадцатеричной системе. Если он не находит этот файл, он убирает самую правую цифру из имени файла и продолжает поиск, пока цифры не закончатся. Версии syslinux 2.05 и более поздние сперва выполнят поиск файла с таким же именем, как и MAC-адрес. Если таких файлов не найдено, начинается поиск по алгоритму, описанному выше. Если ничего не найдено, используется файл.

Давайте начнем с файла :

Тэг  указывает pxelinux на ядро bzImage, которое было собрано ранее. Тэг  добавляет параметры инициализации ядра. Так как slave-ядро собрано с параметром , также указываем nfsroot здесь. Первый IP - IP-адрес master компьютера, а второй IP - это каталог, который был создан в каталоге для хранения первичной файловой системы для slave.

Информация об Etherboot
Etherboot загружает загрузочные образы (boot images) с сервера TFTP. Как и PXE, он эквивалентен LILO или GRUB. Утилита  позволяет создавать разные образы с использованием различных параметров.

Перед тем как начать
Потребуется установить пакет  (утилиту для того, чтобы сделать отмеченные образы ядра пригодными для сетевой загрузки), чтобы создать образы Etherboot. Этот инструмент создаст заранее настроенный образ ядра из первоначального ядра. Он содержит параметры загрузки, как показано в дальнейшем.

Настройка Etherboot
In this section a simple etherboot image will be created. As the dhcp server gives out the clients root-path in the "option root-path" dhcp.conf, this does not have to be included here. More details can be found in the mknbi manual.

Создание загрузочных образов. Это создаст загружаемый образ системы в формате ELF, способный передать ядру dhcp и путь к корневому каталогу. Это также заставит ядро просмотреть сеть в поисках dhcp-сервера.

Устранение неполадок в процессе сетевой загрузки
Существует несколько вещей, которые можно использовать для отладки процесса загрузки по сети. Прежде всего, можно воспользоваться инструментом. Чтобы установить, введите:

Now various network traffic can be listened to, to make sure the client/server interactions are functioning. If something isn't working there are a few things that could be checked. First make sure that the client/server is physically connected properly and that the networking cables are not damaged. If the client/server is not receiving requests on a particular port make sure that there is no firewall interference. To listen to interaction between two computers type:

Также можно настроить  так, чтобы прослушать отдельный порт, такой как, например, tftp-порт, введя:

Распространенная ошибка, которую можно получить: "PXE-E32: TFTP open time-out". Возможно, это связано с проблемами с межсетевым экраном. Если используется, возможно, стоит проверить  и  и убедиться, что они сконфигурированы должным образом. Клиенту должно быть разрешено подключение к серверу.

Информация об NFS-сервере
NFS означает Network File System - протокол сетевого доступа к файловым системам. NFS-сервер будет использоваться для предоставления директорий slave-узлу. Эта часть может быть, в каком-то смысле, настроена позже, но прямо сейчас все что нужно - это предварительная slave-нода для бездисковой загрузки.

Информация о Portmapper
Различные клиент-серверные службы не слушают отдельный порт, но, вместо этого, полагаются на RPCs (Remote Procedure Calls - удаленный вызов процедур). Когда сервис инициализируется, он прослушивает случайный порт, и затем регистрирует этот порт с помощью утилиты Portmapper. NFS полагается на RPCs и, таким образом, требует того, чтобы Portmapper был запущен перед ее запуском.

Перед началом
The NFS Server needs kernel level support so if the kernel does not have this, the master's kernel needs to be recompiled. To double check the master's kernel configuration type:

The output should look something like this if the kernel has been properly configured:

Установка NFS-сервера
Пакет NFS может быть установлен с помощью системы Portage, посредством ввода:

Этот пакет установит утилиту для проброса портов (portmapping utility), nfs-сервер, и утилиты nfs-клиентов, а также автоматически обработает зависимости инициализации.

Настройка NFS-сервера
Здесь три основных файла конфигурации, которые необходимо отредактировать:

Файл указывает как, кому и что можно экспортировать через NFS. Файл fstab slave-узла будет изменен таким образом, чтобы было можно примонтировать файловые системы NFS, экспортируемые master-узлом.

Обычный файл для master-узла должен выглядеть следующим образом:

Первое поле обозначает каталог для экспорта, а следующее за ним поле указывает, кому и как надо передать содержащуюся в нем информацию. Это поле может быть поделено на две части: кому разрешено монтировать этот отдельный каталог, и что монтирующий этот каталог клиент может делать с файловой системой:  - доступ только для записи,   - для чтения/записи; параметры   и   являются важными для бездисковых клиентов, которые осуществляют запись на диск, так чтобы они не были "сброшены" механизмом ограничения прав доступа root squash при I/O запросах. Файл fstab на ведомом узле,, должен выглядеть так:

In this example, master is just the hostname of the master but it could easily be the IP of the master. The first field indicates the directory to be mounted and the second field indicates where. The third field describes the filesystem and should be NFS for any NFS mounted directory. The fourth field indicates various options that will be used in the mounting process (see mount(1) for info on mount options). Some people have had difficulties with soft mount points so here they are made hard mounts, a look into various options should be done to make the cluster more efficient.

Последний файл, который необходимо отредактировать — это файл, который описывает несколько параметров для nfs при инициализации. Он выглядит так:

Cледует изменить переменную  на количество бездисковых нод в сети.

Запуск NFS-сервера
nfs-сервер, который расположен в каталоге, следует запустить с помощью его init-скрипта, введя команду:

Если нужно, чтобы этот скрипт запускался при загрузке системы, просто введите:

Копирование недостающих файлов
Now the slave's file system will be made in sync with the master's and provide the necessary binaries while still preserving slave specific files.

Настройки сети на бездисковых машинах
In order to prevent the networking initscript from killing the connection to the NFS server, an option needs to be added to on the diskless client's filesystem.

Сценарии инициализации
Init scripts for slaves are located under for services needed on the diskless nodes. Each slave can be set up and customized here, it all depends on what each slave is meant to do.

Теперь, самое время перезагрузить slave-узлы и скрестить пальцы. Работает? Поздравляем, теперь вы гордый обладатель бездисковой рабочей станции(й).