The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Загрузка бездисковых Linux-станций с помощью PXE (pxe boot linux diskless dhcp tftp)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: pxe, boot, linux, diskless, dhcp, tftp,  (найти похожие документы)
From: Сергей Черепенин, Игорь Чубин <http://xgu.ru>; Date: Mon, 27 Apr 2008 17:02:14 +0000 (UTC) Subject: Загрузка бездисковых Linux-станций с помощью PXE Оригинал: http://xgu.ru/wiki/PXE На данной странице детально описывается процесс загрузки бездисковых 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: %# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). auto lo eth0 eth1 # The loopback network interface iface lo inet loopback # The primary network interface iface eth0 inet static address 10.0.35.7 netmask 255.0.0.0 network 10.0.0.0 gateway 10.0.35.1 dns-nameservers 10.0.35.1 dns-search unix.nt pre-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE post-up echo 1 > /proc/sys/net/ipv4/ip_forward # The secondary network interface iface eth1 inet static address 192.168.15.180 netmask 255.255.255.0 network 192.168.15.0 post-up ifconfig eth1:1 192.168.1.254 Интерфейс eth0 подлючен к сети 10.0.0.0/8 и через него осуществляется выход в интернет. Интерфейс eth1 подключен к сети 192.168.15.0/24, в которую подключаются тонкие клиенты. Аллиас на интерфейсе eth1 eth1:1 необходим для соединения с терминальным сервером Windows Для осуществления возможности выхода в интернет всем студентам с тонких клентов настраивается firewall в таблице nat цепочки POSTROUTING (о чем говорит соответствующая строка в конфигурационном файле настройки сетевых интерфейсов): pre-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE Кроме настройки firewall необходимо включить forwarding. Иными словами, необходимо разрешить ядру операционной системы осущетсвлять проброс трафика с одного интерфейса на другой. Это можно сделать несколькими способами: 1. Строка в файле /etc/network/interfaces post-up echo 1 > /proc/sys/net/ipv4/ip_forward 2. Строка в файле /etc/sysctl.conf net.ipv4.conf.default.forwarding=1 3. Команда %# sysctl net.ipv4.conf.default.forwarding=1 Но этот способ включения forwarding действует до первой перезагрузки, а для автоматического включения на этапе старта системы необходимо использовать первый или второй методы. Операционная система %$ uname -a Linux debian 2.6.16-2-486 #1 Sat Jul 15 21:23:01 UTC 2006 i686 GNU/Linux Инсталляция DHCP-сервера Установка DHCP-сервера: %# apt-get install dhcp . . . NOTE: dhcpd's messages are being sent to syslog. Look there for diagnostics messages. Starting DHCP server: dhcpd failed to start - check syslog for diagnostics. DHCP-сервер не заработал в базовой конфигурации - смотрим почему: %# tail /var/log/daemon.log Dec 25 17:27:56 debian rpc.statd[4128]: Version 1.0.10 Starting Dec 25 17:33:43 debian dhcpd: No subnet declaration for eth0 (192.168.15.244). Dec 25 17:33:43 debian dhcpd: Please write a subnet declaration in your dhcpd.c onf file for the Dec 25 17:33:43 debian dhcpd: network segment to which interface eth0 is attached. Dec 25 17:33:43 debian dhcpd: exiting. Анализ лог-файла /var/log/daemon.log говорит, что не описана сеть 192.168.15.0/24. Указанная сеть была определена автоматически, исходя из адреса интерфейса, на котором DHCP-сервер прослушивает запросы. По умолчанию этот интерфейс eth0. Конфигурационный файл dhcpd.conf не содержит описания этой сети. Ниже мы отредактируем этот файл и опишем в нём названную сеть. Если бы было нужно чтобы DHCP-сервер работал на другом интерфейсе, нужно отредактировать файл /etc/default/dhcp -- указать нужный интерфейс: %# vim /etc/default/dhcp INTERFACES="eth1" Сейчас этого делать не нужно. Настройка DHCP-сервера Далее можно приступать к непосредственной настройке DHCP-сервера: %# vim /etc/dhcp.conf option domain-name "unix.nt"; option domain-name-servers 192.168.15.254; option subnet-mask 255.255.255.0; server-name "ltsp0.unix.nt"; default-lease-time 600; max-lease-time 7200; subnet 192.168.15.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.15.200 192.168.15.220; option subnet-mask 255.255.255.0; option broadcast-address 192.168.15.255; option root-path "192.168.15.244:/opt/ltsp/i386/"; option routers 192.168.15.254; filename "pxelinux.0"; } Конфигурационный файл практически ничем не отличается от файла по умолчанию. Клиентам будут выделяться IP-адреса из диапазона 192.168.15.200-192.168.15.220, указанного в range dynamic-bootp. В качестве DNS-сервера и шлюза используется хост 192.168.15.254. Опции, имеющие непосредственно отношение к бездисковой загрузке: * root-path * filename Запуск DHCP-сервера Запуск DHCP-сервера: # /etc/init.d/dhcp start Инсталляция и настройка TFTP-сервера Установите пакет tftpd-hpa (другие TFTP-серверы могут работать некорректно): %# apt-get install tftpd-hpa Настройка TFTP-сервера В момент завершения установки нам было сообщено о том, что tftp-сервер по-умолчанию не работает в режиме демона, а будет запускаться через интернет-суперсервер inetd. Проверим на наличие строки его настройки в конфигурационном файле inetd: %# grep tftp /etc/inetd.conf tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot Перезапустим интернет суперсервер: %# /etc/init.d/inetd restart Restarting internet superserver: inetd. И проверим выполняет ли интернет-суперсервер прослушивание порта 69 (порт TFTP): %# netstat -lnp | grep :69 udp 0 0 0.0.0.0:69 0.0.0.0:* 7331/inetd На этом настрока tftp-сервера завершена. Настройка LTSP ( Linux Terminal Server Project) Установка серверной части ltsp Необходимо установить пакет ltsp-server. В качестве зависимостей от этого компонента будет скачан установлен сервер NFS (при условии, что он не был установлен ранее). %# apt-get install ltsp-server После установки нам рекомендовано добавить строку /opt/ltsp *(ro,no_root_squash,async) в файл экспортирования файловых систем /etc/exports. Корневая файловая система, которую будут использовать клиенты, находится в подкаталоге каталог /opt/ltsp. Она должна быть доступна через NFS. Можно изменить файл /etc/exports сейчас, а можно позже. Мы изменим позже. Настройка шлюза Если нужно чтобы бездисковые клиенты могли получить доступ в Интернет через наш шлюз, необходимо настроить на этом шлюзе iptables и включить forwarding-пакетов между интерфейсами. Добавляем строки в /etc/network/interfaces post-up iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE post-up echo 1 > /proc/sys/net/ipv4/ip_forward Создание клиентского образа ltsp Образ создаётся с помощью скрипта ltsp-build-client. В качестве аргументов скрипту необходимо указать: * архитектуру, для которой выполняется сборка; * дистрибутив, на базе которого будет построен образ; * зеркало, с которого должны инсталлироваться пакеты системы. В каталог, который будет для бездисковой станции корневым, проинсталлируется дистрибутив etch. В качестве источника пакетов указан локальный apt-proxy. Вместо него нужно указать соответствующее зеркало. %# ltsp-build-client --arch i386 --dist etch --mirror http://192.168.15.251:9999/debian . . . WARNING: no entry for /opt/ltsp in /etc/exports, you may want to add the following line to /etc/exports: /opt/ltsp *(ro,no_root_squash,async) and then run the command: invoke-rc.d nfs-kernel-server reload info: LTSP client installation completed successfully Необходимо экспортировать каталог, в котором находится корневая файловая система бездисковых клиентов. %$ ls -l /opt/ltsp/ drwxr-xr-x 20 root root 4096 2006-12-25 18:02 i386 %$ ls /opt/ltsp/i386/ bin dev home lib mnt proc sbin sys usr boot etc initrd media opt root srv tmp var Рекомендуется делать доступ к файловой системе в режиме read/only, дабы избежать конфиликтов при совместном доступе. Мы для экспериментов сделаем файловую систему доступной в режиме read/write. В режиме нормальной эксплуатации никогда не экспортируйте корневую систему бездисковых станций в режиме read/write, если точно не знаете к каким последствиям это приведёт! Добавьте в файл /etc/exports строку: /opt/ltsp/i386 *(rw,no_root_squash,async) Теперь, необходимо указать nfs-kernel-server демону чтобы он перечитал этот файл: %# invoke-rc.d nfs-kernel-server reload Re-exporting directories for NFS kernel daemon... exportfs: /etc/exports : Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/opt/ltsp/i386". Assuming default behaviour ('subtree_check'). NOTE: this default will change with nfs-utils version 1.1.0 И проверяем: %# showmount -e Export list for debian: /opt/ltsp/i386 * В ходе выполнения команды ltsp-build-client был также создан каталог /var/lib/tftpboot/ltsp/i386/ : %# ls -l /var/lib/tftpboot/ltsp/i386/ -rw-r--r-- 1 root root 72400 2006-12-04 17:52 config-2.6.18-3-486 lrwxrwxrwx 1 root root 23 2006-12-25 18:05 initrd.img -> initrd.img-2.6.18-3-486 -rw-r--r-- 1 root root 3080263 2006-12-25 18:05 initrd.img-2.6.18-3-486 lrwxrwxrwx 1 root root 20 2006-12-25 18:05 nbi.img -> nbi.img-2.6.18-3-486 -rw-r--r-- 1 root root 4307968 2006-12-25 18:05 nbi.img-2.6.18-3-486 -rw-r--r-- 1 root root 13324 2006-12-25 18:05 pxelinux.0 drwxr-xr-x 2 root root 4096 2006-12-25 18:05 pxelinux.cfg -rw-r--r-- 1 root root 714765 2006-12-05 00:21 System.map-2.6.18-3-486 lrwxrwxrwx 1 root root 20 2006-12-25 18:05 vmlinuz -> vmlinuz-2.6.18-3-486 -rw-r--r-- 1 root root 1218196 2006-12-05 00:21 vmlinuz-2.6.18-3-486 Конфигурационный файл сетевого загрузчика pxelinux находится в pxelinux.cfg/default корневого каталога дистрибутива. Проверяется не только имя default/ Необходимо создать файл /var/lib/tftpboot/pxelinux.cfg/default: DEFAULT vmlinuz-2.4.34.lan APPEND nfsdir=192.168.15.180:/opt/ltsp/i386/ lang=ru ramdisk_size=100000 (перенос) root=/dev/nfs rw nfsroot=192.168.15.180:/opt/ltsp/i386/ ip=dhcp TIMEOUT 30 PROMPT 1 DISPLAY boot.msg Подготовка клиентского ядра и initrd Необходимо подготовить ядро, под управлением которого будут работать клиентские станции. При конфигурировании клиентского ядра обязательно нужно включить: * Поддержку сетевой карты * Поддержку NFS Пример конфигурационного файла пожно скачать здесь. При такой конфигурации ядра initrd не используется. В том случае, если какой-либо из необходимых для загрузки и монтирования корневой файловой системы, драйвер нельзя (или не хочется) по какой-либо причине включить в ядро, необходимо подготовить виртуальный загрузочный диск initrd. Если бездисковый клиент будет загружать не только ядро Linux, но и initrd, нужно сделать соответствующие изменения в конфигурационном файле pxelinux.cfg/: %# vi pxelinux.cfg/default Дополнительная информация PXE: * Спецификация PXE (pdf) * PXE на en.wikipedia.org * rom-o-matic.net - коллекция PXE-образов * PXELINUX на сайте SYSLINUX LTSP: * Linux Terminal Server Project * LTSP.RU - Linux TERMINAL SERVER Project (Russia) - использование Linux на бездисковых рабочих станциях * Linux Terminal Server Project на en.wikipedia.org * Linux Terminal Server Project на ru.wikipedia.org * Обсуждение на iXBT Настройка: * журнал инсталляции LTSP-сервера Приложения Конфигурационные файлы mouse usb /etc/modules mknod mice c 13 63 Скрипты /home/rdp/.xsession SERVER=192.168.1.2 USER=user while true do LANG=C rdesktop -a24 -f -u $USER $SERVER done

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Дмитрий (??), 20:20, 01/08/2009 [ответить]  
  • +/
    Во-первых, спасибо за ОЧЕНЬ ПОЛЕЗНУЮ СТАТЬЮ.
    У меня есть один вопрос:
    Можно ли настроить DHCP-сервер таким образом, что бы он работал в паре с DHCP сервером на маршрутизаторе, отвечающем за раздачу IP адреса и других параметров сети, кроме параметров непосредственно касающихся загрузки бездисковых клиентов, а именно: next-server и filename?
    Я пробовал данную схему, но в моём случае она не работает.

    Вот мой dhcpd.conf :
    --------------------------------------------------
    option domain-name "example.com";

    default-lease-time 600;
    max-lease-time 7200;

    allow booting;
    allow bootp;

    subnet 192.168.1.0 netmask 255.255.255.0 {

        next-server 192.168.1.88;
        filename "pxelinux.0";

    #   range 192.168.1.2 192.168.1.253;
    #   option broadcast-address 192.168.1.255;
    #   option routers 192.168.1.8;
    #   option domain-name-servers 82.209.195.12, 193.232.248.45;

    }

    --------------------------------------------------
    работает DHCP на роутере для раздачи IP, gateway, netmask, dns клиентам.

     
  • 2, toha (??), 00:02, 20/06/2010 [ответить]  
  • +/
    на сколько я помню, dhcp запрос - широковещательный. по этому 2 сервера в одной сети - жесть. та и смысл? вы с начала получаете адрес сервера лтсп, а потом хотите получить адрес для выхода в интернет? прикольно, и что у вас с нфс случится?
     
  • 3, aprogrammer (?), 17:03, 18/11/2013 [ответить]  
  • +/
    Все чётко, но не поднялось по вашей инструкции.... Вот по этой вышло - http://sysadmin.te.ua/linux/pxe-on-ubuntu-10-04.html . Там TFTP баг.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру