Linux как сделать загрузку по сети

Обновлено: 02.07.2024

Заметки по ходу настройки "разного" в Linux. Хочу разобраться - читаю исходники. Программирование, администрирование, микроэлектроника, фотографирование и пр.

понедельник, 17 сентября 2012 г.

Загрузка по сети. PXE NFSROOT GRUB2

Изготовление окружения сетевой загрузки PXE, для виртуальных машин и контейнеров.


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

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

Сетевая загрузка вовлекает много компонентов программного обеспечения - dhcp-сервер, tftp-сервер, загрузчик, клиентский bios.

Замените, в соответствии со своими настройками, строки:
userserver - имя пользователя на сервере
username - имя пользователя на клиенте

Настройка DHCP/TFTP сервера DNSMasq для поддержки сетевой загрузки клиентов

Т.к. сейчас на микросервере используется DNSMasq в качестве DNS/DHCP/TFTP сервера, то укажем его опции настройки.

Опции, относящиеся к настройке TFTP сервера в файле /etc/dnsmasq.conf

Создадим папку tftpboot в домашней папке под простым пользователем сервера "userserver":
userserver@microserver$ mkdir

Также не забудем установить разрешение на изменение папки всем желающим:

И для удобства пополнения и редактирования эту папку можно внести в список ресурсов SAMBA либо nfs.

Настройка PXE меню на основе PXELinux

Для минимальной работоспособности в корне TFTP сервера надо создать папку pxelinux.cfg, а в ней текстовый файл default.

vesamenu.c32 из комплекта syslinux. Его можно найти на любом загрузочном диске Ubuntu в папке isolinux. Минимальное содержимое главного меню сетевой загрузки - файл pxelinux.cfg/default. В нём также содержится пункт меню "Ubuntu Livecd 12.10 Gnome Shell Remix" для загрузки CD образа Ubuntu через сеть (см далее по тексту). APPEND root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd initrd=ubuntu/livecd/casper/initrd.lz -- Сделаем так, что будет возможно загрузить текущий (новейший) образ live cd ubuntu через сеть Удобство будет заключаться в том, что достаточно будет скачать (а потом, будет автоматом) текущий iso образ и положить в папку. Заменить символическую ссылку и перезапустить сервисы. В каталоге tftpboot создадим папку ubuntu, в ней livecd. userserver@microserver$ mkdir tftproot/ubuntu tftproot/ubuntu/livecd в нее поместим образы ubuntu в виде файлов iso. и посмотрим: где current-ubuntu.iso - символическая ссылка на файл quantal-ubuntu-gnome-amd64-20120902.iso. На текущий загружаемый образ создадим символическую ссылку (команда ln -s): userserver@microserver$ ln -s quantal-ubuntu-gnome-amd64-20120902 current-ubuntu.iso Примонтируем образ iso, доступный по символической ссылке, под root-пользователем (sudo -s): /home/userserver/tftproot/ubuntu/current-ubuntu.iso /home/userserver/tftproot/ubuntu/livecd udf,iso9660 user,loop,ro 0 0 Т.к. в загрузочный образ Ubuntu встроена возможность загрузки через сеть, то также понадобиться NFS-папка с содержимым cdrom, которая будет монтироваться при сетевой загрузке.

На микросервере в файле /etc/exports указываем:

/home/userserver/tftpboot/ubuntu/livecd/ *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure) В меню PXE (pxelinux.cfg/default) добавим пункт меню, соответствующий нашей livecd системе APPEND root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd -- KERNEL - ссылка на исполняемый код (Linux, иной), в данном случае на ядро Linux, путь к ядру указывается относительно корня TFTP-сервера. "ядро" не обязательно является ядром Linux; оно может быть загрузочным сектором или даже файлом COMBOOT. INITRD файл начальной корневой файловой системы, разворачиваемой в памяти.
Начиная с версии 3.71, initrd может быть указан отдельной директивой
(INITRD) вместо части директивы APPEND
F1 livecd.txt - справочная информация вызываемая по клавише F1

Попробуем загрузиться. Для этого в BIOS клиентского компьютера выберем в качестве первого устройства загрузки - сеть.
Обычно, если более менее правильно настроено, клиент может загрузить ядро linux. А вот дальнейшая загрузка может сломаться по различным причинам, уже относящимся к конфигурации системы (образа iso).


Преобразование установленной системы Ubuntu 12.10 на жестком диске - в вариант
сетевой загрузки

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

