Загрузка системы из сети

Начало.

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

Это придумано давным давно. Во всяком случае в статье, написанной в конце прошлого века (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

  • Самый простой.
  • Выдаёт 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

Печать/экспорт