Ubuntu: сетевая установка. PXE — грузим всё! Осваиваем мультизагрузку по локальной сети Установка линукс по сети

В данной статье будет рассмотрена установка Ubuntu Linux из репозитория с сетевой загрузкой.

Итак, на клиентские компьютеры будем устанавливать Ubuntu 10.04 с сервера 192.168.0.3, на котором находится сервер сетевой загрузки и dhcpd. Для установки в репозитории обязательно должен быть каталог dists/lucid/main/debian-installer. Если добавить подобные каталоги для других репозиториев (multiverse, universe, restricted), то на этапе «Выбор и установка программного обеспечения» список ПО будет больше. В данном руководстве рассмотрю именно этот вариант. Если вы делали зеркало debmirror, то у вас его, скорее всего, этих каталогов вообще нет. Скачать их можно, например, с ftp://mirror.yandex.ru. Так же во время установки инсталлятор вне зависимости от выбранного репозитория часто обращается к security.ubuntu.com.

Шаг 1: Установка сервера

Установка необходимых приложений:

apt-get install tftpd-hpa openbsd-inetd

Скачиваем и распаковываем образ для сетевой установки:

tar -xvzf netboot.tar.gz -C /var/lib/tftpboot/

chown -R nobody:nogroup /var/lib/tftpboot

Для сетевой загрузки необходимо передать клиенту 2 параметра: имя файла загрузки и сервер загрузочного файла (в dhcpd это параметры filename и next-server) :

next-server 192.168.0.3;
filename «pxelinux.0»;

Сервер установлен, можно ставить систему.

Шаг 2: Установка системы

Для установки системы с сервера в сети необходимо разрешить в BIOS загрузку по сети (PXE). Если ваш bios поддерживает boot menu, то лучше для выбора загрузочного устройства воспользоваться именно им — чтобы не было проблем, если забудешь изменить порядок загрузки.

Если всё хорошо, то перед вами будет экран приветствия установщика:

  • Basic Ubuntu Server
  • Сервер имён (DNS)
  • Edubuntu server
  • LAMP server
  • Почтовый сервер
  • OpenSSH server
  • PostgreSQL database
  • Сервер печати
  • Samba file server
  • Ubuntu Enterprise Cloud
  • Virtual Machine host
  • 2D/3D creation and editing suite
  • Audio creation and editing suite
  • Edubuntu KDE desktop
  • Edubuntu desktop
  • Kubuntu desktop
  • Kubuntu netbook
  • LADSPA and DSSI audio plugins
  • Large selection of font packages
  • Mythbuntu additional roles
  • Mythbuntu frontend
  • Mythbuntu master backend
  • Mythbuntu slave backend
  • Ubuntu Netbook
  • Ubuntu Desktop
  • Video creation and editing suite
  • Xubuntu desktop
  • Manual package selection

В статье подробно рассмотрен процесс развертывания сети "тонких клиентов", работающих под упралвением дистрибутива Thinstation Linux и использующих сервер приложений на базе Windows 2000

Использование бездисковых Linux-станций с загрузкой по сети

Впервые опубликованно в журнале "Системный администратор" N11/2004

Постановка задачи

Работа сотрудника отдела автоматизации – это постоянная борьба с проблемами и решение задач, которые попеременно подкидывают пользователи, разработчики эксплуатируемого программного обеспечения и руководство организации. И если два первых направления работы – это просто «борьба за живучесть корабля», то последнее, как правило, поступательное движение вперед. Как раз в ходе решения одной из таких задач и появилась на свет данная статья.

Итак, перед отделом автоматизации была поставлена задача в короткие сроки ввести в строй два новых удаленных офиса, каждый численностью в пять – десять человек. Оба офиса и «голову» связали посредством технологий VPN в одну сеть. Минимальная ширина канала между тремя точками составила 256 Кбит, что вполне удовлетворило наши потребности. В каждом из офисов был развернут дополнительный контроллер домена Windows 2000, а для минимизации трафика домен разделили на несколько сайтов. Все вышеописанное является стандартным решением, и здесь я не ожидал никаких сюрпризов. Главным вопросом для нас было – как поведет себя основная среда работы сотрудников организации – комплексная система автоматизации, при работе с которой и в пределах одной площадки хватало проблем. Изначально ориентированная на Novell/BTRIVE 6.15 после миграции сети на Windows, она работала под Windows/Pervasive.SQL 7.

