Настройка PXE на Ubuntu 12.04

Хочу написать эту очень полезную заметку, которая может пригодиться как и начинающему системному администратору, так и обычному пользователю, который хочет автоматизировать процесс установки операционных систем. Сейчас я наведу пример установки по сети ОС семейства Linux. Но, в ближайшее время, добавлю установку Windows подобных систем.
Установка операционной системы по сети (по PXE) понадобиться в случае:


В данном случаи, в качестве хостовой ОС я взял Ubuntu 12.04.2 LTS.
Для детального изучения и понимания, можете ознакомиться с PXE и узнаете что к чему.
Теперь, будем считать, что ознакомление прошло успешно, и Вы узнали, что PXE это Preboot eXecution Environment и это весьма нужная и полезная штука которая позволяет установить ОС при использовании сетевой карты (по сети).

Теперь разберем как работает PXE подробнее:

  1. Подключаем к сети компьютер-жертву.
  2. Включаем жертву и, при загрузку, жмем F12 (network boot или LAN boot), чтобы выбрать загрузку по сети LAN
  3. Дальше жертва отправить широковещательный DHCP запрос для получения сетевых настройок.
  4. Эти настройки должен выдать наш PXE сервер (он же DHCP-сервер), который мы будем настраивать
  5. Если мы нормально настроили PXE сервер — компьютер-жертва получит все нужные сетевые настройки (ІР адрес, шлюз и доступ к TFTP-серверу с которого подтянется файл загрузчик нужной операционной системы для жертвы).
  6. Дальше загрузчик считает конфиг и скачает выбранное нами ядро ОС с установщиком на жертву.
  7. Ну и запустит процесс установки ОС где все по стандарту.

Следовательно, нам нужно настроить на Ubuntu 12.04 PXE сервер с DHCP, TFTP и образами нужных ОС.

Настройка TFTP-сервера.

Устанавливаем нужные пакеты

sudo apt-get install tftp tftpd-hpa

Создаем папку для конфигов и заливаем в нее boot-файлы.
Замечание! Загрузчики есть разные (gPXE, SYSLINUX, etc.), я же использовал syslinux, который можно скачать здесь.

mkdir /tftpboot
cd /tftpboot
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz
tar -xzvf syslinux-4.05.tar.gz syslinux-4.05/com32/menu/menu.c32
tar -xzvf syslinux-4.05.tar.gz syslinux-4.05/core/pxelinux.0
mv syslinux-4.05/com32/menu/menu.c32 syslinux-4.05/core/pxelinux.0 /tftpboot
rm –rf syslinux-4.05*

Файл конфигураций TFTP должен иметь такой вид.

cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Рестартуем клиент.

sudo /etc/init.d/tftpd-hpa restart

Настройка DHCP-сервера.

Устанавливаем нужные пакеты

sudo apt-get install dhcp3-server

Теперь нужно прописать конфиг. Он должен быть такого вида.

cat /etc/dhcp3/dhcpd.conf
#
# Sample configuration file for ISC dhcpd for Debian
#
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;

# IP данного сервера
server-name "192.168.1.107";
subnet 192.168.1.0 netmask 255.255.255.0 {
pool {
range 192.168.1.100 192.168.1.140;
next-server 192.168.1.107;
filename "pxelinux.0";
option routers 192.168.1.1;
}
}

Перезапускаем dhcp-сервер:

sudo /etc/inti.d/dhcp3-server restart

Настройка меню и гостевой ОС

Теперь нужно настроить меню, для выбора операционной системы и загрузить образы нужных ОС. Внешний вид и пункты меню описаны в файле (в данном случае) /tftpboot/pxelinux.cfg/default.

cat /tftpboot/pxelinux.cfg/default

# Меню, которое закачали
default menu.c32

# Заголовок и время на выбор пункта меню
menu title PXE Network Boot Menu
prompt 0
timeout 1200

# Первый пункт меню – загрузка с HD
label Boot from first hard disk
localboot 0x80

############### OS DEBIAN ########
# Меню с подменю
menu begin
menu title Debian

# Переход в родительскую директорию (возврат к предыдущему меню)
label ..
menu exit

# Список операционных систем для установки по PXE
LABEL etch_i386_install
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz  --

LABEL etch_i386_linux
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz  --

LABEL etch_i386_expert
kernel debian/etch/i386/linux
append priority=low vga=normal initrd=debian/etch/i386/initrd.gz  --

LABEL etch_i386_rescue
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz  rescue/enable=true --

menu end
##################################

############### OS CENTOS ##########
menu begin
menu title Centos

label ..
menu exit

LABEL Centos_5_i386
kernel centos5/i386/vmlinuz
append initrd=centos5/i386/initrd.img

LABEL Centos_5_x86_64
kernel centos5/x64/vmlinuz
append initrd=centos5/x64/initrd.img

LABEL Centos_6_i386
kernel centos6/i386/vmlinuz
append initrd=centos6/i386/initrd.img

LABEL Centos_6_x86_64
kernel centos6/x64/vmlinuz
append initrd=centos6/x64/initrd.img

menu end
##################################

Теперь осталось закачать все образы Debian и Centos, которые мы перечислили.

cd /tftpboot
mkdir -p {debian/etch/i386,centos5/i386,centos5/x64,centos6/i386,centos6/x64}
cd debian/etch/i386
wget http://ftp.uk.debian.org/debian/dists/Debian6.0.5/main/installer-i386/20110106+b1/images/netboot/debian-installer/i386/initrd.gz
wget http://ftp.uk.debian.org/debian/dists/Debian6.0.5/main/installer-i386/20110106+b1/images/netboot/debian-installer/i386/linux

cd /tftpboot/centos5/i386
wget http://centos.vc.ukrtel.net/5.8/os/i386/images/pxeboot/initrd.img
wget http://centos.vc.ukrtel.net/5.8/os/i386/images/pxeboot/vmlinuz

cd /tftpboot/centos5/x64
wget http://centos.vc.ukrtel.net/5.8/os/x86_64/images/pxeboot/initrd.img
wget http://centos.vc.ukrtel.net/5.8/os/x86_64/images/pxeboot/vmlinuz

cd /tftpboot/centos6/i386
wget http://centos.vc.ukrtel.net/6.3/os/i386/images/pxeboot/initrd.img
wget http://centos.vc.ukrtel.net/6.3/os/i386/images/pxeboot/vmlinuz

cd /tftpboot/centos6/x64
wget http://centos.vc.ukrtel.net/6.3/os/x86_64/images/pxeboot/initrd.img
wget http://centos.vc.ukrtel.net/6.3/os/x86_64/images/pxeboot/vmlinuz

Все настройки сделано. Дерево каталогов должно иметь следующий вид.

root@ubuntu:~# tree /tftpboot
/tftpboot
├── centos5
│   ├── i386
│   │   ├── initrd.img
│   │   └── vmlinuz
│   └── x64
│       ├── initrd.img
│       └── vmlinuz
├── centos6
│   ├── i386
│   │   ├── initrd.img
│   │   └── vmlinuz
│   └── x64
│       ├── initrd.img
│       └── vmlinuz
├── debian
│   └── etch
│       └── i386
│           ├── initrd.gz
│           └── linux
├── menu.c32
├── pxelinux.cfg
│   └──default
└──pxelinux.0

Теперь тестим проделанное. Включаем комп-жертву, которая находить в той же сети, что и PXE сервер (для примера, я взял виртуальную машину на Vbox) и сразу при загрузке жмем F12.

Как видим, мы попадем в меню, где нам предлагают выбрать тип загрузки. Выбираем LAN (т.е. нажимаем клавишу l).
Если Вы все правильно настроили должно выдать такое окно, с которого видно, что DHCP-сервер выдал ІР – 192.168.1.102 и шлюз. Это свидетельствует о том, что DHCP было настроено верно.

Если TFTP настроено верно — мы попадаем в такое меню.

Если Вы получили следующее окно с ошибкой — необходимо просмотреть путь к конфигу TFTP и проверить запущена ли служба TFTP.

Если проблема решена и загрузилось меню, просто нужно выбрать нужную ОС и перейти к процессу установки.

Как видим, ядро загрузилось и начался процесс установки.

От и все.

Автор: admin, 13 июля 2012
Рубрики: Linux
Метки:

Написать комментарий

Последние статьи

Яндекс.Метрика
?>