Помните, мы когда-то рассматривали создание универсальной USB-«аптечки» для экстренной починки компьютера? В последней статье мы познакомились с загрузкой по сети и программой DRBL.
Ну а в этот раз мы займёмся созданием аналога мультизагрузочного
носителя, только загружаться мы будем не с флешки, а по сети — с помощью
PXE. Делается это довольно просто. Как обычно, нам понадобится машина
под управлением Ubuntu Server 11.10 с двумя сетевыми картами, которая
будет исполнять роль сервера. В BIOS клиентских машин должна быть
включена поддержка сетевой загрузки.
Дабы упростить себе задачу и не возиться по отдельности с установкой и
настройкой различных сетевых служб вроде DHCP- и TFTP-сервера, мы
воспользуемся более универсальным решением — dnsmasq. Это лёгкий
DNS/DHCP/TFTP-сервер, который прекрасно подходит для сетевой загрузки
машин. Как и в прошлый раз, договоримся, что сетевой интерфейс eth0
автоматически получает IP-адрес от роутера и имеет доступ в Интернет. В
свою очередь eth1 смотрит во внутреннюю сеть и имеет статический
IP-адрес 192.168.0.1. Отредактируйте сетевые настройки в файле
/etc/network/interfaces с помощью текстового редактора nano, если вы
этого ещё не сделали.
1 | sudo nano /etc/network/interfaces
|
В конце файла добавим настройки интерфейса eth1 и сохраним его (F2, Y, Enter).
1 2 3 4 | auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
|
Если необходимо дать доступ в Сеть для локальных клиентов, то
придётся сделать ещё кое-что. Во-первых, раскомментировать (убрать # в
начале) строчку net.ipv4.ip_forward=1 в файле /etc/sysctl.conf.
Во-вторых, выполнить пару команд. Последнюю команду надо добавить в
конец файла /etc/rc.local перед строчкой exit 0, чтобы проброс Сети запускался при старте.
1 2 | sudo sysctl -p
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
Теперь надо установить dnsmasq, а также несколько утилит для
облегчения работы — файловый менеджер Midnight Commander и утилиты для
распаковки ISO-образов и архивов ZIP/RAR/7ZIP.
1 | sudo apt-get install dnsmasq mc genisoimage unzip unrar p7zip-full
|
Приступаем к настройке dnsmasq.
1 | sudo nano /etc/dnsmasq.conf
|
Добавляем в самом конце следующие строки:
1 2 3 4 5 6 | interface=eth1
dhcp-range=192.168.0.10,192.168.0.100,255.255.255.0,24h
server=8.8.8.8
enable-tftp
tftp-root=/pxe
dhcp-boot=pxelinux.0
|
Что есть что? Параметр interface указывает на то, с каким сетевым
интерфейсом будет работать dnsmasq. В dhcp-range первые два параметра
указывают начало и конец диапазона выдаваемых клиентским компьютерам
адресов, затем идёт маска подсети и время аренды адресов. В поле server
указываются IP-адреса вышестоящих DNS-серверов (например, провайдера),
но при желании можно воспользоваться Google DNS или OpenDNS. Директива
enable-tftp включает встроенный TFTP-сервер, а в tftp-root указывается
корневой каталог для него. Наконец, в dhcp-boot прописывается загрузчик,
который будет отдаваться по сети.
Сохраним настройки и перезапустим сервер, а также создадим
необходимые папки и запустим Midnight Commander (mc), где и продолжим
основную работу. В /pxe/images/ будут храниться образы утилит или
дистрибутивов, которые будут загружаться через локальную сеть. Каталог
/pxe/pxelinux.cfg предназначен для хранения настроек PXE.
1 2 3 4 | sudo mkdir -p /pxe/images/
sudo mkdir /pxe/pxelinux.cfg
sudo service dnsmasq restart
sudo mc
|
Первым делом надо получить загрузочные программы из проекта syslinux.
Скачайте наиболее свежий архив в домашнюю папку. Команды можно набирать
прямо в mc или для удобства переключаться между консолью и панелями
сочетанием клавиш Ctrl+O. Качать файлы удобнее всего программой wget.
Например, вот так:
Входим в скачанный архив, просто переместив выделение к нему и нажав
Enter. Из него в директорию /pxe надо скопировать несколько файлов —
pxelinux.0 из папки /core, menu.c32 из /com32/menu и memdisk из
одноимённого каталога.
Начинаем потихоньку заполнять настройки по умолчанию pxelinux.
1 | sudo nano /pxe/pxelinux.cfg/default
|
Добавим в этот файл следующие строки:
1 2 3 4 5 6 7 | DEFAULT menu.c32
TIMEOUT 600
MENU TITLE PXE BOOT MENU
LABEL HDDBoot
MENU LABEL Local Boot
MENU DEFAULT
LOCALBOOT 0
|
Вообще вся документация по формированию параметров загрузчиков
syslinux, и загрузочного меню PXE в частности, находится в текстовых
файлах каталога docs архива syslinux. Разберём те параметры, которые мы
только что использовали. По умолчанию запускается файл menu.c32, который
и отображает наше PXE-меню. В TIMEOUT указывается время ожидания (в
1/10 с), после которого будет произведена загрузка пункта по умолчанию. В
MENU TITLE содержится заголовок нашего меню. Туда можно вписать всё,
что душе угодно.
Затем идёт описание первого пункта меню. Каждому пункту для удобства
обращения с ним присваивается метка (LABEL). В MENU LABEL имя метки,
которое пользователь увидит при загрузке. MENU DEFAULT означает, что
этот пункт из текущего меню будет запущен по умолчанию. Ну а директива
LOCALBOOT 0 указывает на то, что надо завершить работу PXE и вернуться к
обычной загрузке компьютера. Лучше оставить этот пункт для запуска по
умолчанию.
Разнообразим наш мультизагрузчик некоторыми утилитами. Возьмём, к примеру, известнейшую программу для тестирования памяти Memtest86+.
Скачиваем с сайта архив с Pre-Compiled Bootable Binary. Сохраняем из
него файл memtest.bin как memtest (без расширения!) в папку /pxe/images.
Здесь мы сталкиваемся сразу с двумя особенностями. Во-первых, для
набора syslinux ряд файлов (.0, .bin, .bs и так далее) должны иметь
строго определённый формат. Тот же .bin для isolinux читается как
загрузочный сектор CD, а memtest.bin таковым не является. Во-вторых,
этот файл напрямую поддерживает загрузку с помощью syslinux, поэтому мы
можем смело указать его в качестве запускаемого «ядра».
1 2 3 | LABEL Memtest86+
MENU LABEL Memtest86+
KERNEL images/memtest
|
Ещё один полезный вариант загрузки — использование memdisk.
В этом случае носитель (iso-образ, raw-образ дискеты, образ HDD)
полностью копируется в оперативную память компьютера и дальнейшая
загрузка происходит с него. Вот пример для запуска KolibriOS.
Из архива с дистрибутивом надо скопировать файл kolibri.img в папку
/pxe/images, а в /pxe/pxelinux.cfg/default дописать нижеследующие
строки.
1 2 3 4 | LABEL Kolibri
MENU LABEL KolibriOS
KERNEL memdisk
APPEND initrd=images/kolibri.img
|
Можно поступить «суровее» — поставить в загрузку Hiren's Boot CD.
Уже можно догадаться, что iso-образ надо сохранить как
/pxe/images/hirens.iso. На клиентской машине придётся подождать
минуту-другую, пока полугигабайтный iso скопируется в память.
Естественно, что на самом ПК должен быть хотя бы один гигабайт RAM. Зато
после загрузки работа с Hiren's Boot CD крайне быстра. Впрочем, таких
экстремальных вариантов лучше, наверное, избегать.
1 2 3 4 | LABEL Hirens
MENU LABEL Hiren's Boot CD
KERNEL memdisk
APPEND iso initrd=images/hirens.iso
|
Возьмём пример посложнее — загрузим Clonezilla Live
через PXE. Создаём папку /pxe/images/clonezilla. Туда надо будет
скопировать все файлы из папки /live, которая лежит в ISO-образе. В
настройках мы указываем загрузку ядра Linux (vmlinuz), а в APPEND
передаём ему параметры. Их можно подсмотреть в файле
isolinux/isolinux.cfg внутри ISO-образа (ключи ocs_* относятся
непосредственно к Clonezilla, а не ядру как таковому). В нашем случае
отличия от него будет немного — надо только указать, что файл с образом
системы в Squashfs следует забрать при загрузке с TFTP-сервера.
1 2 3 4 5 6 7 | LABEL Clonezilla
MENU LABEL Clonezilla
KERNEL images/clonezilla/vmlinuz
APPEND
initrd=images/clonezilla/initrd.img boot=live config noprompt noswap
nomodeset nolocales/nosplash edd=on vga=788 ocs_live_run= "ocs-live-general" ocs_live_extra_param= "" ocs_live_keymap= "" ocs_live_batch= "no" ocs_lang= "" fetch=tftp://192.168.0.1/images/clonezilla filesystem.squashfs TEXT HELP
Clonezilla Live — Boot to RAM
ENDTEXT
|
Внимание! Всё, что находится после APPEND, является
одной-единственной строкой без переносов. Текст между директивами TEXT
HELP и ENDTEXT будет показан в качестве подсказки при выборе
соответствующего пункта загрузочного меню. Аналогичным образом
добавляются в загрузку и другие дистрибутивы или утилиты на основе
Linux. Попробуйте в качестве разминки прописать настройки для
легковесного дистрибутива SliTaz.
1 2 3 4 | LABEL Slitaz
MENU LABEL SliTaz Linux
KERNEL /boot/bzImage
APPEND initrd=/boot/rootfs4.gz,/boot/rootfs3.gz,/boot/rootfs2.gz,/boot/rootfs1.gz rw root=/dev/null vga=normal autologin
|
Как видите, всё довольно просто и достаточно гибко настраивается. Для
дальнейшего изучения PXE-загрузки на базе Ubuntu Server неплохо было бы
ознакомиться с wiki syslinux
и документацией, которая прилагается в архиве к этой утилите. Из
интересных решений с использованием PXE можно почитать, к примеру, про
сетевую установку Windows 7 без применения RIS/WDS. А из полезных дополнений стоит присмотреться к дистрибутиву Thinstation для создания тонких клиентов, а также к менеджеру загрузки Plop.
Несомненно, пригодятся утилиты для тестирования «железа» и диагностики
проблем, для восстановления данных и создания бекапов, для… В общем,
дело за вами. Удачи!
|