После недели тестов этого основного бизнес-приложения организации, оказалось что разработчик и вовсе не оставил нам выбора, так как использование встроенного терминального режима используемой автоматизированной системы по ряду причин нас не устроило. Опять же, из-за особенностей функционирования, в качестве терминального сервера была выбрана платформа Microsoft Windows Server. Тестирование же решений компании Citrix, мы не проводили, так как работа с «родными» терминальными службами Windows нас вполне удовлетворила, а использование надстроек только увеличивает стоимость всей системы.

Когда с серверной частью все определилось, встал вопрос по клиентской составляющей системы. В первую очередь хотелось бы снизить необходимость в администрировании пользовательских машин, так как держать выделенного администратора на удаленных площадках не планировалось. Кроме того, желательным представлялось уменьшить стоимость решения, которая возросла из-за необходимости покупки терминальных лицензий. Также необходимо было учесть намерение разместить в офисах устаревшие компьютеры класса Celeron-400 с ОЗУ от 32 до 64 Мбайт.

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

В роли ОС, которая будет по сети загружаться на рабочие станции, я выбрал Linux – что обеспечивает лицензионную чистоту решения (по крайней мере, на сегодняшний момент). Доступ к рабочему столу Windows 2003 должен был осуществляться при помощи разработки проекта www.rdesktop.org, который стал стандартом для решения данной задачи. В качестве же необходимых для такой загрузки серверов DHCP и TFTP, логично было бы использовать уже имеющиеся в каждом сайте дополнительные контроллеры домена Windows 2000. Благо, существуют как бесплатные реализации DHCP/TFTP под эту операционную систему, как и встроенные сервера. При этом TFTP наличествует в рамках службы Remote Installation Services (RIS).

Сетевые карты клиентских машин, естественно должны поддерживать возможность загрузки по Etherboot/PXE. В отдельных случаях из-за несовместимости оборудования я допускал использование загрузчика, расположенного на дискете.

Выбор реализации Linux

При выборе варианта ОС Linux с возможностью загрузки по сети в первую очередь я обратил внимание на уже готовые дистрибутивы подобной направленности со встроенным пакетом rdesktop. Наиболее известный из них NetStation (netstation.sourceforge.net), который застыл в виде бета версии с конца 2002 года, и его наследники: PXES (pxes.sourceforge.net), Thinstation (thinstation.sourceforge.net), и DIET-PC (diet-pc.sourceforge.net). При этом DIET-PC предназначен в первую очередь, пользователям, хорошо знакомым с ОС Linux, что сразу исключает его из области рассмотрения. Поскольку процедура его настройки достаточно кропотлива, и в DIET-PC присутствует достаточно много настроек которые простому смертному, а не Linux-гуру, никогда не пригодяться. PXES – является наиболее «продвинутым» с большим числом дополнительных возможностей, включая собственную графическую среду, что также лишнее в моем случае. В моей конфигурации клиент, минуя промежуточные меню, должен был сразу загружать удаленный рабочий стол и выходить на окно ввода пароля Windows 2003 Server. Таким образом, я обратил внимание на оставшийся дистрибутив – Thinstation.

Кратко рассмотрим его возможности:

поддержка протоколов X, RDP, VNC, SSH, Telnet, ICA и Tarantella;

возможность использовать браузер Firefox;

работа на ПК класса x86-100МГц c ОЗУ 16Мбайт;

наличие pre-build образа, и возможность самостоятельной сборки через web-интерфейс;

поддержка локальных дисков, USB и LPT принтеров

Из всех вариантов загрузки наиболее простой – это PXE при помощи Etherboot-загрузчика. В рамках этой статьи, мы пойдем по самому простому пути – использовании заранее скомпилированного образа.

Установка и первоначальная настройка

Начнем с того, что скачаем со странички http://struktur.kemi.dtu.dk/thinstation/download/, доступной по ссылке в официального сайта последний из архивов, в моем случае – это был Thinstation-2.0.2-prebuilt-NetBoot.zip. Архив содержит в себе все что необходимо, включая TFTP/DHCP сервер Tftpd32 который удобен при первоначальной настройке и конфигурировании. Кстати, если вы будете его использовать, то я бы порекомендовал сразу же обновить его с домашней странички, где имеется более свежая версия. Кстати, Tftpd32 (http://tftpd32.jounin.net/) – сама по себе отличная программа. Причем настолько, что даже рекомендуется Cisco для некоторых потребностей клиентов компании.

