Хочу написать эту очень полезную заметку, которая может пригодиться как и начинающему системному администратору, так и обычному пользователю, который хочет автоматизировать процесс установки операционных систем. Сейчас я наведу пример установки по сети ОС семейства Linux. Но, в ближайшее время, добавлю установку Windows подобных систем.
Установка операционной системы по сети (по PXE) понадобиться в случае:
- неработоспособности USB портов
- неработоспособности/отсутствии DVD/CD приводов
- работе с удаленными серверами (в качестве сетевого live cd)
- и т.п.
В данном случаи, в качестве хостовой ОС я взял Ubuntu 12.04.2 LTS.
Для детального изучения и понимания, можете ознакомиться с PXE и узнаете что к чему.
Теперь, будем считать, что ознакомление прошло успешно, и Вы узнали, что PXE это Preboot eXecution Environment и это весьма нужная и полезная штука которая позволяет установить ОС при использовании сетевой карты (по сети).
Теперь разберем как работает PXE подробнее:
- Подключаем к сети компьютер-жертву.
- Включаем жертву и, при загрузку, жмем F12 (network boot или LAN boot), чтобы выбрать загрузку по сети LAN
- Дальше жертва отправить широковещательный DHCP запрос для получения сетевых настройок.
- Эти настройки должен выдать наш PXE сервер (он же DHCP-сервер), который мы будем настраивать
- Если мы нормально настроили PXE сервер — компьютер-жертва получит все нужные сетевые настройки (ІР адрес, шлюз и доступ к TFTP-серверу с которого подтянется файл загрузчик нужной операционной системы для жертвы).
- Дальше загрузчик считает конфиг и скачает выбранное нами ядро ОС с установщиком на жертву.
- Ну и запустит процесс установки ОС где все по стандарту.
Следовательно, нам нужно настроить на 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.
Если проблема решена и загрузилось меню, просто нужно выбрать нужную ОС и перейти к процессу установки.
Как видим, ядро загрузилось и начался процесс установки.
От и все.