Все о Linux. LinuxRSP.Ru

[an error occurred while processing this directive]

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Создание виртуальной сети с удаленной загрузкой узлов

Содержание

Введение

Загрузка по сети предоставляет администраторам ряд преимуществ, среди которых:

  • легкость установки нового ПО;
  • централизованное администрирование;
  • возможность отказа от установки жестких дисков на клиентские компьютеры, что приводит к повышение надежности системы и понижению ее стоимости.

В данной статье мы рассмотрим организацию процесса такой загрузки. Для удобства проведения экспериментов будем работать не с физическими компьютерами, а с виртуальными, для реализации которых используем пакет VMware Workstation (использовалась версия 4.0), установленный в ОС Windows 2000 SP4.

1. Общие сведения

Идея сетевой загрузки заключается в следующем[1]. Компьютер (клиент) имеет в энергонезависимой памяти (на жестком диске, на дискете) некоторый начальный код загрузки, который позволяет соединиться с другим компьютером (сервером), загрузить с него ядро, а также использовать его файловую систему. Таким образом, на клиенте может вообще отсутствовать жесткий диск.

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

  1. После инициализации загрузчик определяет необходимые IP-адреса: свой, сервера, шлюза. Они запрашиваются по BOOTP или DHCP.
  2. Получив ответ от сервера, он инициализирует процесс загрузки ядра по протоколу TFTP.
  3. Ядро подключает файловую систему. Она может находится на жестком диске клиента, в памяти клиента, либо подключаться с сервера по протоколу NFS.

Вариантов реализации сетевой загрузки может быть много. Мы рассмотрим такой: клиентский компьютер - бездисковый, для создания загрузчика используется Etherboot, определение настроек происходит по DHCP, операционная система клиента и сервера - Debian (версия ядра - 2.4.18). Подключение корневой файловой системы осуществим двумя способами: по NFS и с RAM-диска.

2. Создание виртуальных компьютеров

Запустим VMware workstation и нажмем Ctrl+N для создания нового виртуального компьютера. Далее, выбираем:

  • Virtual machine configuration: Custom;
  • Guest operation system: Linux;
  • Virtual machine name: Client;
  • Location: каталог для виртуального компьютера;
  • Memory guest size (MB): 64;
  • Network connection: Use host-only networking;
  • Disk: Create a new virtual disk;
  • Disk size (GB): 0,1;
  • Disk file: Client.vmdk.

Необходимо сделать замечание относительно памяти. По умолчанию, в VMware действуют ограничения на используемую виртуальными компьютерами память. Так, если на компьютере установлено 256 Мб памяти, то виртуальные компьютеры не могут использовать более 192 Мб. Поскольку будет необходимо одновременно запускать клиентский и серверный компьютеры, каждому из них нельзя выделить более 80 Мб (по 16 Мб требуется самой VMware на запуск каждого виртуального компьютера). Для трех виртуальных компьютеров это ограничение опускается до 48 Мб. Изменить лимит по умолчанию можно в меню Edit пункт Application Settings..., вкладка Memory.

Проделав эту операцию еще дважды, заменяя Client на Server и на Work, выбрав размер жесткого диска 1,0 и 0,5 соответственно, создаем виртуальный сервер и рабочий виртуальные компьютеры.

Настроим оборудование каждого виртуального компьютера. Это можно сделать, выбрав в контекстном меню соответствующего компьютера пункт Edit..., вкладка Hardware. У клиента удалим Hard Disk 1, CD-ROM 1, USB Controller и Audio; у сервера и рабочего компьютеров - Floppy 1, USB Controller и Audio. Добавим серверу вторую сетевую карточку, установив для нее тип NAT.

Теперь необходимо отредактировать настройки сети, для чего выберем пункт Virtual Network Setting... меню Edit. Перейдем на закладку DHCP, выберем адаптер VMnet1 и нажмем кнопку Remove. Таким образом мы отключаем службу DHCP от адаптера VMnet1 (к которому по умолчанию будут подключены виртуальные компьютеры), т.к. мы будем настраивать ее на сервере специальным образом.

Для дальнейших настроек нам необходимо знать IP адрес адаптера VMnet1. Посмотреть его можно, выполнив команду ipconfig в командной строке ОС Windows. У меня он такой: 192.168.223.1

3. Настройка клиента

3.1. Создание образа загрузки

