Diskless nodes/ru

Это HOWTO поможет Вам создать и настроить бездисковые рабочие станции с Gentoo Linux.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Большинство из этих файлов-заглушек должно быть Вам знакомо; такие заглушки как,  или  будут заполнены при запуске 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, которое мы собрали ранее. Ярлык  добавляет параметры инициализации ядра. Так как мы собрали ведомое ядро с параметром  , мы указываем nfsroot здесь. Первый IP - IP-адрес ведущего компьютера, а второй IP - это каталог, который был создан в каталоге для хранения первичной системы ведомого компьютера.

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

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

Настройка Etherboot
В этом разделе мы создадим простой образ etherboot. Так как dhcp-сервер объявляет путь к корневому каталогу на клиентах в строке "option root-path" файла dhcp.conf, нам не требуется включать его здесь. Больше подробностей можно найти в руководстве mknbi.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этом примере, master - это просто имя хоста ведущего узла, но оно также запросто может быть его IP-адресом. Первое поле обозначает каталог, который необходимо примонтировать, а второе поле указывает на место, куда он должен быть примонтирован. Третье поле описывает файловую систему и должно содержать NFS для любого монтируемого каталога с NFS. Четвертое поле обозначает различные параметры, которые будут использованы в процессе монтирования (смотри mount(1), для информации по параметрам монтирования). Некоторые люди имели проблемы с режимом монтирования soft mount, поэтому мы сделали режим hard mount, но Вам следует просмотреть различные параметры в, чтобы сделать Ваш кластер более эффективным.

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

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

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

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

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

Настройки сети на бездисковых машинах
Для того, чтобы предотвратить сценарий инициализации сети от завершения соединения с NFS-сервером, Вам необходимо добавить следующий параметр в файл на файловых системах бездисковых клиентов.

Сценарии инициализации
Вам необходимо столько же сценариев инициализации в каталоге, сколько сервисов Вам требуется на Ваших бездисковых рабочих станциях. Все это зависит от того, что Вам требуется от ведомых станций.

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