Создать pxe образ linux

Содержание
  1. Создать pxe образ linux
  2. Содержание
  3. [править] Что такое PXE?
  4. [править] Загрузка Linux-системы с использованием PXE
  5. [править] Предварительные данные
  6. [править] Сетевые настройки
  7. [править] Операционная система
  8. [править] Инсталляция и настройка DHCP-сервера
  9. [править] Инсталляция DHCP-сервера
  10. [править] Настройка DHCP-сервера
  11. [править] Запуск DHCP-сервера
  12. [править] Инсталляция и настройка TFTP-сервера
  13. [править] Инсталляция TFTP-сервера
  14. [править] Настройка TFTP-сервера
  15. [править] Настройка pxelinux
  16. [править] Настройка LTSP (Linux Terminal Server Project)
  17. [править] Установка серверной части ltsp
  18. [править] Настройка шлюза
  19. [править] Создание клиентского образа ltsp
  20. [править] Альтернатива LTSP (без привлечения сторонних пакетов)
  21. [править] Создание «базовой площадки»
  22. [править] Подготовка клиентского ядра и initrd
  23. [править] Дополнительная информация
  24. [править] Материалы на Xgu.ru посвящённые загрузке системы
  25. [править] Приложения
  26. [править] Конфигурационные файлы
  27. [править] /etc/dhcp.conf
  28. [править] /etc/exports
  29. [править] /etc/inetd.conf
  30. [править] /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

Создать pxe образ linux

На данной странице детально описывается процесс загрузки бездисковых Linux-станций с помощью PXE, а также рассказывается как с помощью программ проекта LTSP подготовить Linux-систему для использования в качестве сервера загрузки таких станций. Рассматривается процесс настройки всех необходимых компонентов (TFTP, DHCP, NFS-серверов), а также приводятся примеры их конфигурационных файлов.

Содержание

[править] Что такое PXE?

PXE (англ. Preboot Execution Environment, произносится пикси) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы. Для организации загрузки системы в PXE используются протоколы IP, UDP, DHCP и TFTP. PXE-код, прописанный в сетевой карте, получает загрузчик из сети, после чего передаёт ему управление.

[править] Загрузка Linux-системы с использованием PXE

Загрузку Linux-системы с помощью PXE можно выполнить с помощью загрузчика PXELINUX, созданного на базе SYSLINUX. PXELINUX загружается с помощью PXE-кода в сетевой карте, а затем ему передаётся управление. Код PXELINUX не нужно прописывать в чип на сетевой карте (если нужно именно это, см. проект etherboot).

  • pxeЗагрузка PXE-загрузчика. Прошивкой PXE, встроенной в сетевую карту, выполняется загрузка загрузчика pxelinux.
  • dhcp1Получение IP-адреса и адреса TFTP-сервера. Загрузчик pxelinux делает DHCP-запрос и с его помощью получает IP-адрес и адрес TFTP-сервера. По умолчанию адрес TFTP-сервера равен адресу DHCP-сервера.
  • tftpОбращение к TFTP-серверу для получения ядра Linux. Загрузчик pxelinux обращается к TFTP-серверу и запрашивает у него ядро Linux (и, при необходимости, образ initrd).
  • kernelЗапуск ядра Linux. После того как ядро Linux загружено, управление передаётся ему.
  • dhcp2Получение IP-адреса DHCP. Ядро Linux делает запрос DHCP, с помощью которого получает свой IP-адрес, адрес NFS-сервера, на котором находится корневая файловая система, а также путь к местоположению этой файловой системы на диске.
  • nfsМонтирование корневой файловой системы. Корневая файловая система монтируется.
  • initВызов процесса init. На корневой файловой системе находится файл /sbin/init, которому передаётся управление.

[править] Предварительные данные

[править] Сетевые настройки

Сетевые интерфейсы настраиваются автоматически согласно файлу /etc/network/interfaces:

Интерфейс eth0 подключен к сети 10.0.0.0/8 и через него осуществляется выход в интернет.

Интерфейс eth1 подключен к сети 192.168.15.0/24, в которую подключаются тонкие клиенты.

Аллиас на интерфейсе eth1 eth1:1 необходим для соединения с терминальным сервером Windows.

Для осуществления возможности выхода в интернет, всем студентам с тонких клиентов настраивается firewall в таблице nat цепочки POSTROUTING (о чем говорит соответствующая строка в конфигурационном файле настройки сетевых интерфейсов):

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

1. Строка в файле /etc/network/interfaces

Приведённый выше способ годится для ОС Debian/Linux и основанных на нём и может не работать в других ОС.

2. Строка в файле /etc/sysctl.conf

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

Читайте также:  Windows никак не может обновиться

4. Файл /etc/network/options:

Приведённый выше способ годится для ОС Debian/Linux и основанных на нём и может не работать в других ОС.

Подходит к многим (если не всем) Linux, но также как и третий способ (см. выше) работает только до перезагрузки, для чего рекомендуется к помещению в стартовые скрипты. С другой стороны, большинство дистрибутивов предполагают свой способ включить forwarding пакетов и использовать лучше именно его.

[править] Операционная система

[править] Инсталляция и настройка DHCP-сервера

[править] Инсталляция DHCP-сервера

DHCP-сервер не заработал в базовой конфигурации — смотрим почему:

Анализ лог-файла /var/log/daemon.log говорит, что не описана сеть 192.168.15.0/24. Указанная сеть была определена автоматически, исходя из адреса интерфейса, на котором DHCP-сервер прослушивает запросы. По умолчанию этот интерфейс eth0. Конфигурационный файл dhcpd.conf не содержит описания этой сети.

Ниже мы отредактируем этот файл и опишем в нём названную сеть.

Если бы было нужно чтобы DHCP-сервер работал на другом интерфейсе, нужно отредактировать файл /etc/default/dhcp — указать нужный интерфейс:

Сейчас этого делать не нужно.

[править] Настройка DHCP-сервера

Далее можно приступать к непосредственной настройке DHCP-сервера:

Вы можете ещё указать опцию:

для того случая, когда TFTP-сервер и DHCP-сервер разные. В противном случае TFTP-сервер ищется на самом DHCP-сервере.

Если загрузка не выполняется, попробуйте явным образом указать в качестве next-server машину, на которой расположен TFTP-сервер и файл pxelinux.cfg/default.

Конфигурационный файл практически ничем не отличается от файла по умолчанию. Клиентам будут выделяться IP-адреса из диапазона 192.168.15.200-192.168.15.220, указанного в range dynamic-bootp. В качестве DNS-сервера и шлюза используется хост 192.168.15.254.

Опции, имеющие непосредственно отношение к бездисковой загрузке:

[править] Запуск DHCP-сервера

[править] Инсталляция и настройка TFTP-сервера

[править] Инсталляция TFTP-сервера

Установите пакет tftpd-hpa (другие TFTP-серверы могут работать некорректно):

[править] Настройка TFTP-сервера

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

Перезапустим интернет суперсервер:

И проверим выполняет ли интернет-суперсервер прослушивание порта 69 (порт TFTP):

На этом настройка TFTP-сервера завершена.

Я установил TFTP-server (apt-get install tftp-server), который умеет работать в режиме демона, запускается он так:

[править] Настройка pxelinux

[править] Настройка LTSP (Linux Terminal Server Project)

[править] Установка серверной части ltsp

Необходимо установить пакет ltsp-server. В качестве зависимостей от этого компонента, будет скачан и установлен сервер NFS (при условии, что он не был установлен ранее).

После установки нам рекомендовано добавить строку

в файл экспортирования файловых систем /etc/exports.

Корневая файловая система, которую будут использовать клиенты, находится в подкаталоге каталог /opt/ltsp. Она должна быть доступна через NFS. Можно изменить файл /etc/exports сейчас, а можно позже. Мы изменим позже.

[править] Настройка шлюза

Если нужно чтобы бездисковые клиенты могли получить доступ в Интернет через наш шлюз, необходимо настроить на этом шлюзе iptables и включить forwarding пакетов между интерфейсами.

Добавляем строки в /etc/network/interfaces

[править] Создание клиентского образа ltsp

Образ создаётся с помощью скрипта ltsp-build-client. В качестве аргументов скрипту необходимо указать:

  • архитектуру, для которой выполняется сборка;
  • дистрибутив, на базе которого будет построен образ;
  • зеркало, с которого должны инсталлироваться пакеты системы.

В каталог, который будет для бездисковой станции корневым, проинсталлируется дистрибутив etch. В качестве источника пакетов указан локальный apt-proxy. Вместо него нужно указать соответствующее зеркало.

Необходимо экспортировать каталог, в котором находится корневая файловая система бездисковых клиентов.

Рекомендуется делать доступ к файловой системе в режиме read-only, дабы избежать конфликтов при совместном доступе.

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

Читайте также:  Что такое oem активация windows

Добавьте в файл /etc/exports строку:

Теперь, необходимо указать nfs-kernel-server демону чтобы он перечитал этот файл:

В ходе выполнения команды ltsp-build-client был также создан каталог /var/lib/tftpboot/ltsp/i386/ :

Конфигурационный файл сетевого загрузчика pxelinux находится в pxelinux.cfg/default корневого каталога дистрибутива.

Проверяется не только имя default/

Необходимо создать файл /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default:

В документации сказано, что использование initrd.img необязательно при использовании nfs. На практике же, далеко не всегда получается примонтировать nfs-систему из initrd.img. Желательно предоставить пользователю возможность выбора.

Не забудте создать файл /var/lib/tftpboot/ltsp/i386/boot.msg произвольного содержания. Он будет отображаться при загрузке. Его содержание, например, может быть таким:

Измените версию ядра и initrd образа, посмотреть какая у Вас версия можно тут: /var/lib/tftpboot/ltsp/i386

[править] Альтернатива LTSP (без привлечения сторонних пакетов)

Данный раздел позволяет создать клоны целевой системы. Данный раздел предоставляет сведения, полученные эмпирическим путём. Он довольно прост и опробован на практике, но не доведён до конца.

[править] Создание «базовой площадки»

Для работы операционки все необходимые файлы можно разбить на 3 категории:

  • изменяемые сохраняемые (/home . );
  • изменяемые не сохраняемые (/etc /var/log /var/run . );
  • неизменяемые (все прочие).

Мы создадим «базовую площадку», которая инициализирует файловую систему с учётом вышеописанных принципов. Для упрощения, корневую файловую систему разместим в /ltsp

Для начала экспортируем всё необходимое. Затем возьмём за основу содержимое локального initrd.img. Мы экономить не будем, а поэтому закинем необходимые бинарники, а позже библиотеки к ним. Так же возьмём busybox в качестве шелла — вы сможете использовать /bin/ash в /init для отладочных целей. Так же нам необходима часть его функций для развёртывания. ifconfig нам нужен только для того, чтобы убедится в правильности назначения IP-адреса ядром. С помощью mount.nfs будем монтировать необходимое для работы, т.к. больше ничто не может нормально работать с nfs. Так же нам необходим FIFO-файл initctl в каталоге устройств для «общения» с init’ом.

Проверить, какие библиотеки используют скопированные бинарники можно командой ldd (ldd /sbin/ifconfig). У меня получилось всего 2:

/sbin/init запускается первым и остаётся первым всё время. При своём запуске он читает inittab, секцию sysinit. там у нас указано выполнение нашего /init. Это сделано, по большей части, для удобства редактирования.

При загрузке необходимы «свои» конфигурационные файлы. «Выстрелим из бочки» и cнимем копию с рабочей системы скопировав /etc, подправим его. Оригинальный inittab заменит наш файл и загрузка продолжится в исходном режиме. Для уменьшения размеров и ускорения его загрузки по сети, запакуем его и будем распаковывать при каждой загрузке. Так же при загрузке у нас уже, наверняка, будет сконфигурирована сеть, поэтому удалим соответствующие файлы.

Конечный результат выглядит так:

Далее нам остаётся настроить /init.

После загрузки у нас должна оказаться примонтированная /ltsp в качестве корневой системы, назначен IP-адрес (должна быть досягаема донорная система) и запущен на выполнение /sbin/init, а соответственно и /init.

Т.к. у нас всё изначально ro, то мы создадим временную (tmpfs) rw-систему в /sysroot и будем далее работать уже с ней. Создаём на ней необходимые каталоги для неизменяемых файлов и монтируем соответствующие экспортированные разделы донорной системы. Далее — распаковываем туда наш etc.tar.gz. Копируем туда же каталог с устройствами. После этого, переходим на /sysroot и делаем pivot-root тем самым подменяя файловую систему. После этого монтируем /proc и /sys системы. С этого момента дальнейшая загрузка возможна в теории, но многим программам необходим rw-доступ в определённые места. Есть так же ряд тонкостей, которые необходимо подправить; переменная PATH — одна из них. Нам так же надо привести в соответствие файл /etc/mtab с текущим состоянием системы. В конце файла мы передаём управление скрипту, который подменили собой.

Данный метод опробирован на VMWare и Linux Mandiva 2008 DVD. Система загружается и работает, но процесс загрузки всё ещё имеет шероховатости. Завершение работы так же не блещет изяществом.

Читайте также:  Дать разрешение приложению windows 10

Если у вас что-либо не получится — можете вынести этот вопрос здесь на страницу обсуждения. Я постараюсь вам ответить.

[править] Подготовка клиентского ядра и initrd

Необходимо подготовить ядро, под управлением которого будут работать клиентские станции.

При конфигурировании клиентского ядра обязательно нужно включить:

  • Поддержку сетевой карты
  • Поддержку NFS

Ниже будет рассмотренно, как это осуществить

Для начала необходимо выяснить, какой модуль ответственнен за сетевую карту. На работающей машине сделайте:

допустим, мы получили alias eth0 pcnet32. После этого, нам необходимо выяснить, как она включается в ядро.

Так мы узнаем, в каком каталоге лежат файлы, ответственные за модуль. Для драйверов сетевых карт это

Осталось только узнать define-variable для модуля.

В выводе будет что-то похожее на CONFIG_PCNET32. Далеко не у всех модулей имя define-variable совпадает с именем модуля. Осталось только

и, используя клавишу [/], ввести то, что после CONFIG_. Месторасположение нам укажут. Можно, конечно, вручную поправить файл .config, но так можно нарушить зависимости. Итак, сетевые карта включаются в Device Drivers -> Network Device Support -> Ethernet (10 or 100Mbit). Как ни странно, pcnet32 оказался AMD PCNet32 PCI support.

  • Поддержка NFS
  • Поддержка функций dhcp ядром

и соответствующие протоколы к нему (bootp и DHCP, хотя, возможно, будет достаточно только второго). Подразумевается, что TCP/IP-стек будет включён в ядро. Это очень важный момент. Без этой функции ядро сразу после загрузки высвободит выделенный айпи адрес и предоставить насройку пользователю (в initrd, например), а так же ядро будет игнорировать параметр ip=dhcp. В этой ситуации поможет только явное указание адреса, что будет пригодно для загрузки только одной машины (или обязывает к немедленной смене адреса после загрузки). IP-адрес можно указать так: ip=клиент:сервер:шлюз:маска:имя:устройство, но согласитесь, ip=dhcp лучше. Кроме того, в File Systems -> Network File Systems появится не менее важный пункт:

Заодно можно выставить оптимизацию под конкретный процессор и отключить неиспользуемые модули. Например IrDA, BlueTooth или IDE-через-LPT.

Пример конфигурационного файла можно скачать здесь.(где здесь ?) При такой конфигурации ядра initrd не используется.

В том случае, если какой-либо из необходимых для загрузки и монтирования корневой файловой системы, драйвер нельзя (или не хочется) по какой-либо причине включить в ядро, необходимо подготовить виртуальный загрузочный диск initrd.

Если бездисковый клиент будет загружать не только ядро Linux, но и initrd, нужно сделать соответствующие изменения в конфигурационном файле pxelinux.cfg/:

[править] Дополнительная информация

  • [1] (рус.) — обсуждение страницы на OpenNet
  • Настройка и использование RIS-linux (рус.)
  • Установка Windows XP по сети. RIS, но не Microsoft (рус.) — сетевая установка Windows без использования RIS-сервера от Microsoft
  • Walkthrough: Deploy an Image by Using PXE (англ.) — установка Windows 7/Windows 2008 по PXE
  • Спецификация PXE (pdf)
  • PXE на en.wikipedia.org
  • rom-o-matic.net — коллекция PXE-образов
  • PXELINUX на сайте SYSLINUX
  • PXE Magic: Flexible Network Booting with Menus (англ.) — подробная статья, которая рассказывает как делать красивые менюшки при загрузке по PXE

Установка операционной системы через PXE:

system-config-netboot — утилита от Red Hat, подготавливающая операционные системы (любой линукс) для загрузки бездисковых станций с терминального сервера (аналог LTSP, только без ручного труда) http://www.rhd.ru/docs/manuals/enterprise/RHEL-4-Manual/sysadmin-guide/ch-diskless.html

[править] Материалы на Xgu.ru посвящённые загрузке системы

[править] Приложения

[править] Конфигурационные файлы

[править] /etc/dhcp.conf

[править] /etc/exports

Вместо rw, лучше использовать ro, в противном случае возможны ошибки при совместном доступе.

[править] /etc/inetd.conf

[править] /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

Пример конфигурационного файла PXELINUX.

В этом примере в загрузке есть три пункта меню:

  1. Ядро 2.4, без использованя framebuffer’а
  2. Ядро 2.6, с использованием framebuffer’а
  3. То же + дополнительный параметр ядру, впоследствии доступный через /proc/cmdline

Источник

Оцените статью