Развернув архив, мы получаем пять директорий:

BootDisk – образ дискеты с Etherboot-загрузчиком, для ПК, с неподдерживаемыми сетевыми картами

BootPXE – загрузчик через PXE для эмуляции Etherboot

BuildFiles – примеры конфигурационных файлов

TFtp – сервер Tftpd32

TftpdRoot – корневая директория TFTP сервера

Итак, первым делом, запускаем самораспаковывающийся архив thinstation.nbi (autoextract).exe, содержащий один единственный файл thinstation.nbi. архив сделан для того чтобы у вас была возможность ознакомиться с «CITRIX(R) LICENSE AGREEMENT».

Теперь копируем TFtp и TftpdRoot на Windows сервер в нашем сегменте сети. В качестве такого сервера при использовании Tftpd32 может выступать любая Windows-машина со статическим IP-адресом. Допустим, мы скопировали обе директории на диск C:\. Запускаем на исполнение C:\TFtp\Tftpd32.exe. Внешний вид окна программы представлен на рисунке.

Необходимо задать параметры сервера. Нажимаем кнопку «Settings», и прописываем в качестве «Base directory» значение «C:\TftpdRoot». Далее идем на вкладку «DHCP server». Там необходимо указать начальный IP-адрес выделяемый DHCP-сервером («IP pool starting address»), размер пула адресов («Size of pool»), маску подсети («Mask»), имя файла с Etherboot-загрузчиком(«Boot file»), в нашем случае это - thinstation.nbi.zpxe. Нажимаем кнопку «Save», для сохранения настроек, и сворачиваем приложение.

Все готово для работы. Вы можете попробовать включить одну из машин с сетевой картой, поддерживающей загрузку по протоколу PXE, не забыв выставить порядок загрузки в BIOS станции. При включении, машина должна получить IP-адрес из выделенного диапазона и загрузить по протоколу TFTP файл thinstation.nbi.zpxe. Он содержит загрузчик, эмулирующий работу сетевой карты с поддержкой Etherboot. Затем, управление передается загрузчику, который в свою очередь еще раз запрашивает по DHCP адрес, и загружает файл с именем, совпадающим с названием файла самого загрузчика минус расширение zpxe, то есть thinstation.nbi. Данный файл и есть образ Thinstation. Когда образ загружен, Thinstation пытается загрузить из корневой директории TFTP сервера конфигурационный файл thinstation.conf- , затем thinstation.conf- . Если такие файлы найдены, то Thinstation объединяет их содержимое с общим конфигурационным файлом thinstation.conf.network, который, в отличие от двух выше перечисленных обязан присутствовать на TFTP-сервере. Постарайтесь избежать конфликтов между главным файлом настроек и специфическим к группе или конкретной станции. Кроме того, можно объединять одним конфигурационным файлом целые группы IP и MAC-адресов. Это делается при помощи файла thinstation.hosts, имеющего следующий формат:

# HOST MAC GROUPS COMMENTS ws-oper1 0002B3655065 hi_res # Оператор №1 ws-oper2 0002B3651075 hi_res # Оператор №2 ws-oper3 0002B365A021 hi_res ssh_en # Оператор №3

В данном примере предполагается, что имеются два файла thinstation.conf.group-hi_res и thinstation.conf.group-ssh_en. Настройки прописанные в первом файле применяются ко всем трем станциям, а настройки из второго – только к компьютеру ws-oper3.

То, как отображаются сессии терминальных клиентов в оснастке диспетчера терминальных служб, вы можете увидеть на рисунке.


Клиенты с именами вида ts_ - это как раз клиентские терминалы, работающие под управлением Thinstation. Клиенты с именами вида P работают под управлением дистрибутива PXES, рассмотрение которого выходит за рамки данной статьи. Далее я приведу простой, но вполне работоспособный вариант конфигурационного файла с комментариями. # Опции сессий # # Первая сессия должна обязательно начинаться с номера 0. # При отсутствии необходимости выбора сессии, например, когда вы используете # только rdesktop, можно снять комментарий со следующего параметра, и # исключить меню выбора сессий. #AUTOSTART=On SESSION_0_TITLE="Windows 2003 terminal server (16 bit color depth)" SESSION_0_TYPE=rdesktop SESSION_0_RDESKTOP_SERVER=192.168.0.1 SESSION_0_RDESKTOP_OPTIONS="-u Administrator -p password -a 16" SESSION_1_TITLE="VNC server" SESSION_1_TYPE=vncviewer SESSION_1_VNCVIEWER_SERVER=192.168.0.2 SESSION_2_TITLE="Telnet server" SESSION_2_TYPE=telnet SESSION_2_TELNET_SERVER=192.168.0.3 SESSION_3_TITLE="SSH server" SESSION_3_TYPE=ssh SESSION_3_SSH_SERVER=192.168.0.4 # Общие опции # # Раскладка клавиатуры. В случае работы с rdesktop она роли не играет KEYBOARD_MAP=en_us # Опции XServer # SCREEN_RESOLUTION="1024x768" SCREEN_COLOR_DEPTH="16" SCREEN_HORIZSYNC="30-64" SCREEN_VERTREFRESH="56-87" MOUSE_RESOLUTION=100 # Опции печати # PRINTER_0_NAME=usb PRINTER_0_DEVICE=/dev/usb/lp0 PRINTER_2_TYPE=U

В заключение статьи, хочу сказать, что после отладки работы с терминальными клиентами, лучше всего передать функции TFTP- и DHCP- серверов программному обеспечению, способному работать в режиме службы на Windows NT/2000/2003/XP, например как я уже говорил, «родным» службам Windows, либо воспользоваться соответствующими сервисами любой другой операционной системы.


Кроме того, на сайте проекта thinstation.sourceforge.net при помощи веб-интерфейса вы можете самостоятельно перекомпилировать образ Thinstation без загрузки исходных кодов, включив какие-либо отсутствующие в prebuild образе функции, например, браузер, или исключив ненужные модули.

Андрей Маркелов. Андрей Маркелов (www.markelov.net) - Использование бездисковых Linux-станций с загрузкой по сети

В данной статье опубликованы способы загрузки компьютера по сети с использованием образов дискет/HDD дисков (возможно использование размеров отличных от 1.44 Мб). Это может понадобиться при отсутствии под рукой другого загрузочного носителя, или для удобства эксплуатации в определенных условиях. Способы как минимум раз были успешно испробованы в реальной ситуации, а если вам известны другие, то присылайте свои варианты администратору сайта . Если вы знаете, как упростить существующие способы, то присылайте свои варианты авторам способов или опубликуйте их .

Способ 1: Thinstation и RIS сервер

Представляю статью о загрузке по сети, которую написал участник конференции OSZone .

Предисловие

Возникла у меня такая ситуация. Принесли компьютер, еле живой, Asus S200, та еще штучка как оказалось впоследствии. Диск был разбит по грамотному (два раздела), и на втором был дистрибутив Windows, спасибо предыдущему настройщику, облегчил задачку.

Итак, имеем компьютер без флоппа и CDROM. Есть сетевая карта SIS900. В BIOS есть возможность загрузиться с HDD, USB Floppy, USB Flash, USB CDROM и по сети.

На момент начала мучений с ним была только флешка, но грузиться с нее он отказался. Достать USB СD или Floppy не удалось. Оставалась только сетевая загрузка. Кстати, как оказалось впоследствии, что реально помог бы только USB флоп. USB СD не опознался.

Читая доки MS и форумы по автоустановке, натыкался на сокращение RIS и упоминание того, что можно загрузиться с сетевой карты и установить ось. Вот и решил проверить. Поставил RIS, создал образ, настроил DHCP и... получил огромный облом. Система действительно загружалась, проходила текстовую часть установки и вываливалась в BSOD с кодом 0x000000BB. Согласно толкованиям, найденным на просторах Интернета, для исправления нужно всего ничего, заменить драйвера сетевой карты в дистрибутиве или заменить сетевую карту. Скачал новую версию драйверов, прочитал KB315279 и ссылки по ней, сделал все как описано, и танцы с бубном окончились продолжительным BSOD-ом с тем же кодом.

Ладно, если не получается с наскока давайте читать инструкции. Изучал, изучал и наткнулся на возможность использования практически любого образа диска для загрузки по сети.

Что понадобится

  • Утилита для создания загрузочных сетевых образов из обычных. Загружаем
  • Perl. Загружаем . (эта версия сработала у меня, другие пробуйте сами, я в Perl не игрок)
  • Блокнот из стандартной поставки Windows или любой другой ASCII редактор
  • Thinstation. , файл (8.86 Мб) (вполне возможно, что файл и другой подойдет)
  • Установочный диск с Windows 2000 Server
  • Прямые руки, желание научиться:)

Приступаем

Шаг 1

Скачиваем и распаковываем утилиту преобразования. Для ясности, в D:\BootDisk\.

Шаг 2

Скачиваем и устанавливаем Perl.

Шаг 3

Создаем образ дискеты или используем готовый образ.

  • Если нет образа загрузочной дискеты в виде файла, тогда вставляем загрузочную дискету с MS-DOS и выполняем команду D:\BootDisk\MKIMAGE.BAT DOS . Поддерживаются стандартные 1.44 Mb приводы.
  • Если образ уже есть, тогда модифицируем файл создания загрузочного образа.
    1. Открываем блокнот и копируем/записываем следующий код
      @echo off
      cd mknbi-1.4.1-win
      perl.exe mknbi.pl --nosquash --format=nbi --target=dos ..\image.dos >..\dos.bin
      rem Если хочется универсальности, тогда комментируем верхнюю строчку (дописываем REM)
      rem и раскомментируем нижнюю (удаляем REM) (запуск MKIMAGE2 имя_образа_с_расширением)
      rem perl.exe mknbi.pl --nosquash --format=nbi --target=dos ..\%1 >..\dos.bin
      cd..
      :end
      Сохраняем его под именем MKIMAGE2.BAT
    2. Копируем образ дискеты в имя D:\BootDisk\image.dos
    3. Запускаем файл MKIMAGE2.BAT

Шаг 4

Ожидаем завершения работы батника. Проверяем, что размер dos.bin больше размера image.dos примерно на 4 кб.

Шаг 5

Распаковываем thinstation. Из архива нам нужен файл TFtpdRoot\thinstation.nbi.zpxe . Копируем его в D:\BootDisk\ с именем dos.bin.zpxe . Это загрузчик PXE.

Шаг 6

Настраиваем DHCP (если настроен, то переходим к шагу 7). У меня Win 2000 Server так что буду описывать для него.

Если DHCP не установлен, тогда его сначала нужно установить. (Панель управления> - Установка удаление программ - , затем выделить Сетевые службы , Состав и поставить галочку на DHCP ).

Настраиваем DHCP. Панель управления - Администрирование , запускаем оснастку DCHP . Выбираем сервер DHCP который мы хотим настраивать. Затем из контекстного меню выбираем Создать область . В появившемся мастере вводим имя области и комментарий. Давайте осмысленные имена, чтобы и через пару-тройку лет с этим мог разобраться другой админ или вы сами. Затем вводим начальный и конечный адрес который хотим раздавать через DHCP. Максимальная емкость зависит от числа одновременно устанавливаемых машин. Если в диапазон адресов попал статический адрес, можете его ввести на следующей странице в список исключаемых. Дальше по вашему усмотрению. После создания области в секции Параметры области, нужно настроить параметры 066 IP сервера и 067 Имя файла для загрузки. В параметр 067 вписываем имя dos.bin.zpxe .

Шаг 7

Устанавливаем и конфигурируем RIS

Панель управления - Установка удаление программ - Добавление и удаление компонент Windows , ставим галочку на Служба удаленной загрузки . После завершения установки идем в Администрирование - Службы и запускаем службу Упрощенный FTP-демон .

Шаг 8

Копируем в C:\tftpdroot файлы dos.bin.zpxe и dos.bin .

Шаг 9

Устанавливаем на компе загрузку с сетевого адаптера по PXE и пробуем загрузиться.
Если все нормально, то на компьютере, который загружается, будет идти поиск DHCP сервера, затем загрузчик покажет что присвоен IP адрес, и пошла загрузка с образа.

Общие примечания

Для редактирования/создания образа дискеты можно пользоваться WinImage, плугином к Total Commander