Во время установки диск разбивается на 4 первичных раздела.
1. swap
2. ext4 - корневая файловая система для обычной загрузки, точка монтирования - /
3 ext4 - будущая корневая файловая система для сетевой загрузки (nfsroot)
4 ext4 - домашняя файловая система, /home

swap располагается в начале диска, т.к. скорость в этом месте выше.

Установка производится во второй раздел (например /dev/sda2) и в четвертый. Далее, после загрузки системы со второго раздела, его содержимое копируется на третий раздел. Настраивается загрузчик syslinux для загрузки с третьего раздела.Система загружается с третьего раздела. Вносятся изменения.

Изменения для сетевой загрузки

1. Изменение initramfs - начальной корневой файловой системы

Итак, установленная новая система Ubuntu Gnome Shell Remix 12.10 на жестком диске usb.

- отредактировать скопированный файл /tmp/initramfs-tools/initramfs.conf, исправляем опции:
BOOT=nfs

- отредактировать /etc/initramfs-tools/modules, внести драйверы сетевых карт, обычно встречающиеся на компьютерах, у меня forcedeth

- скопировать в папку /boot третьего раздела, либо на tftp-сервер (непроверял).

. Настройки на сервере
В папке tftproot создадим папки system, system/root, system/home. Это будет папки рабочей системы, доступные через NFS.
Папку tftproot/system/root сделаем доступным через NFS, укажем в файле /etc/exports:


. Опции ядра, передаваемые загрузчиком, относящиеся к NFS, указываются в строке APPEND.

root=/dev/nfs - опция, указывает ядру, на то, что надо использовать NFS для монтирования корневой файловой системы, а не обычное блочное устройство

nfsroot=192.168.3.1:/home/userserver/tftproot/system/root, <options>
где <options> - разнообразные опции NFS, через запятую.

Сформируем пункт меню "Testing netboot system" для файла меню pxelinux.cfg/default
.

LABEL Testing netboot system
KERNEL system/root/vmlinuz
INITRD system/root/boot/initrd.img-3.5.0-13-net
APPEND root=/dev/nfs nfsroot=192.168.3.1:/home/userservertftproot/system/root ip=dhcp rw noswap nosplash --

Если не удается преобразовать существующую систему для загрузки по сети, то возможно имеет смысл использовать debootstrap для установки на NFS том.

Опция. Установка на NFS посредством debootstrap

Debootstrap - стандартный способ установки системы Debian Linux из запущенной системы Linux.


Опция. PXE загрузка с помощью GRUB 2

Pxelinux не единственный загрузчик, способный загружать систему по сети. GRUB 2 предлагает не менее интересную альтернативу.

Команда grub-mkimage создает загрузочный образ и этот образ может быть сконфигурирован для использования с PXE.

Чтобы образ был доступен для PXE загрузки, надо указать опции:

Здесь предполагается, что Grub 2 установлен обычным способом в системе. В Ubuntu это так.

Итак, непонятные опции, нам разъяснит руководство по Grub.
--format=i386-pc-pxe, специфический формат загрузчика, для поддержки pxe-загрузки
--output=tftproot/grub.pxe, выходной файл загрузчика, будет сразу расположен в корне TFTP-сервера.

--prefix='(pxe)/boot/grub' pxe pxecmd, (pxe)- псевдоустройство, означающее корень TFTP-сервера. При использовании из конфигурационного файла, позволяет ссылаться на файлы TFTP-сервера.

Далее, надо создать в корне TFTP сервера, структуру папок для поддержки Grub 2. Можно просто скопировать файлы, а можно воспользоваться встроенной в пакет Grub 2 командой grub-mknetdir.
Что копировать?
1. Сам загрузчик grub.pxe, можно положить в корень TFTP сервера
2. Содержимое папки /boot/grub
3. Файл меню /boot/grub.cfg


Настройть dhcp-сервер (в нашем случае - dnsmasq) на выдачу вместо pxelinux.0 файла grub.pxe, в файле /etc/dnsmasq.conf
.
dhcp-boot=grub.pxe
.

Надо вручную отредактировать файл tftproot/boot/grub.cfg, т.к. нет возможности создавать его автоматически.
В принципе, можно взять за основу, системный файл /boot/grub/grub.cfg и изменить часть файла, где находятся пункты меню.
Например, вот пункт меню, для загрузки live cd:

.
menuentry 'Remote boot live CD' --class ubuntu --class gnu-linux --class gnu --class os <
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
linux (pxe)/ubuntu/livecd/casper/vmlinuz root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.3.1:/home/userserver/tftproot/ubuntu/livecd ro
initrd (pxe)/ubuntu/livecd/casper/initrd.lz
>