Для создания образа загрузчика воспользуемся свободно распространяемым пакетом Etherboot. Создать образ можно вручную, с помощью утилит, входящих в пакет. Однако мы используем сервис, предоставляемым сервером ROM-o-matic.net. Здесь можно выбрать тип своей карты с помощью стандартного Web-интерфейса и произвести необходимые настройки, а сервер автоматически сгенерирует образ загрузчика и предложит его скачать.

При написании документа пользовалась версия 5.2.5 пакета ROM-o-matic. Для создания образа необходимо:

  1. выбрать тип сетевой карты (справку по поддерживаемым картам можно получить здесь);
  2. выбрать формат загрузчика (зависит от того, куда вы хотите поместить код загрузчика);
  3. произвести, если требуется, дополнительную настройку загрузчика, нажав кнопку Configure;
  4. нажать кнопку Get ROM и скачать заказанный образ.

VMware 4.0 эмулирует сетевую карточку AMD 79c970 PCnet LANCE, поэтому в первом пункте выберем pcnet32:lancepci, во втором - Floppy bootable ROM Image, нажмем кнопку Get ROM и сохраним образ загрузчика в C:\Temp\boot.img.

3.2. Запись образа загрузки

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

Сделать это можно с помощью программы rawrite2, которая входит в стандартный дистрибутив Debian (находится на первом диске в каталоге install). В качестве параметров ей необходимо указать файл с загрузчиком и устройство для записи.

Вставим чистую дискету в дисковод A и дадим команду:

rawrite2 -f C:\Temp\boot.img -d a

Теперь можно попробовать загрузить клиентский компьютер (выбрав его в списке и нажав Ctrl+B). Загрузка остановится на сообщении Searching for server (DHCP).... После слова lancepci будет отображен MAC адрес сетевой карты, у меня он такой: 00:0C:29:E6:36:BC. Запишем его, он пригодится при настройке DHCP.

4. Настройка сервера

4.1. Установка операционной системы

Для установки ОС необходим дистрибутив, состоящий минимум из двух дисков. Вставьте первый диск дистрибутива Debian в устройство чтения дисков и запустите виртуальный сервер.

На приглашение boot: введите vanilla и нажмите Enter. Это запустит установку с ядром, поддерживающим множество устройств, в том числе SCSI устройства. Далее установка проходит в обычном режиме.

Поддержка сети должна быть установлена обязательно. Если Debian найдет сетевую карточку, то он автоматически предложит вам настроить сеть. Если же этого не произойдет, необходимо выбрать драйвер сетевой карточки вручную (pcnet32).

Несколько слов о настройке сети. Зададим имя компьютера (hostname): server. В качестве интерфейса для установки Debian через NFS или HTTP выберем eth1. На вопрос об автоматической конфигурации по DHCP ответим согласием.

После установки ядра системы и драйверов произойдет перезагрузка. Установщик Debian задаст несколько стандартных вопросов по настройке системы, а затем предложит установить дополнительные пакеты (запустить tasksel и dselect для их установки). Откажитесь - это проще выполнить из командной строки. Почтовую систему также настраивать не нужно.

Войдите в систему как root и дайте следующую команду:

apt-get install mc dhcp ftpd tftpd nfs-kernel-server bind kernel-source-2.4.18 make gcc libc6-dev

Все необходимое программное обеспечение находится на первом и втором дисках дистрибутива. Подробное описание процесса установки находится в [2].

4.2. Настройка адаптера eth0

Построим следующую сетевую конфигурацию: сервер через адаптер eth1 будет связан с внешними сетями (в том числе с Internet, если компьютер подключен к Internet), а через адаптер eth0 - с внутренней сетью, состоящей из виртуальных компьютеров. Корректную настройку eth1 обеспечит VMware, а интерфейс eth0 необходимо сконфигурировать вручную.

Для этого отредактируем файл /etc/network/interfaces, добавив в него следующие строки:

auto eth0
iface eth0 inet static
  address 192.168.223.2
  netmask 255.255.255.0

Вместо адреса 192.168.223.2 необходимо указать адрес, следующий за адресом адаптера VMnet1. После перезагрузки виртуального компьютера интерфейс должен заработать.

4.3. Настройка DHCP

Сервис DHCP отвечает за выдачу клиенту его IP адреса, имени, других параметров сети, а также имени файла с ядром операционной системы. Его настройка осуществляется с помощью конфигурационного файла /etc/dhcpd.conf. Мы используем такой файл:

option domain-name "private.net";
option domain-name-servers server.private.net;