0. Вступление
Загрузка по сети - это очень удобная, и зачастую даже просто незаменимая вещь. Не нужно вскрывать корпус компьютера(порой это совсем не так просто, как с обычными PC-блоками), не нужен cdrom, не нужен свободный ide-шлейф, не нужен дисковод, не нужно USB.
Система для загрузки проста для изменения - её не нужно никуда "заливать" и записывать. Это просто каталог.
Почему-то эту тему боятся и избегают многие. Это кажется чем-то сложным, проблематичным и труднореализуемым. На самом деле всё, как и остальное гениальное, просто.

1. Что нужно, чтобы загрузить Linux на машину по сети?

  • В машинке должна быть сетевая карточка с поддержкой Intel"s PXE. Есть ещё несколько реализаций протоколов загрузки по сети, но PXE наиболее распространён и является, практически, де-факто подразумеваемым протоколом загрузки по сети.
  • Настроенная Linux-система(назовем её машина-хост), которая будет выдавать IP-адрес, и содержать загружаемое ядро и сам образ системы. Это, вообще-то, не обязательно может быть Linux-система, но в данном how-to это будет подразумеваться.
  • Сеть Ethernet. Машину-хост и машинкой-жертвой можно соединить простым кросс-кабелем, а можно и обычными методами. :)
  • Знание MAC-адреса машинки-жертвы. Его можно посмотреть либо по логам DHCP-cервера, либо переписать прямо с экрана в момент начала загрузки по PXE, ну а можно и вовсе обойтись, и настроить DHCP-cервер так, чтобы он выдавал нужный IP и образ всем без разбору. Но это совсем другая история(хорошо описанная в гугле) и она выходит за рамки данного how-to.

2. Как происходит процесс загрузки по сети?
Быстрый ответ: автоконфигурируется сеть по dhcp, загружается загрузчик по tftp, который загружает ядро по tftp, которое загружает всю остальную рут-систему по nfs.
Подробный ответ: Первое, что делает при загрузке машинка, в которой установлена загрузка через PXE - посылает широковещательный DHCP-запрос в сеть в поисках сервера. Машина-хост, на которой мирно посапывая дремлет DHCP-демон, выдаёт адрес и путь к файлу для загрузчика. PXE Boot ROM на основе полученной информации, конфигурирует сетевой адаптер. Если всё проходит успешно, загрузчик загружается по TFTP протоколу и берёт на себя дальнейший ход событий. В общей схеме события развиваются дальше так - загружается по тому же TFTP-протоколу специально подготовленное для загрузки по сети Linux-ядро. Ядру при этом загрузчик передаёт нужные параметры для загрузки по NFS-протоколу. Ядро, загрузившись, монтирует nfs-раздел на машине-хосте и загружает систему уже оттуда.

3. Как это всё настроить и поднять с нуля?
Актуальный вопрос:)
Ведь нам нужны:
а) установленные, настроенные и запущенные dhcp-, tftp- и nfs-сервера
б) загрузчик и готовый образ корневой системы, в который можно chroot-иться и настраивать по надобностям, устанавливать/добавлять пакеты и тп.
в) ядро, подготовленное для загрузки по сети.
Итак, по пунктам, подразумевая, что система у нас Debian(и радуясь, что когда-то сделали правильный выбор дистрибутива), и что все относящиеся к делу файлы мы поместим в каталог /tftpboot:

0. Создание каталогов и установка загрузчика pxelinux.
Для начала создадим и определим каталоги.
Нашим "главным" каталогом пусть будет /tftpboot.
В нем будет два подкаталога: boot/ (с корневой системой) и pxelinux.cfg/ (с настройками загрузчика)

# mkdir /tftpboot # mkdir /tftpboot/boot # mkdir /tftpboot/pxelinux.cfg

# apt-get install syslinux # cp /usr/lib/syslinux/pxelinux.0 /tftpboot/ #

Serial 0 prompt 1 timeout 99 default pxeboot label pxeboot kernel bzImage append ip=dhcp nfsroot=192.168.150.126:/tftpboot/boot root=/dev/nfs init=/sbin/init

Его синтаксис похож на синтаксис lilo.conf. Комментарии, вроде бы тоже не нужны.
Если нужно создать различные конфигурации для разных машин, то можно создавать вместо default файлы для каждого MAC-адреса отдельно. Подробнее про это можно прочитать на странице pxelinux.

1. Создание корневой файловой системы
Это самый интересный вопрос. Здесь стоит сформулировать чётко постановку задачи - для чего нужна будет система? Какой софт там должен быть, на каком железе она будет запускаться и тп.
В принципе, для простейшей загрузки достаточно минимальной системы в пару мегабайт. Образов и руководств по созданию оных в гугле море.
Это может быть rescue-система, может быть инсталлятор чего-нибудь, а может быть и полноценная desktop-система.
В моем случае, мне нужно, чтобы система загружалась практически на любом железе и стартовала мой собственный инсталлятор. Поскольку места мне не жалко, то я решил просто поставить дефолтную минимальную debian-cистему. Радуясь тому, что когда-то выбрал правильный дистрибутив, это оказалось очень просто сделать:

# apt-get install debootstrap ... # debootstrap sarge /tftpboot/boot

При завершении, в каталоге /tftpboot/boot будет полностью рабочая, функциональная и загружаемая система, примерно 140Мб весом. В этот каталог можно за-chroot"иться, инсталлировать и удалять пакеты, изменять rc-cкрипты, и вообще творить всё что угодно. Такой себе линукс в линуксе.

2. Создание ядра.
Для того, чтобы ядро можно было загружать по сети нужно несколько условий при его сборке:
а) включить опцию "Network Options -> IP: autoconfiguration -> dhcp" (для универсальности, лучше все варианты тоже включить)
б) включить поддержку NFS Filesystem
в) включить "FS->Network Filesystems->Root Over NFS".
Это обязательная часть специфики. Остальное же - на ваше усмотрение. Что нужно в этом ядре, что не нужно. Лучше не жалеть на размере, и вкомпиливать в него больше драйверов, отключив модули совсем, чтобы избавиться от необходимости двухступенчатой загрузчки и initrd-файла.

3. Настройка DHCP.
Инсталлим сервер:

# apt-get install dhcpd

Редактируем его конфигурационный файл(/etc/dhcpd.conf) под свою сеть и добавляем в него запись для нашей машинки-жертвы:

Host pxeboot { hardware ethernet 08:00:0e:aa:bb:cc; fixed-address 192.168.150.127; filename "/tftpboot/pxelinux.0"; }

Предисловие.

Это придумано давным давно. Во всяком случае в статье , написанной в конце прошлого века (1998 год), идею сетевой загрузки автор называет старой. И это не удивительно, загрузка операционной системы по сети - мечта любого администратора. Ведь операционная система загруженная с сервера всегда будет «белой и пушистой», а изменения и обновления достаточно будет внести в загрузочный образ на сервере, вместо того, чтобы бегать с флешкой по всему парку компьютеров.

Почему же такая хорошая идея не получила широкого распространения? Из-за сложности? Нет! Серверы для сетевой загрузки настраиваются довольно просто, как правило одним конфигурационным текстовым файлом, и, забегая вперёд, скажу, что в lanboot_server создание файлов конфигурации производится автоматически. На практике это сводится к «включил, и готово».

Что потребуется?.

    Если локальная сеть не настроена - настройте её. После этого смело командуйте lanboot start и клиенты могут загружаться.

    Для остановки соответственно lanboot stop. В ALTLinux и Ubuntu придётся поработать руками, доустановить необходимое и настроить.

Впрочем, не всё так страшно. Скрипт запуска lanboot (/usr/sbin/lanboot) должен работать и в других линуксах, например в Simply Linux (ALT) скрипт создал правильные файлы конфигурации и сервер запустился, только загружаемых файлов в «TFTP directory» (/var/lib/tftpboot) не оказалось, и это не удивительно, ведь откуда взяться файлам PuppyRus в ALTLinux.

Продолжим.

Из чего собрано.

Для загрузки Linux по сети нам потребуется tftp-сервер (используется tftp-hpa-5.0), bootp или dhcp (я выбрал dhcp-4.1.1, хотя сначала использовал bootp) и inetd или xinetd (я выбрал inetd, он проще).

Как настраивается.

1. Bootp

    Самый простой.

    Выдаёт IP привязанный к MAC-адресу клиента.

    Поэтому может применяться только в сетях с постоянным парком машин.

Пример /etc/bootptab

Используемые параметры:

Td -- TFTP directory (отсюда будут загружаться файлы) - rp -- root path (путь к корню сервера) - bf -- bootfile (загружаемый файл) - sa -- boot server address (IP TFTP-сервера) - sm -- subnet mask (маска подсети) - gw -- gateways (шлюз) - to -- time offset (seconds) - ha -- hardware address (аппаратный, он же MAC адрес) # Можно писать либо в столбик, либо в одну строку. # Настройки, общие для всех клиентов: .default:td=/var/lib/tftpboot:rp=/var/lib/tftpboot:bf=pxelinux.0:sa=192.168.1.2:sm=255.255.255.0:gw=192.168.1.1:to=auto: #или так.default:\ td=/var/lib/tftpboot:\ rp=/var/lib/tftpboot:\ bf=pxelinux.0:\ sa=192.168.1.2:\ sm=255.255.255.0:\ gw=192.168.1.1:\ to=auto: # Настройки для клиентов в других подсетях: #.subnet1:sm=255.255.255.0:gw=192.168.0.1:tc=.default: # Индивидуальные настройкм каждого клиента (примеры): #notick:tc=.default:ha=00140B016592:ip=192.168.1.4: #sharick:tc=.default:ha=0123456789ab:ip=192.168.1.2 #bobick:tc=.default:ha=ba9876543210:ip=192.168.1.5 # и т.д.

2. Dhcpd

Полноценный dhcp-сервер.

Пример /etc/dhcpd.conf

# dhcpd.conf # # Use this to enble / disable dynamic dns updates globally. ddns-update-style none; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; range dynamic-bootp 192.168.1.10 192.168.1.200; default-lease-time 21600; max-lease-time 43200; filename "pxelinux.0"; }

3. Tftp

Файловый сервер с упрощённым протоколом.

Пример /etc/exports

#Каталоги, разрешённые для tftp-загрузки и nfs-монтирования (no_root_squash - разрешён пользователь root) /var/lib/tftpboot 192.168.1.0/255.255.255.0(ro,no_root_squash,sync)

4. Inetd

У нас служит для запуска tftp-сервера и bootp-сервера. Но может запускать и другие службы. Файл конфигурации /etc/inetd.conf. Файл длинный, «на все случаи жизни». Поэтому привожк только нужные строки.

Пример /etc/inetd.conf.

# Эта строка запускает tftp-сервер tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /var/tftpboot # Эта строка запускает bootp-сервер bootps dgram udp wait root /usr/sbin/bootpd bootpd -i

5. Xinetd

Функции те же, что и у inetd, но настройки сложнее. Установлен в Альтлинуксе.

Пример /etc/xinetd.conf

# # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { log_type = SYSLOG authpriv info; log_on_success = PID HOST DURATION; log_on_failure = HOST; instances = 100; per_source = 5; only_from = 127.0.0.1; } includedir /etc/xinetd.d Для каждой запускаемой программы отдельный файл конфигурации кладётся в /etc/xinetd.d Пример /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { disable = no; socket_type = dgram; protocol = udp; wait = yes; user = root; server = /usr/sbin/in.tftpd; server_args = -u tftp -s /var/lib/tftpboot; per_source = 11 cps = 100 2 flags = IPv4 only_from = 192.168.1.0; }

Автоматическая настройка.

Для автоматической настройки переменные берутся из вывода стандартных linux-команд ifconfig и route. Поэтому их можно получить в любом Linux.

Serv=$(ifconfig | grep inet | grep -v 127.0.0.1 | cut -f 2 -d ":" | cut -f 1 -d " ") mask=$(ifconfig | grep inet | grep -v 127.0.0.1 | cut -f 4 -d ":") gate=$(route | grep UG | cut -f 10 -d " ") subnet=$(route | grep " U " | cut -f1 -d " ")

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

Скрипт lanboot так же копирует в TFTP directory файлы PuppyRus: vmlinuz, initrd.gz и pup*-200.sfs, необходимые для запуска. Файлы берутся из операционной системы, на которой запущен сервер, и, если эта система не PuppyRus, то их взять неоткуда. Поэтому на других Linux вышеперечисленные файлы необходимо поместить в /var/lib/tftpboot вручную (копированием).