====== Загрузка системы из сети ======
====== Начало. ======
===== Предисловие. =====
Это придумано давным давно. Во всяком случае [[http://www.linuxfocus.org/Russian/September1998/article63.html|в статье]], написанной в конце прошлого века (1998 год), идею сетевой загрузки автор называет старой. И это не удивительно, загрузка операционной системы по сети - мечта любого администратора. Ведь операционная система загруженная с сервера всегда будет "белой и пушистой", а изменения и обновления достаточно будет внести в загрузочный образ на сервере, вместо того, чтобы бегать с флешкой по всему парку компьютеров.
Почему же такая хорошая идея не получила широкого распространения? Из-за сложности? Нет! Серверы для сетевой загрузки настраиваются довольно просто, как правило одним конфигурационным текстовым файлом, и, забегая вперёд, скажу, что в lanboot_server создание файлов конфигурации производится автоматически. На практике это сводится к "включил, и готово".
===== Что потребуется?. =====
*Для PuppyRus2 Snow Dog потребуется скачать [[http://mirror.yandex.ru/puppyrus/puppyrus-2/sfs/lanboot_server-v6-4.sfs|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 ====
*Самый простой.
*Выдаёт 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 вручную (копированием).
//Автор: DdShurick//