subnet 192.168.223.0 netmask 255.255.255.0 {

  group {
    filename "net_boot_kernel";

    host node01 {
      hardware ethernet 00:0C:29:E6:36:BC;
      fixed-address 192.168.223.3;
      option host-name "node01";
    }
  }
}

После subnet указан IP адрес адаптера VMnet1, с замененной на 0 последней цифрой. В строке filename сказано, что имя файла с ядром для сетевой загрузки - net_boot_kernel. В строке hardware ethernet необходимо указать ранее записанный MAC адрес клиента, в строке fixed-adress указывается IP, который будет выдан клиенту.

Нам необходимо, чтобы DHCP сервер обрабатывает запросы только с интерфейса eth0 (из внутренней сети), поэтому отредактируем файл /etc/default/dhcp, присвоив переменной INTERFACES значение eth0.

Небольшие изменения нужны для DHCP клиента. В файл /etc/dhclient.conf добавим следующие две строки:

supersede domain-name "private.net";
prepend domain-name-servers 127.0.0.1;

Первая строка указывает домен поиска, а вторая - добавляет дополнительный (к тому, который будет получен от DHCP сервера) DNS сервер. Эти изменения необходимы для формирования правильного файла resolv.conf.

Теперь, при загрузке клиента, на экране должны отобразиться IP адреса клиента и сервера, полученные от сервера (службу DHCP предварительно необходимо перезапустить). Более подробную информацию по настройке DHCP можно найти в [3].

4.4. Настройка FTP и TFTP

Перекачивание ядра с сервера на клиент осуществляется по протоколу TFTP. Для его корректной работы в файле /etc/inetd.conf должна присутствовать строка:

tftp   dgram   udp   wait   nobody   /usr/sbin/tcpd   /usr/sbin/in.tftpd   /exports

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

Если при попытке загрузить клиента, вы получаете сообщение TFTP error 1 (File not found), значит TFTP настроен правильно.

Для настройки ftp отредактируем файл /etc/ftpusers, удалив из него строчку root, что позволит подключаться к серверу по ftp под именем root из ОС Windows.

4.5. Настройка DNS

Доменом нашей виртуальной сети будет называться private.net. Сервер будет иметь имя server.private.net, а клиенты имена nodeXX.private.net, где XX - порядковый номер клиента.

Основным конфигурационным файлом DNS сервера является /etc/bind/named.conf. В раздел options этого фала добавим строку:

listen-on { 192.168.223.2; 127.0.0.1; };

Первый IP адрес - адрес интерфейса eth0. Теперь DNS сервер будет обрабатывать запросы только с этих адресов. В конец файла добавим строки:

zone "223.168.192.in-addr.arpa" {
  type master;
  file "/etc/bind/server.rev";
};

zone "private.net" {
  type master;
  file "/etc/bind/server.hosts";
};

Далее необходимо создать файлы /etc/bind/server.rev и /etc/bind/server.hosts. Ниже приведены их листинги.

Файл server.rev:

@     IN     SOA     server.private.net. root.server.private.net. (
                     2004120420     ; Serial
                     8H             ; Refresh
                     4H             ; Retry
                     4W             ; Expire
                     1D )           ; Negative Cache TTL
      IN     NS      server.private.net.
2     IN     PTR     server.private.net.
3     IN     PTR     node01.private.net.

Файл server.hosts:

@     IN     SOA     server.private.net. root.server.private.net. (
                     2004120420     ; Serial
                     8H             ; Refresh
                     4H             ; Retry
                     4W             ; Expire
                     1D )           ; Negative Cache TTL
      IN     NS      server.private.net.
localhost    IN      A     127.0.0.1
server       IN      A     192.168.223.2
node01       IN      A     192.168.223.3

На этом настройка сервера DNS закончена. За дополнительной информацией обращайтесь к [4].

4.6. Создание ядра

Компиляция ядра

Стандартное ядро не подходит для загрузки по сети, поэтому необходимо его перекомпилировать.

Перед компиляцией ядра необходимо выяснить конфигурацию оборудования виртуального сервера. Для этого в Debian можно воспользоваться командой lspci. Запишем модели IDE, SCSI и Ethernet контроллеров. В VMware 4.0 это Intel Corp.82371AB PIIX4 IDE, BusLogic BT-946C [MultiMaster 10] и AMD 79c970 [PCnet LANCE] соответственно.

Перейдем в каталог /usr/src и выполним команду

tar --bzip2 -x -f kernel-source-2.4.18.tar.bz2

Теперь зайдем в каталог /usr/src/kernel-source-2.4.18 и выполним команду

make mrproper config

Сейчас необходимо выбрать конфигурацию ядра, отвечая на вопросы. Все, что может понадобиться до того, как станут доступны сетевые ресурсы (сетевые карты, поддержка чипсетов, протокола TCP, NFS и т.д.) необходимо включить в ядро. Дополнительно, необходимо включить следующие настройки:

  • CONFIG_BLK_DEV_LOOP
  • CONFIG_BLK_DEV_NBD
  • CONFIG_BLK_DEV_RAM (только при подключении корневой файловой системы с RAM диска)
  • CONFIG_BLK_DEV_RAM_SIZE = 30720 (только при подключении корневой файловой системы с RAM диска)
  • CONFIG_BLK_DEV_INITRD (только при подключении корневой файловой системы с RAM диска)
  • CONFIG_PACKET
  • CONFIG_FILTER
  • CONFIG_IP_PNP
  • CONFIG_IP_PNP_DHCP
  • CONFIG_NFS_FS
  • CONFIG_NFS_V3
  • CONFIG_ROOT_NFS (только при подключении корневой файловой системы через NFS)

После завершения настроек скомпилируем ядро командой

make bzImage

Предполагается, что версии установленного и компилируемого ядра совпадают. Если же это не так, и при компиляции ядра некоторые из опций были скомпилированы как модули, необходимо командой make modules произвести перекомпиляцию модулей. Подробнее о компиляции ядра можно узнать в [5].

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

Чтобы ядро можно было загружать через сеть с помощью Etherboot или Netboot, оно должно быть специальным образом подготовлено. Для этого служит программа mknbi, входящая в пакет mknbi (при создании этого документа использовалась версия 1.4.4). Поместить ее на сервер можно, подключившись из OC Windows к серверу по ftp.

Для ее установки необходимо распаковать файл с исходными текстами в каталог /usr/src/mknbi-1.4.4 и выполнить команды

make
mkdir /usr/local/lib/mknbi
cp first32elf* /usr/local/lib/mknbi

Программа имеет несколько параметров, из которых мы рассмотрим четыре:

--format=format Указывает формат выходного файла.

--target=target Указывает тип целевого двоичного кода.

--rootdir=rootdir Задает имя каталога, из которого будет подмонтирована корневая файловая система

--ip=string Позволяет задать IP адреса клиента, сервера, шлюза и маску подсети. Также возможно указать dhcp или bootp для автоматической настройки с помощью этих протоколов.

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

mkdir /exports

Дальнейшие действия зависят от того, каким образом мы будем подключать коревую файловую систему. Для подключения через NFS необходимо выполнить команду (предполагается, что корневая файловая система будет располагаться в каталоге /exports/node01)

./mknbi --format=elf --target=linux --rootdir=/exports/node01 --ip=dhcp /usr/src/kernel-source-2.4.18/arch/i386/boot/bzImage > /exports/net_boot_kernel

Для варианта с RAM диском команда выглядит несколько иначе:

./mknbi --format=elf --target=linux --rootdir=/dev/ram0 --ip=dhcp /usr/src/kernel-source-2.4.18/arch/i386/boot/bzImage /initrd/initrd.gz > /exports/net_boot_kernel

О том, как создать файл /initrd/initrd.gz, который содержит образ корневой файловой системы, рассказывается в п.4.8.

По окончании этого этапа клиентский компьютер уже может загружать ядро. За информацией по mknbi обращайтесь к [6].

4.7. Настройка NFS

Настройка предоставляемых сервером NFS в сетевое использование ресурсов осуществляется с помощью файла /etc/exports.

В нашем примере используем такой файл

/usr         node01.private.net(rw,no_root_squash)
/exports     node01.private.net(rw,no_root_squash)
/            192.168.223.4(rw,no_root_squash)

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

Дополнительная информация по настройке NFS доступна в [7].

4.8. Настройка файловой системы для клиента

Для завершения настройки сетевой загрузки необходимо подготовить файловую систему клиента. Для этого в самом начале нами был создан третий виртуальный компьютер. Установим на него ОС Debian согласно тем же рекомендациям, что были даны в п.4.1.

Имеется один нюанс: поскольку мы раздаем IP адреса статически, прежде, чем новый компьютер сможет получить конфигурацию от DHCP сервера, необходимо подправить файл /etc/dhcpd.conf. Когда установщик Debian задаст вопрос о конфигурации по DHCP, переключимся на другой терминал (нажав Alt+F2), выполним команду ifconfig -a и запишем MAC-адрес адаптера. После этого переключимся в виртуальный компьютер сервера, и отредактируем файл /etc/dhcpd.conf, добавив в раздел group строки:

host work {
  hardware ethernet 00:0C:29:03:AB:CA;
  fixed-address 192.168.223.4;
}

Во второй строке необходимо указать записанный MAC адрес. Чтобы изменения вступили в силу, необходимо перезапустить DHCP сервер командой

/etc/init.d/dhcp restart

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

apt-get install mc portmap

Для варианта с подключением корневой файловой системы по NFS будем пользоваться каталогом /tmp. Для варианта с RAM-диском необходимо предварительно создать образ RAM-диска. Сделать это можно различными способами. Приведем один из них:

dd if=/dev/zero of=/initrd/initrd bs=1k count=30720
mke2fs -m0 -F /initrd/initrd
mount -t ext2 -o loop /initrd/initrd /mnt

Здесь мы создаем пустой файл объемом 30 Мб, затем формируем в нем файловую систему ext2 и монтируем его как loop устройство в каталог /mnt, в котором и будем создавать файловую систему.

Процесс создания файловой системы одинаков для обоих вариантов и заключается в следующем:

  1. Скопируйте каталоги /bin, /dev, /etc, /lib, /sbin целиком;
  2. Создать каталоги home, root, proc, tmp;
  3. Создать каталоги usr, usr/bin; скопировать каталог /usr/sbin, скопировать файл expr в каталог usr/bin;
  4. Создать каталоги var, var/lock, var/log, var/log/news, var/run, var/tmp, var/lib; скопировать каталог var/lib/dhcp.

Подправим файл /mnt/etc/fstab. В самом простом виде он может выглядеть так:

/dev/ram0             /      ext2     errors=remount-ro     0     1
proc                  /proc  proc     defaults              0     0
server.private.net:/usr /usr nfs

Для подключения корневой файловой системы по NFS первую строку необходимо заменить на

server.private.net:/exports/node01     /     nfs

Теперь необходимо создать файл /etc/dhclient-enter-hooks, внести в него следующие две строки, чтобы каждый клиент установил свое имя, полученное от DHCP сервера

echo "$new_host_name" > /etc/hostname
hostname -F /etc/hostname

и сделать этот файл исполняемым:

chmod a+x /etc/dhclient-enter-hooks

Если вы скомпилировали ядро более новой версии, то необходимо в каталог /lib/modules скопировать каталог с перекомпилированными модулями, а старый каталог удалить.

Если смонтирован файл с RAM диском, его необходимо отключить командой

umount /mnt

а затем выполнить команду

mount -t nfs server.private.net:/ /mnt

для подключения файловой системы сервера в каталог /mnt. Далее, для первого варианта необходимо скопировать содержимое /tmp в каталог /mnt/exports/node01, а для второго - выполнить команды

gzip -9 /initrd/initrd
cp /initrd/initrd.gz /mnt/initrd

после чего файловую систему сервера необходимо размонтировать, выполнив

umount /mnt

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

Заключение

Итак, мы подробно рассмотрели организацию процесса сетевой загрузки. В примере мы создали только одного клиента, с названием node01. Для подключения последующих, на сервере в файлы dhcpd.conf, server.rev, server.hosts, exportfs нужно добавить соответствующие записи. При необходимости можно создать и новую файловую систему, поместив ее в каталог /exports/nodeXX, или создав новое ядро для удаленной загрузки.

Все вышеописанные действия без каких либо изменений могут быть применены для создания реальной сети из реальных машин.

Литература

  1. Введение в загрузку по сети и Etherboot
  2. Installing Debian GNU/Linux 3.0 For Intel x86
  3. DHCP mini-HOWTO
  4. DNS HOWTO
  5. Ставим ядро 2.6, или Ядерная физика для домохозяйки
  6. Документация по mknbi
  7. NFS HOWTO
  8. Загрузка машин по сети
  9. Удаленная загрузка и Linux: Настройка удаленно загружаемых рабочих станций с Linux, DOS, Windows 95/98 и Windows NT


©Арыков Сергей, 14.12.2004


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2024 LinuxRSP