После того, как загрузчик стартовал, файлы TFTP-сервера доступны через псевдо-устройство (pxe), относительно корня.


Опция. Расширение системного загрузчика на диске, для загрузки по сети

Можно добавить в обычный загрузчик GRUB, меню для сетевой загрузки. Это приятная особенность, чтобы не перезагружать компьютер, т.к. BIOS иногда достаточно долго отрабатывает.

Опция. "Раскраска" меню PXE загрузчика
Берем кисть и .

Опция. Загрузка iso-образа посредством memdisk (диска в памяти)

Memdisk (входит в состав syslinux, копируем в /tftproot/).
Загрузочный образ копируется в память и загружается.

.
LABEL Test memdisk
KERNEL memdisk
APPEND initrd=ubuntu/current-ubuntu.iso
.

Опция. Загрузка iso-образа посредством Grub II. Loopback booting

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

Чтобы освоить данную возможность, надо создать папку, например /opt/boot-images и поместить туда образы дисков.
Далее, в Grub 2 существует файл /etc/grub.d/40_custom, который позволяет добавлять пользовательские пункты меню.

Синтаксис несколько отличается от syslinux и предыдущего Grub I. Возможно использование русских букв, в меню.

menuentry "Локальный образ Ubuntu 12.10" <
iso_path=/opt/boot-images/ubuntu.iso
export iso_path
search --set --file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path quiet splash --
initrd /casper/initrd.lz
>

menuentry "Локальный образ Ubuntu 12.10 консольный режим" <
iso_path=/opt/boot-images/ ubuntu.iso
export iso_path
search --set --file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path text --
initrd /casper/initrd.lz
>

Для диагностики можно использовать консольный режим (опция text or textonly ) и режим отключения граф.загрузки (удалить опции quiet splash).

Перезагружаемся и выбираем iso-образ в меню Grub II.

Также возможно сделать загрузку iso-образа при использовании PXE загрузчика Grub II.
Например, добавить пункт меню в файл tftproot/boot/grub/grub.cfg:

.
menuentry "Test network boot ISO live CD" --class ubuntu --class gnu-linux --class gnu --class os <
iso_path=/ubuntu/current-ubuntu.iso
export iso_path
search --set --file $iso_path
loopback loop $iso_path
root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=$iso_path --
initrd /casper/initrd.lz
>

В данном пункте ссылка на iso-образ, уже ранее настроенный для pxelinux загрузчика. Недостаток этого способа - очень долгая загрузка образа, без отображения прогресса.

Для небольших образов, вполне работоспособное решение.

Опция. Утилита графической настройки Grub Customizer

Команды для установки:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer

Введение в загрузку по сети и Etherboot

Что такое загрузка по сети?

Загрузка по сети - старая идея. Ключевая идея в том, что компьютер содержит некоторый код начальной загрузки в энергонезависимой памяти, такой как микросхема ПЗУ, что позволяет соединиться с сервером и получить системные файлы по сети.

Как это работает?

Для загрузки по сети, компьютер должен получить

образ операционной системы и

обычно, рабочую файловую систему.

Рассмотрим бездисковый компьютер (DC) у которого есть загрузочная сетевая ПЗУ. Возможно наличие нескольких идентичных бездисковых компьютеров. Как же их различать? У этих компьютеров (фактически у их сетевых карт) есть некоторая уникальная информация, это - сетевой Ethernet адрес. Каждая Ethernet карта в мире имеет уникальный 48 битный Ethernet адрес, так как каждый производитель Ethernet аппаратуры зарезервировал для себя блок адресов. По соглашению эти адреса записываются в виде шестнадцатеричных чисел разделенных двоеточием по группам, в каждой группе по две цифры, например - 00:60:08:C7:A3:D8 .

Используемые для получения IP адреса по данному Ethernet адресу протоколы называются Boot Protocol (BOOTP) и Dynamic Host Configuration Protocol (DHCP) . DHCP - развитие BOOTP. В наших рассуждениях, если не указано иное, все что применимо к BOOTP также применимо к DHCP. (Фактически немного неправильно говорить, что BOOTP и DHCP всего лишь транслируют Ethernet адреса, в них предусмотрено обеспечение работы BOOTP и DHCP с любым типом аппаратных адресов, но большинство использует Ethernet.)

Пример обмена информацией BOOTP выглядит подобным образом:

DC: Привет, мой аппаратный адрес 00:60:08:C7:A3:D8 , дай мне мой IP адрес.

BOOTP сервер: (Смотрит в базу данных адресов.) Твое имя aldebaran, твой IP адрес 192.168.1.100, твой сервер 192.168.1.1, твой предполагаемый загрузочный файл /tftpboot/vmlinux.nb (и еще несколько частей информации).

Вы удивитесь, как бездисковый компьютер изначально находит адрес BOOTP сервера. Ответ таков - он его не ищет. Запрос BOOTP широковещательный по локальной сети и любой BOOTP может ответить на запрос.

После получения IP адреса, DC должен загрузить образ операционной системы и выполнить его. Другой используемый тут Интернет протокол называется Trivial File Transfer Protocol (TFTP) . TFTP подобен обрезанной версии FTP --- тут нет идентификации, и он работает поверх User Datagram Protocol (UDP), а не поверх Transmission Control Protocol (TCP). UDP был выбран вместо TCP для упрощения. Реализация UDP на DC может быть маленькой, посему код легко помещается в ПЗУ. Так как UDP блочно-ориентированный протокол, в отличие от потоково-ориентированных протоколов, передача следует блок за блоком, как например:

и так далее, пока не будет передан весь файл. Переговариваясь, он подтверждает передачу каждого блока, и потеря пакета будет обнаружена и пакет будет передан через таймаут. Когда все блоки получены, сетевой boot ROM передает управление в точку входа образа операционной системы.

В конце, в случае запуска операционной системы, должна быть предоставлена корневая файловая система. Linux и другими Unix-ами обычно используется Network File System (NFS) , однако возможны другие варианты. В этом случае код не должен находиться в ROM, а должен быть частью загружаемой операционной системы. Однако операционная система вместо реального диска должна запустить корневую файловую систему - NFS. Linux содержит требуемые для этого настройки.

Сетевая загрузка на практике

Сетевой загрузчик - небольшая программа, запускаемая как расширение BIOS, расположена обычно на EPROM сетевой платы. Она обрабатывает BOOTP запрос и загрузку по TFTP, а затем передает управление загруженному образу. Она использует TCP/IP протокол, но загруженный образ не обязательно должен быть Linux. Загруженный образ может быть любым, даже DOS. Он также может быть загружен с дискеты для проверки и временных настроек.

Наряду с коммерческими ROM, есть ДВА свободных пакета сетевой загрузки. Свободные реализации TCP/IP сетевых загрузчиков -

Etherboot использует встроенные драйвера, в то время как Netboot использует Packet драйвера. Сначала вы должны проверить, что ваша сетевая карта поддерживается Etherboot или Netboot. До того как вы, в конечном счете, найдете того, кто захочет вставить для вас код в EPROM (Erasable Programmable Read Only Memory), вы можете загружаться по сети с дискеты .

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

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

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

Bootp

либо используя inetd, отредактируйте файл /etc/inetd.conf и вставьте похожую строку:

Далее, вам следует указать bootp базу данных с соответствиями Ethernet адресов IP адресам. Эта база данных находится в /etc/bootptab. Вы должны модифицировать ее вставив IP адрес вашего шлюза (gateway), dns сервера, и ethernet адреса ваших бездисковых машин. Он содержит строки следующего вида:

Можно указать и прочую информацию, но мы начнем с простого.

Другой пример /etc/bootptab:

global.prof - общий шаблон элементов хостов, где

поле sm содержит маску подсети (subnet mask)

поле ds содержит адрес DNS сервера

поле gw содержит адрес шлюза (gateway)

поле ht содержит аппаратный тип сети

поле bf содержит имя загрузочного файла

После этого, каждая машина должна быть представлена строкой:

первое поле содержит имя хоста,

поле hd содержит каталог загрузочного файла,

общий шаблон может быть указан в поле tc

поле ha содержит аппаратный адрес ethernet карты

поле ip содержит назначаемый ip адрес.

Теперь загрузите бездисковый компьютер с дискеты, и он должен обнаружить вашу Ethernet карту и выдать широковещательный BOOTP запрос. Если все идет как надо, сервер должен вернуть ему требуемую информацию. Так как /tftpboot/vmlinux.nb еще не существует, у него не получится загрузить этот файл. Теперь вам следует скомпилировать специальное ядро, оно должно включать опцию монтирования корневой файловой системы с NFS. Также вам следует включить опцию получения IP адреса из BOOTP ответа. Также вы должны включить в ядро Linux драйвер вашей сетевой карты, а не загружать его как модуль. Можно загружать начальный ramdisk, и таким образом сделать возможной загрузку модулей, но этим лучше заняться позже.

Вы не можете установить zImage полученный непосредственно в результате компиляции ядра. Он должен быть преобразован в помеченный образ. Помеченный образ - обычное ядро со специальным заголовком, который указывает сетевому загрузчику, куда в памяти помещать байты и с какого адреса запускать программу. Для создания этого образа используете программу mknbi-linux. Эта утилиту можно найти в дистрибутиве Etherboot. После создания образа, поместите его в каталог /tftpboot под именем указанным в /etc/bootptab. Проверьте, чтобы этот файл был доступен всем для чтения, так как у tftp сервера нет специальных привилегий.

TFTP ищите в tftp*.rpm на компакт-диске Redhat Linux. TFTP (Trivial File Transfer Protocol) - подобный ftp протокол передачи файлов, но намного более простой, что делает возможным закодировать его в EPROM. TFTP может использоваться двумя путями:

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

Безопасный tftp: tftp сервер использует систему chroot.2 для смены собственного корневого каталога. Все, что находится вне нового корневого каталога полностью недоступно. Так как chroot каталог становится новым корневым каталогом, поле hd в файле bootptab должно отражать эту ситуацию. Например: при использовании небезопасного tftp, поле hd содержит полный путь к загрузочному каталогу: /export/root/machine1. При использовании безопасного tftp с каталогом /export в качестве корневого каталога, каталог /export станет / , и поле hd должно быть /root/machine1.

Обычно tftpd запускается из inetd подобного вида строкой в /etc/inetd.conf.

Еще раз перезапустите inetd, послав ему HUP сигнал, и снова попробуйте загрузиться по сети, на этот раз должно загрузиться и выполниться ядро. Вы заметите, что загрузка продолжается до точки, где ядро пытается смонтировать корневую файловую систему. Теперь вы должны настроить экспорт NFS разделов.

Корневая файловая система на NFS

По различным причинам, использовать корневую файловую систему сервера в качестве корневой файловой системы бездискового компьютера - плохая идея. Одна из них: есть множество различных конфигурационных файлов, и бездисковый компьютер таким путем будет получать неправильную информацию. Другая - безопасность. Опасно разрешать доступ на запись (а доступ на запись требуется корневой файловой системе по различным причинам) к вашему серверу. Однако хорошей новостью является то, что корневая файловая система бездискового компьютера невелика, всего лишь около 30 Мб и большая ее часть разделяется всеми бездисковыми компьютерами.

В идеале, для создания корневой файловой системы вам нужно знать какие из файлов вашего дистрибутива должны присутствовать. Критичными для загрузки являются файлы устройств, файлы в /sbin и /etc. Вы можете избежать тяжелой работы, создав копию корневой файловой системы и модифицировав несколько файлов для бездискового компьютера. В дистрибутиве Etherboot есть учебник и ссылки на группу скриптов, которые создают корневую файловую систему бездискового компьютера из существующей корневой файловой системы сервера. Также в документации Etherboot есть подсказки, так как это часто сложная часть установки.

Подстроенное для бездискового компьютера ядро Linux ожидает увидеть корневую файловую систему в /tftpboot/(IP адрес бездискового компьютера), например: /tftpboot/192.168.1.100 в вышеприведенном случае. По желанию его можно изменить при конфигурировании ядра.

Теперь создайте или отредактируйте на сервере /etc/exports (см. 'man 5 exports' и 'man 8 exportfs') и поместите строку следующего вида:

Доступ rw требуется различным системным службам. Атрибут no_root_squash предохраняет NFS систему от отображения root идентификатора на другой. Если это не указано, различные демоны и программы регистрации будут несчастны.

Запустите или перезапустите службы NFS (rpc.portmap и rpc.mountd) и попробуйте загрузить бездисковый компьютер. Если вам повезет, ядро смонтирует корневую файловую систему и загрузится до приглашения к входу. Скорее всего, вы обнаружите, что что-то упустили из виду. Большинство дистрибутивов Linux не предусмотрены для бездисковой загрузки и требуют небольшой модификации. Наиболее частая неисправность - система, в процессе загрузки, полагается на файлы в каталоге /usr, который при загрузке обычно импортируется с сервера позже. Два возможных решения -

Предоставить несколько требуемых файлов в небольшом каталоге /usr на корневой файловой системе, который далее будет перекрыт при импорте /usr, и

Модифицировать пути для поиска файлов в корневой файловой системе. Файлы нужно редактировать в каталоге /tftpboot/192.168.1.100 (помните, что это корневой каталог бездискового компьютера).

Возможно, вы захотите монтировать сервера и другие каталоги, такие как /usr (который должен экспортироваться в режиме только для чтения).

Создание EPROM

Когда вы уверены, что без проблем сможете загружаться по сети, вы можете поместить код в EPROM.

Использование загрузки по сети

Одним из основных способов использования загрузки по сети являются X-терминалы. Отсутствие диска на терминале делает его более тихим и предоставляет удобное рабочее окружение. В идеале, машина должна иметь 16 или более мегабайт памяти и самую лучшую видео карту, которую вы сможете для нее найти. Это идеальное использование устаревших старших 486 и нижних Pentium моделей. Некоторые люди используют загрузку по сети для создания кластеров машин, с упрощенным обслуживанием, например кластера из машин в одной комнате.

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

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

Надеюсь со временем эта заметка вырастет во что-то больше. Но хотелось бы описать просто то, что раньше не мог понять и собирал по крупицам на русском языке, а потом нашёл немного времени разобраться что и как. Закончилось всё хорошо. Загрузилось красивое меню, куда можно добавлять разные нужные штуковины для загрузки по сети. Грузить пока ничего не будем, может быть позже :) Всё действо происходит под Gentoo, но пользователи иных дистрибутивов (и даже пользователи BSD) могут воспользоваться своими apt-get, aptitude, rpm, pacman, portmaster и т.д. по вкусу. Возможно, пути не всегда будут совпадать, надеюсь вы разберётесь сами.

Первое, что нужно сделать, это настроить свой DHCP-сервер. Обычно я использую net-misc/dhcp, т.е. isc-dhcpd. Всё, что нам нужно, это указать что мы будем грузить по сети и с какого сервера.

Добавляем эти строчки в глобальную секцию dhcpd.conf, если хотим предоставить наши услуги всем нашим сетям или в секцию subnet нужной сети. next-server можно не указывать, если ваш TFTP-сервер расположен на том же хосте, что и DHCP.

Как вы уже наверно поняли, нам понадобится ещё и TFTP-сервер. Можно использовать, например, net-ftp/tftp-hpa или net-ftp/atftp. Оба сервера ставятся без проблем, настройки минимальные. Корень TFTP сервера в обоих случаях размещается в /tftproot/. Запускаем наш TFTP-сервер и начнём заниматься его наполнением.

Третий компонент, необходимый для загрузки по сети, как ни странно, загрузчик linux. Его мы можем найти в пакете sys-boot/syslinux. В нём содержится множество разных загрузчиков, в том числе, необходимый нам pxelinux. После установки пакета заглядываем в /usr/share/syslinux и /usr/share/doc/syslinux-. В первой папке мы можем найти все необходимые нам файлы, а во второй можно узнать подробности о настройке загрузчика. Попробуем загрузить красивое меню для выбора того, что нам загружать в дальнейшем. Для этого нам понадобится загрузчик pxelinux.0 и красочное меню vesamenu.c32 (или текстовое меню menu.c32). Скопируем их в корень нашего TFTP-сервера, папку /tftproot/. Расскажем загрузчику что же мы хотим загружать. Для этого создадим в папке с pxelinux.0 папку с именем pxelinux.cfg. Внутри папки размещаются файлы конфигурации для наших клиентов. Можно задать свой индивидуальный файл для каждого клиента, группы и по умолчанию. Порядок поиска файлов конфигурации можно найти в файлах документации /usr/share/doc/syslinux-/pxelinux.txt.bz2 и menu.txt.bz2. Создадим в папке pxelinux.cfg файл default, который будет использоваться всеми клиентами для которых вы не задали конфигурацию.

Теперь можно попробовать запустить другой ПК или даже виртуальную машину в VirtualBox и вы должны увидеть красивую меню с единственным пунктом загрузки с HDD.

На этом всё. Следите за обновлениями данного поста! Всем удачной загрузки по сети.

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

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

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

Для PuppyRus2 Snow Dog потребуется скачать lanboot_server-v*-4.sfs и подключить его. Если локальная сеть не настроена - настройте её. После этого смело командуйте 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

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

Пример /etc/bootptab

2. Dhcpd

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

3. Tftp

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

Пример /etc/exports

4. Inetd

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

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

5. Xinetd

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

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

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

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

Читайте также: