- Создать pxe образ linux
- Содержание
- [править] Что такое PXE?
- [править] Загрузка Linux-системы с использованием PXE
- [править] Предварительные данные
- [править] Сетевые настройки
- [править] Операционная система
- [править] Инсталляция и настройка DHCP-сервера
- [править] Инсталляция DHCP-сервера
- [править] Настройка DHCP-сервера
- [править] Запуск DHCP-сервера
- [править] Инсталляция и настройка TFTP-сервера
- [править] Инсталляция TFTP-сервера
- [править] Настройка TFTP-сервера
- [править] Настройка pxelinux
- [править] Настройка LTSP (Linux Terminal Server Project)
- [править] Установка серверной части ltsp
- [править] Настройка шлюза
- [править] Создание клиентского образа ltsp
- [править] Альтернатива LTSP (без привлечения сторонних пакетов)
- [править] Создание «базовой площадки»
- [править] Подготовка клиентского ядра и initrd
- [править] Дополнительная информация
- [править] Материалы на Xgu.ru посвящённые загрузке системы
- [править] Приложения
- [править] Конфигурационные файлы
- [править] /etc/dhcp.conf
- [править] /etc/exports
- [править] /etc/inetd.conf
- [править] /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 действует до первой перезагрузки, а для автоматического включения на этапе старта системы необходимо использовать первый или второй методы.
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, если точно не знаете к каким последствиям это приведёт!
Добавьте в файл /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. Система загружается и работает, но процесс загрузки всё ещё имеет шероховатости. Завершение работы так же не блещет изяществом.
Если у вас что-либо не получится — можете вынести этот вопрос здесь на страницу обсуждения. Я постараюсь вам ответить.
[править] Подготовка клиентского ядра и 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.
В этом примере в загрузке есть три пункта меню:
- Ядро 2.4, без использованя framebuffer’а
- Ядро 2.6, с использованием framebuffer’а
- То же + дополнительный параметр ядру, впоследствии доступный через /proc/cmdline
Источник