Загрузочный сервер — как загрузочная флешка, только сервер и по сети

Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора.Казалось бы, что может быть лучше? — А лучше может быть загрузочный сервер! Представьте, вы выбрали в BIOS загрузку по сети и можете установить ОС/вылечить компьютер от вирусов/реанимировать диски/протестировать ОЗУ/etc с PXE Boot сервера, ведь это куда удобнее нежели бегать с флешкой от машины к машине.А в случае большого компьютерного парка, такой инструмент и вовсе незаменим.Вот такое загрузочное меню получилось у меня: fd16e49345754c8cb23ca89fe279d2c0.png

Под катом вас ждет описание всех настроек, а так же небольшой сюрприз.

НачалоВозьмем за основу, что свежеустановленный Debian Wheezy уже весело подмигивает нам консолью.Подготовим базу для дальнейших манипуляций. Установить и настроить нам потребуется: TFTP сервер Samba Syslinux DHCP сервер HTTP сервер NFS сервер 1. TFTP

# aptitude install tftpd-hpa приведем конфиг /etc/default/tftpd-hpa к виду TFTP_USERNAME=«tftp» TFTP_DIRECTORY=»/srv/tftp» #пусть к корню tftp TFTP_ADDRESS=»0.0.0.0:69» TFTP_OPTIONS=»--secure -l -v -m /etc/tftpd.remap» #файл для замены слешей в путях с windows style на linux style и поместим в /etc/tftpd.remap вот такую строку rg \\ / 2. Samba

# aptitude install samba В конец файла /etc/samba/smb.conf добавим информацию о папке, где будут лежать инсталляционные файлы Windows. [images] comment = images path = /srv/tftp/images create mask = 0660 directory mask = 0771 writable = yes guest ok=yes Cоздаем папку, даем права и рестартим самбу # mkdir /srv/tftp/images # chmod 777 /srv/tftp/images # service samba restart 3. SyslinuxСкачиваем и заливаем в корень TFTP сервера все необходимое

# cd /tmp # wget https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/syslinux-4.02.tar.gz #только с этой версией удалось подружить инсталлятор ESXi # tar -xf syslinux-4.02.tar.gz # cd syslinux-4.02/ # find ./ -name «memdisk» -type f|xargs -I {} cp '{}' /srv/tftp/ # find ./ -name «pxelinux.0»|xargs -I {} cp '{}' /srv/tftp/ # find ./ -name »*.c32»|xargs -I {} cp '{}' /srv/tftp/ Перейдем к настройке # cd /srv/tftp/ # mkdir pxelinux.cfg # cd pxelinux.cfg Создадим конфиг основного меню и внесем начальные настройки # cat > default ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu

LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120 TEXT HELP The system will boot after the time is up ENDTEXT 4. DHCP

# aptitude install isc-dhcp-server дефолтный конфиг переместим, создадим вместо него свой и перезапустим DHCP демон # mv /etc/dhcp/dhcpd.conf{,_orig} # cat > /etc/dhcp/dhcpd.conf option domain-name-servers 8.8.8.8, 8.8.4.4; option ip-forwarding on; default-lease-time 60; min-lease-time 120; max-lease-time 300; authoritative; ddns-update-style interim; log-facility local7; shared-network PXE-Netwotk { subnet 10.0.10.0 netmask 255.255.255.0 { range 10.0.10.10 10.0.10.254; option routers 10.0.10.1; option subnet-mask 255.255.255.0; option domain-name-servers 8.8.8.8, 8.8.4.4; filename «pxelinux.0»; next-server 10.0.10.1; option root-path »10.0.10.1:/srv/tftp/»; } } # service isc-dhcp-server restart Спойлер для тех, у кого в роли DHCP сервера выступает MikroTik address=10.0.10.0/24 gateway=10.0.10.1 dns-server=8.8.8.8, 8.8.4.4 wins-server=» ntp-server=212.20.50.208 caps-manager=» domain=«domain.local» next-server=10.0.10.1 boot-file-name=«pxelinux.0» dhcp-option=»

Так же стоит заметить, что в данной инсталляции у севера две сетевые карты и он является еще и шлюзом в интернет.

Поэтому необходим еще ряд нехитрых манипуляций # sed -i 's/\#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf # sysctl -p # iptables -t nat -I POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE # sed -i 's/INTERFACES=\»\»/INTERFACES=\«eth1\»/g' /etc/default/isc-dhcp-server # service isc-dhcp-server restart 5. HTTPПока просто установим, а зачем он нам понадобился будет понятно далее по тексту.

# aptitude install apache2 6. NFSРовно так же как и предыдущий пункт.

# aptitude install nfs-kernel-server Если все сделано правильно, то при загрузке какой-либо машины с этого DHCP/PXE/TFTP сервера мы увидим следующее: 9c635c3aae554dabb0c568d32a3af571.pngОснова готова! Двигаемся далее.Научим сервер устанавливать различные ОС Для установки нам будут доступны: Windows 2008R2/20012R2 Debian 6/7 Centos 6/7 Ubuntu 12.04/12.10/14.04/14.10 FreeBSD 9.2/10.1 VMware ESXi 5.0/5.5 Структура меню, а следовательно и файл /srv/tftp/pxelinux.cfg/default притерпели изменения.

Теперь конфиг главного меню PXE сервера теперь выглядит так ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu

LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120 TEXT HELP The system will boot after time is up. ENDTEXT LABEL Windows → KERNEL vesamenu.c32 APPEND pxelinux.cfg/windows

LABEL Linux → KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux

LABEL FreeBSD → KERNEL vesamenu.c32 APPEND pxelinux.cfg/bsd

LABEL VMvare → KERNEL vesamenu.c32 APPEND pxelinux.cfg/vmware Листинг директории /srv/tftp/pxelinux.cfg/ root@pxe:/srv/tftp/pxelinux.cfg# ls -l total 32 -rw-r--r-- 1 tftp tftp 475 Фев 17 18:04 bsd -rw-r--r-- 1 tftp tftp 881 Фев 17 18:00 default -rw-r--r-- 1 tftp tftp 1316 Фев 17 18:01 linux -rw-r--r-- 1 tftp tftp 363 Фев 17 18:03 vmware -rw-r--r-- 1 tftp tftp 312 Фев 18 00:01 windows Под спойлером содержимое конфига каждого из подпунктов меню представленных выше windows PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE Windows

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL W2K8_x64_R2 & W2K12_x64_R2 (menu inside) kernel Boot/pxeboot.0

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default linux PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE Linux

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL Debian-7-x64 kernel debian/7/linux append initrd=debian/7/initrd.gz

LABEL Debian-6.0.6-x64 kernel debian/6/linux append initrd=debian/6/initrd.gz

LABEL CentOS-7-x64 kernel centos/7/vmlinuz append initrd=centos/7/initrd.img method=http://mirror.mirohost.net/centos/7/os/x86_64/ devfs=nomount ksdevice=link ramdisk_size=100000

LABEL CentOS-6-x64 kernel centos/6/vmlinuz append initrd=centos/6/initrd.img method=http://mirror.mirohost.net/centos/6/os/x86_64/ devfs=nomount ksdevice=link ramdisk_size=100000

LABEL Ubuntu-14.10-x64 kernel ubuntu/14.10/linux append initrd=ubuntu/14.10/initrd.gz expert dmraid=true LABEL Ubuntu-14.04-x64 kernel ubuntu/14.04/linux append initrd=ubuntu/14.04/initrd.gz expert dmraid=true

LABEL Ubuntu-12.10-x64 kernel ubuntu/12.10/linux append initrd=ubuntu/12.10/initrd.gz expert dmraid=true

LABEL Ubuntu-12.04_4-x64 kernel ubuntu/12.04_4/linux append initrd=ubuntu/12.04_4/initrd.gz expert dmraid=true

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default bsd PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE BSD

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL FreeBSD-10.1-x64 kernel memdisk initrd freebsd/10/mfsbsd-se-10.1-RELEASE-amd64.iso append iso raw

LABEL FreeBSD-9.2-x64 kernel memdisk initrd freebsd/9/fbsd92.iso append iso raw

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default vmware PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE VMware

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL VMware-5.5 kernel vmw/5.5/mboot.c32 append -c /vmw/5.5/boot.cfg ks=http://10.0.10.1/vmw5.5/ks.cfg +++

LABEL VMware-5.0 kernel vmw/5.0/mboot.c32 append -c /vmw/5.0/boot.cfg ks=http://10.0.10.1/vmw5.0/ks.cfg +++

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default Пути к папкам, где лежат установочные файлы для каждой из ОС, описаны относительно корня TFTP сервера, т.е. /srv/tftp.Например для FreeBSD указано LABEL FreeBSD-10.1-x64 kernel memdisk initrd freebsd/10/mfsbsd-se-10.1-RELEASE-amd64.iso append iso raw следовательно в корне TFTP нужно создать папки freebsd/10/, при этом обратите внимание на права ls -l /srv/tftp/freebsd/10/ total 193780 -rw-r--r-- 1 tftp tftp 198430720 Фев 17 18:17 mfsbsd-se-10.1-RELEASE-amd64.iso У всех должно быть право на чтение — это правило справедливо для всех файлов отдаваемых по TFTP.И еще пара слов о установке FreeBSD.Логин / пароль для входа в загружаемый iso: root / mfsroot(либо root без пароля).Плюс пара примеров скриптов инсталяции FreeBSD на ZFS:1. RAID6 из 4-х дисков.2. RAID1 из 2-х дисков.О том как подготовить Windows к установке с PXE мы писали ранее.Различие с данной инсталляцией составляет лишь то, что здесь мы можем установить и Windows 2008R2 и Windows 2012R2(впрочем и Windows 7/8 тоже, нужно только подготовить файлы дистрибутива и winpe соответствующим образом). После загрузки winpe мы монтируем папку /srv/tftp/images/, где содержаться файлы для установки ОС от Microsoft

ls -l /srv/tftp/images/ total 8 drwxr-xr-x 6 root root 4096 Фев 17 22:19 w2k12r2 drwxr-xr-x 7 tftp tftp 4096 Фев 17 19:05 w2k8r2 и запускаем нужный инсталятор.Для автоматизации, через startnet.cmd, я набросал вот такое меню95ed57d4363f4227a74c57cdbec63d61.pngТеперь осталось разобраться с VMware.Как вы заметили, конфиг для установки гипервизоров несколько отличается от остальных — именно тут нам и понадобится HTTP сервер.В /var/www создадим папки vmw5.5, vmw5.0, а в папках сделаем симлинки на конфиг

# cd /var/www # mkdir vmw5.5 # cd vmw5.5/ # ln -s /srv/tftp/vmw/5.5/ks.cfg # mkdir …/vmw5.0 # cd …/vmw5.0/ # ln -s /srv/tftp/vmw/5.0/ks.cfg О том как подготовить, например, Debian к установке с PXE написано здесь, но я на этом останавливаться не стану.Добавим способность загружать различные дисковые утилиты и тест памяти Данный раздел будет содержать: Memtest86+ Clonezilla-live SystemRescueCD MHDD Конфиги разместились здесь default ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu

LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120000 TEXT HELP The system will boot after time is up. ENDTEXT LABEL Windows → KERNEL vesamenu.c32 APPEND pxelinux.cfg/windows

LABEL Linux → KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux

LABEL FreeBSD → KERNEL vesamenu.c32 APPEND pxelinux.cfg/bsd

LABEL VMvare → KERNEL vesamenu.c32 APPEND pxelinux.cfg/vmware

LABEL HDD and RAM utils → KERNEL vesamenu.c32 APPEND pxelinux.cfg/du du PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE HDD and RAM utils

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL Memtest86+ kernel memtest/memtest

label Clonezilla-live MENU LABEL Clonezilla Live KERNEL clonezilla/vmlinuz APPEND initrd=clonezilla/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run=«ocs-live-general» ocs_live_extra_param=» keyboard-layouts=» ocs_live_batch=«no» locales=» vga=788 nosplash noprompt fetch=tftp://10.0.10.1/clonezilla/filesystem.squashfs

label SystemRescueCD kernel SystemRescueCD/isolinux/rescue64 append initrd=SystemRescueCD/isolinux/initram.igz dodhcp nfsboot=10.0.10.1:/srv/tftp/SystemRescueCD

LABEL MHDD kernel memdisk initrd mhdd/mhdd32ver4.6.iso append iso raw

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default А я расскажу зачем мы ставили еще и NFS сервер.Как видно из конфига загрузки SystemRescueCD, необходимые этому LiveCD файлы он подтягивает монтируя каталог по протоколу NFS. Сервер уже установлен, остается только отредактировать /etc/exports и перезапустить серверный демон. # cat >> /etc/exports /srv/tftp/SystemRescueCD/ 10.0.10.1/255.255.255.0(ro, no_subtree_check, all_squash, insecure, anonuid=1000, anongid=1000) # service nfs-kernel-server restart Предполагаю у вас возник резонный вопрос — «Что тут делает LiveCD, если для них есть отдельный пункт? «SystemRescueCD содержит массу полезных программ для работы с диском (например таких как GParted и testdisk) и поэтому он доступен и здесь и в LiveCD.LiveCD В набор наших LiveCD войдут: Debian 7 LiveCD HirensBootCD Trinity Rescue Kit CD SystemRescueCD Plop Live Конфиги в конец default добавилось LABEL LiveCDs → KERNEL vesamenu.c32 APPEND pxelinux.cfg/livecds livecds PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE LiveCDs

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL Debian LiveCD KERNEL Debian7live/vmlinuz APPEND initrd=Debian7live/initrd boot=live fetch=tftp://10.0.10.1/Debian7live/filesystem.squashfs root=/dev/ram0 rw

LABEL HirensBootCD MENU LABEL Hiren’s Boot CD KERNEL memdisk APPEND iso initrd=hirens/hirens.iso

LABEL Trinity Rescue Kit CD kernel trk/kernel.trk append initrd=trk/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 splash=verbose pci=conf1 trkmenu timeout 100 trknfs=10.0.10.1:/srv/tftp/trk ip=dhcp

LABEL SystemRescueCD kernel SystemRescueCD/isolinux/rescue64 append initrd=SystemRescueCD/isolinux/initram.igz dodhcp nfsboot=10.0.10.1:/srv/tftp/SystemRescueCD

LABEL Plop Live KERNEL plop/bzImage APPEND initrd=plop/initramfs.gz vga=normal nfsmount=10.0.10.1:/srv/tftp/plop

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

Для загрузки Trinity Rescue Kit CD и Plop Live в /etc/exports нужно добавить строки:

/srv/tftp/trk/ 10.0.10.1/255.255.255.0(ro, no_subtree_check, all_squash, insecure, anonuid=1000, anongid=1000) /srv/tftp/plop/ 10.0.10.1/255.255.255.0(ro, no_subtree_check, all_squash, insecure, anonuid=1000, anongid=1000) и отправить команду рестарта NFS демону. Несколько слов о выбраных LiveCD.Debian 7 LiveCDЭтот CD — сборка одного из наших инженеров, включающая в себя следующее: c2b4f46f580d407ba36f62bbf56f05ca.pngЛогин / пароль: root / ServerClubHirensBootCDЕдва ли нуждается в представлении, содержит множество полезных утилит.Подробнее можно ознакомиться здесь.Грузится достаточно долго, не работает MiniXP и Linux. Остальные утилиты доступны для использования.

Trinity Rescue Kit CDСо слов разработчиков, создан для восстановления ОС Windows.Содержит утилиты для сброса паролей, антивирусы, программу для клонирования «компьютера» по сети (при чем на несколько компьютеров одновременно), а так же многое другое.Подробнее здесь.

SystemRescueCDОснован на Gentoo, предназначен для восстановления Linux систем.Включает в себя большое количество всевозможных программ для администрирования, со списком можно ознакомится по ссылке.

Plop LiveLiveCD с тремя полноценными DE на выбор, а так же необходимым админским софтом.

Антивирусы Kaspersky Rescue Disk 10078ca9f3e3b8485d8be5b39195c81e34.png AVG Rescue CD839debd4c6994fafbd01fcf7bf257a29.png В отдельном представлении оба антивируса не нуждаются.О Kaspersky Rescue disk подробнее можно прочесть здесь.С описанием AVG Recsue CD вас ознакомит данный url.Итоговый конфигурационный файл основного меню, а так же файл меню антивирусов default ui vesamenu.c32 PROMPT 0 menu background background.jpg menu title ServerClub PXE boot menu

LABEL bootlocal menu label Boot from first HDD kernel chain.c32 append hd0 0 timeout 120000 TEXT HELP The system will boot after time is up. ENDTEXT LABEL Windows → KERNEL vesamenu.c32 APPEND pxelinux.cfg/windows

LABEL Linux → KERNEL vesamenu.c32 APPEND pxelinux.cfg/linux

LABEL FreeBSD → KERNEL vesamenu.c32 APPEND pxelinux.cfg/bsd

LABEL VMvare → KERNEL vesamenu.c32 APPEND pxelinux.cfg/vmware

LABEL HDD and RAM utils → KERNEL vesamenu.c32 APPEND pxelinux.cfg/du

LABEL LiveCDs → KERNEL vesamenu.c32 APPEND pxelinux.cfg/livecds

LABEL Antiviruses → KERNEL vesamenu.c32 APPEND pxelinux.cfg/av av PROMPT 0 UI vesavesamenu.c32 MENU BACKGROUND background.jpg MENU TITLE Antivirues

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default

LABEL Kaspersky Antivirus KERNEL kav/rescue APPEND initrd=kav/rescue.igz root=live rootfstype=auto vga=791 init=/init kav_lang=ru udev liveimg doscsi nomodeset

LABEL Kaspersky Antivirus (text mode) KERNEL kav/rescue APPEND initrd=kav/rescue.igz root=live rootfstype=auto vga=791 init=/init kav_lang=ru udev liveimg nox kavshell noresume doscsi nomodeset

label AVG menu label AVG Rescue CD kernel avg/vmlinuz append max_loop=255 vga=791 initrd=avg/initrd.lzm init=linuxrc reboot=bios

label AVG nofb menu label AVG Rescue CD with Disabled Framebuffer kernel avg/vmlinuz append max_loop=255 video=vesafb: off initrd=avg/initrd.lzm init=linuxrc reboot=bios

label AVG vgask menu label AVG Rescue CD with Resolution Selection kernel avg/vmlinuz append max_loop=255 initrd=avg/initrd.lzm init=linuxrc vga=ask reboot=bios

LABEL <- Main Menu KERNEL vesamenu.c32 APPEND pxelinux.cfg/default Заключение, оно же и сюрприз На протяжении статьи я сознательно не давал объяснений где взять и как подготовить контент, потому как действия эти весьма тривиальны и только перегрузили бы текст.В качестве сюрприза предлагаю вам два варианта нашей сборки, доступные по ссылкам ниже:

Архив со всем контентом /srv/tftp Архив всей ОС В первом случае необходимо самостоятельно подготовить сервер (в этом поможет глава «Начало» данного эпоса), разархивировать содержимое архива и внести корректировки сообразно реалиям вашей среды.Второй случай подразумевает установку на голое железо или виртуальную машину.Вкратце шаги по развертыванию сборки из полного архива ОС будут такими:1. Загрузиться с Linux LiveCD.2. Разметить диск и отформатировать разделы.3. Примонтировать »/» раздел.4. Распаковать архив. 5. Установить загрузчик.6. Перезагрузиться.7. Настроить ОС в соответствии вашей сети и начать пользоваться.Логин / пароль: root / ServerClub.

Полезнае ссылки Как подготовить Kaspersky Rescue disk 10 для загрузки с PXEWiki syslinuxКак подготовить ESXi для установки с PXEC PXE не грузится интсаллятор ESXi. РешениеОт чего с PXE не грузится интсаллятор ESXi. РешениеЗа сим заканчиваю, благодарю за внимание! Для тех, у кого нет аккаунта на Хабре.Если у вас возникнут вопросы/замечания, то пишите мне на почту — er[dog]serverclub.com.

© Habrahabr.ru