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

    Загрузочная флешка с набором нужного софта — замечательный инструмент системного администратора. Казалось бы, что может быть лучше? А лучше может быть загрузочный сервер!

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

    Вот такое меню встречает нашу команду инженеров при загрузке с PXE



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

    Начало


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

    1. TFTP сервер
    2. Samba
    3. Syslinux
    4. DHCP сервер
    5. HTTP сервер
    6. 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 \\ /

    UPD, дополнение от читателя Aleksey Shipilev
    Повыдирал себе волос, пока отдебажил tftp.
    Что на ThinkPad X201i, что в VirtualBox загрузка отваливалась с:
    PXE-E32: TFTP Open timeout

    Судя по всему, PXE агенты умудрились быть не полностью совместимыми, полечилось добавлением "-r blksize":
    TFTP_OPTIONS="--secure -l -v -r blksize"


    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=""


    Спойлер для тех у кого DHCP на Cisco
    network <ip сети> <маска>
    ip dhcp pool <Имя пула>
    bootfile pxelinux.0
    next-server <IP сервера tftp>
    default-router <Шлюз>
    option 66 ascii «Имя сервера»
    dns-server <DNS сервера>
    option 150 <IP сервера tftp>
    domain-name <доменное имя>
    


    Так же стоит заметить, что в данной инсталляции у севера две сетевые карты и он является еще и шлюзом в интернет.
    Поэтому необходим еще ряд нехитрых манипуляций
    # 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 сервера мы увидим следующее:



    Основа готова!

    Двигаемся далее.


    Научим сервер устанавливать различные ОС


    Для установки нам будут доступны:

    1. Windows 2008R2/20012R2
    2. Debian 6/7
    3. Centos 6/7
    4. Ubuntu 12.04/12.10/14.04/14.10
    5. FreeBSD 9.2/10.1
    6. 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 vesamenu.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 vesamenu.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 vesamenu.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 vesamenu.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, я набросал вот такое меню:



    Теперь осталось разобраться с 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 написано здесь, но я на этом останавливаться не стану.


    Добавим способность загружать различные дисковые утилиты и тест памяти


    Данный раздел будет содержать:
    1. Memtest86+
    2. Clonezilla-live
    3. SystemRescueCD
    4. 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 vesamenu.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 войдут:
    1. Debian 7 LiveCD
    2. HirensBootCD
    3. Trinity Rescue Kit CD
    4. SystemRescueCD
    5. Plop Live

    Конфиги
    в конец default добавилось
    LABEL LiveCDs                     ->
          KERNEL vesamenu.c32
          APPEND pxelinux.cfg/livecds
    

    livecds
    PROMPT 0
    UI vesamenu.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 — сборка одного из наших инженеров, включающая в себя следующее:



    Логин / пароль: root / ServerClub

    HirensBootCD
    Едва ли нуждается в представлении, содержит множество полезных утилит.
    Подробнее можно ознакомиться здесь.
    Грузится достаточно долго, не работает MiniXP и Linux. Остальные утилиты доступны для использования.

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

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

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



    Антивирусы


    1. Kaspersky Rescue Disk 10


    2. AVG Rescue CD


    В отдельном представлении оба антивируса не нуждаются.
    О 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 vesamenu.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
    




    Заключение, оно же и сюрприз


    На протяжении статьи я сознательно не давал объяснений где взять и как подготовить контент, потому как действия эти весьма тривиальны и только перегрузили бы текст.

    В качестве сюрприза предлагаю вам два варианта нашей сборки, доступные по ссылкам ниже:
    1. Архив со всем контентом /srv/tftp (ссылка на торрент файл, прямая ссылка)
    2. Архив всей ОС (ссылка на торрент файл, прямая ссылка)

    В первом случае необходимо самостоятельно подготовить сервер(в этом поможет глава «Начало» данного эпоса), разархивировать содержимое архива и внести корректировки сообразно реалиям вашей среды.

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

    Полезные ссылки


    Как подготовить Kaspersky Rescue disk 10 для загрузки с PXE
    Wiki syslinux
    Как подготовить ESXi для установки с PXE
    C PXE не грузится интсаллятор ESXi. Решение
    От чего с PXE не грузится интсаллятор ESXi. Решение

    За сим заканчиваю, благодарю за внимание!


    Для тех, у кого нет аккаунта на Хабре.
    Если у вас возникнут вопросы/замечания, то пишите мне на почту — er[dog]serverclub.com.

    ServerClub

    35,22

    Компания

    Поделиться публикацией
    Комментарии 82
      +6
      Спасибо, статья прямо как подарок — то, что я искал.
      +22
      Офф-топ:
      Ну наконец-то. Неделя «Системного администрирования» на хабре. Ваша борода имеет +5 к приросту.:)
      А по теме — большое спасибо. Частенько приходится заниматься «воскрешением» убитых систем. И иногда на всех даже флешек не хватает:)
        +6
        Скорее, астрологи объявили неделю загрузки по сети на хабре. Количество восстановленных ОС выросло вдвое.
        0
        Вопрос по безопасности. Получается, что любой пользователь сможет во время загрузки войти в биос, выставить там загрузку по сети и так или иначе получить доступ к некоторым админским функциям? Пароль на биосе сбрасывается батарейкой.
          +11
          Так любой пользователь и так априори имея физический доступ к машине может провести все те же манипуляции.
            +1
            Как уже ответили, если у пользователя есть соответствующий скилл и возможность приложить его к компьютеру, то его врядли что-то остановит.
            Но в разрезе данного how-to есть возможность установить пароль на меню — fedorahosted.org/cobbler/wiki/SetPXEBootPasswd
              0
              ага, спасибо!
            0
            Рекомендую ipxe посмотреть — позволяет загружать образы по http прямо с официальных зеракал.
            +1
            Понравилась статья, очень подробно расписано, порадовал тот факт, что все необходимое уже собрано в удобные архивы, в свое время пришлось повозиться с разворачиванием pxe boot сервера, по крупицам собирать информацию.
              0
              Насчет Mikrotik, как я понял, если вся сеть настроена на микротике, то «загрузочный» сервер указывается в микротике как главный dhcp сервер?
                +2
                Если MikroTik выступает в качестве DHCP сервера в сети, то в настройках нужно указать BOOT(TFTP) сервер next-server=
                и имя файла загрузчика boot-file-name=
                  0
                  А, понял, спасибо.
                0
                Ссылки одинковые
                +2
                Друзья,

                Если есть интересующие темы, которые хочется раскрыть в рамках нашей тематики — будем рады их услышать. Самую интересную выберем — для следующей статьи.
                  +3
                  А как обстоят дела с UEFI PXE? Последнее время разворачивая ОС столкнулся с тем, что на новых ноутбуках стоит именно эта версия и нужен соответствующий загрузчик. Так же если система не X86_64 по хорошему отдавать соответствующий и так далее. В данном решении никак не проверяется на уровне DHCP (хотя возможность есть) какой загрузчик подходит конкретному устройству. Тот же WDS контролирует данный момент и отдает ровно то что требуется.

                    +1
                    Этот момент(UEFI) не проверял.
                    Касаемо разрядности ОС, ставим только x86_64
                      0
                      Вангую, pxelinux.0 не подходит. Сам держу DHCP на миротике и приходится подменять файл ручками. Правда меняю на родной для WDS загрузчик, для pxelinux еще не разбирался с этим вопросом, но планирую.
                        0
                        Wimboot Вам в помощь. На лету патчит bcd, просто указываете пути к оригинальным bootmgr, bcd, boot.sdi, boot.wim.
                          0
                          У меня нет проблемы в запуске WDS, проблема в том, что для UEFI нужен один загрузчик, а для обычного другой и это должно разруливаться еще на DHCP. А так же x32 x64 разные загрузчики. Так что до pxelinux, winboot, WDS и чего либо еще дело не дойдет, если будет отдан не подходящий файл.
                            0
                            Хотел спросить, есть ли на микротике возможность удаленно управлять dhcp сервером через omapi? Если да, то утилиты типа foreman-proxy смогут помочь. Посылаете соответствующий запрос на прокси, а она авторизуется по ключу и конфигурирует правильные параметры для указанного mac-адреса.

                            Если честно, от WDS меня немного подташнивает, тем более ничего волшебного оно не делает, чего я не могу сделать при помощи foreman, его шаблонов и pxe.
                              0
                              Вроде этот случай разобран в вики сислинукса

                              option architecture-type code 93 = unsigned integer 16;
                              
                              {
                              if option architecture-type = 00:00 {
                               filename "path/to/BIOS/pxelinux.0";
                               } elsif option architecture-type = 00:09 {
                               filename "path/to/EFIx64/syslinux.efi";
                               } elsif option architecture-type = 00:07 {
                               filename "path/to/EFIx64/syslinux.efi";
                               } elsif option architecture-type = 00:06 {
                               filename "path/to/EFIia32/syslinux.efi";
                               } else {
                               filename "path/to/BIOS/pxelinux.0"; 
                              }
                              


                              Не подходит?
                      +3
                      А магнита или торрента нет, а то в 12К/с качать 16 дней как-то не очень
                        +3
                        Исправил ссылки, теперь можно скачать торрент файл
                        +4
                        Вместо прямых ссылок на файлы лучше бы торрент вложили. На скорости 3-11кб/с при размере файла 11гб как-то печально качать :)
                          +1
                          Исправил ссылки, теперь можно скачать торрент файл
                          0
                          Спасибо за статью!
                          Единственное чего не хватает, — готового Docker'а.
                          Ибо держать для этого отдельную машину, при редком использовании, расточительно.
                            0
                            KVM? Не такой уж и оверхед…
                              0
                              Ну или как-то так.
                            0
                            Не реализован выбор между установкой 32- и 64-битных версий Windows (вижу только 64-битный WinPE). Там тоже есть пара тонкостей…
                              +1
                              Да.
                              Но как уже писал — ставим только х64, поэтому не реализовывал установку 32-х битных.
                                +1
                                Как вариант создать отдельный загрузчик для х86 версии и вынести его в отдельную папку (Как я и поступил), в меню просто делаем 2 пункта, загрузка x86 версии установки и x64 и указываете для каждого свой pxeboot.0.
                                0
                                Есть ли решение по созданию одного WinPE образа с двумя архитектурами сразу или хотя-бы выбором их из bcd?
                                  0
                                  Пираты такое точно делали с меню в установщике Windows, сам WinPE для совместимости можно использовать 32-битный.
                                0
                                Круто. Забрал в избранное
                                  +1
                                  Спасибо за хорошую статью.
                                  У нас все завязано на theforeman, он сам создает pxe файлы по шаблонам.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      +1
                                      dnsmasq для DHCP+TFTP. (Для DNS лучше unbound)

                                      возможно, мне такую связку не доводилось настраивать
                                      nginx или лайти для HTTP

                                      да здесь это, на мой взгляд, вообще не принципиально
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      а зачем каждый раз перегружать меню? так часто обовляется?
                                      include pxelinux.cfg\fedora.conf
                                      include pxelinux.cfg\freebsd.conf
                                      include pxelinux.cfg\solaris.conf


                                      а внутри что то вроде
                                      menu begin FreeBSD MFS AMD64
                                      menu title FreeBSD MFS AMD64
                                      label FreeBSD 10.0 MFS (root:mfsroot)
                                      kernel memdisk
                                      append initrd=iso/FreeBSD/mfsbsd-se-10.0-RELEASE-amd64.iso iso raw

                                      label Back
                                      menu EXIT
                                      menu end
                                        +1
                                        Нет, не часто.
                                        Просто при таком конфиге меню более логично разделено на подпункты.
                                        0
                                        Спойлер для тех у кого DHCP на Cisco —
                                        Параметры DHCP
                                        network <ip сети> <маска>
                                        ip dhcp pool <Имя пула>
                                        bootfile \srv\tftp\pxelinux.0
                                        next-server <IP сервера tftp>
                                        default-router <Шлюз>
                                        option 66 ascii «Имя сервера»
                                        dns-server <DNS сервера>
                                        option 150 <IP сервера tftp>
                                        domain-name <доменное имя>
                                          0
                                          Поправочка, bootfile pxelinux.0
                                            +1
                                            Благодарю!
                                            Внес дополнение в статью.
                                            0
                                            livecds

                                            PROMPT 0
                                            UI vesavesamenu.c32


                                            а по какой причине может не подгружаться картинка? делаю 640*480, jpg
                                              0
                                              Проверьте в какой директории лежит изображение (Должна лежать в корне /srv/tftp, если вы делали по этому ману), выставтье права на поиск\чтение для всех на этот файл и перезагрузите tftp сервис.
                                                +1
                                                Опечатку в статье поправил.
                                                Касаемо картинки.
                                                Проверьте права на файл(чтение должно быть разрешено всем), файл должен лежать в /srv/tftp
                                                +1
                                                Есть вопрос по DHCP. У нас в сети уже есть DHCP сервер на Win Server 2003, и не хотелось бы заводить второй. Достаточно ли будет если мы на уже имеющемся сервере DHCP укажем необходимые опции:

                                                Option No	                   Option Name	                             Example Value
                                                17	                            Root Path	                             10.0.10.1:/srv/tftp/
                                                66	                            Boot Server Host Name                    SERVER_NAME
                                                67	                            Bootfile Name	                     pxelinux.0
                                                

                                                Будет ли такой вариант работать?
                                                0
                                                Спасибо большое, статья очень годная, давно уже подумываю себе такую красоту соорудить
                                                  0
                                                  gpxelinux кстати умеет по http грузить, что намного быстрее, чем по tftp (если, допустим, iso образы грузить, или образы фс).
                                                  0
                                                  Как быть если у меня в сети уже есть PXE/dhcp/tftp сервер, который раздает образы для тонких клиентов ( wtware ). можно ли модифицировать загрузчик таким образом чтобы по таймауту скажем в 5 секунд загружался образ для Тк, а в случае если в течение 5 сек была нажата any key появлялось меню с вариантами загрузки?
                                                    0
                                                    С ходу могу предложить только вынесение в отдельный VLAN сервера со сборкой из статьи и переводить нужную машину в этот VLAN при необходимости загрузить что-то с него.
                                                    Т.е. Ваш сервер в одном VLAN, сервер из статьи в другом.
                                                    0
                                                    продолжением темы может быть создание образа wim без wds
                                                      +1
                                                      У сборки в целом только 1 недостаток. всё заточено под IP — 10.0.10.0
                                                      в версии установки на свой сервер, очень быстро всё развернул — спасибо.
                                                      всего раз 15 поправил IP.
                                                      а вот когда попытался поставить винду, тут сюрприз — надо патчить winpe.wim -для винды настройки вшиты туда.
                                                        0
                                                        Аналогично. Что же делать?
                                                          0
                                                          к сожалению патчить файл winpe.wim — не помогает.
                                                          есть нормальная инструкция по сборке (в статье). нужно Винду, и провести пляски с изменением startnet.cmd

                                                          На будущее автору придумал такой вариант:
                                                          положить файл startnet.cmd на сервер, рядом с образами дисков. а в самом winpe.wim, сделать другой файл, который при запуске будет просить ip сервера, который примаунтить. (и например по умолчанию считать что это шлюз)
                                                          0
                                                          IP из конфигов меняется одной командой:
                                                          sed -ri 's/10.0.10.1/192.168.1.1/g' ./*
                                                          например
                                                          root@pxe:~# cd /srv/tftp/pxelinux.cfg/
                                                          root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 10.0.10.1 ./
                                                          ./vmware
                                                          ./livecds
                                                          ./du
                                                          root@pxe:/srv/tftp/pxelinux.cfg# sed -ri 's/10.0.10.1/192.168.1.1/g' ./*
                                                          root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 10.0.10.1 ./
                                                          root@pxe:/srv/tftp/pxelinux.cfg# grep -rl 192.168.1.1 ./
                                                          ./vmware
                                                          ./livecds
                                                          ./du

                                                          касаемо подготовки Windows, смотрите статьи:
                                                          habrahabr.ru/company/serverclub/blog/213007/
                                                          unattendedxp.com/articles/pxelinux/prep_files_windows_7_vista.shtml
                                                          0
                                                          В статье есть ссылка на другую статью, где описано как готовить winpe.wim под ваши реалии.
                                                          Да и вообще, в варианте winpe.wim из статьи есть пункт(1) — ничего не делай, я сделаю все сам.
                                                            0
                                                            А есть ли какое либо ПО для лёгкого монтирования /? Через лайв последней убунты у меня ничего не получилось.
                                                              0
                                                              Да там по сути бизибокса и grub2 достаточно
                                                              +2
                                                              Немного оживлю старую, но актуальную, тему.

                                                              Внимание! Сразу скажу что я не анализировал глубоко работу gPXE (например, я не проверил действительно ли все ресурсы теперь грузятся по http или ускорение вышло благодаря замене обычного PXE на gPXE), но решил проблемы скорости, критичные для меня лично. Пообщавшись со знакомыми, которым помогли мои твики, решил написать этот мини-пост.

                                                              Попробовал использовать данный мануал на стареньком нетбуке (его удобно носить как мобильного доктора, а с твиками ниже он превращается в тот известный бокс от Zalman, да еще и с шифрованием!), но в процессе несколько раз наступил на грабли неприемлемой скорости загрузки, особенно iso-образов.
                                                              Как решал? Переключился на использование gPXE. В том же архиве, syslinux-4.02.tar.gz, берем дополнительно директорию gpexe и копируем из нее в наш корень /srv/tftp файл gpxelinux.0

                                                              Но этого недостаточно! Теперь нам нужно передать DHCP серверу что мы желаем грузиться быстро и по http. Редактируем файл /etc/dhcp/dhcpd.conf:
                                                              Перед блоком shared-networks добавляем
                                                              option space pxelinux;
                                                              option pxelinux.magic code 208 = string;
                                                              option pxelinux.configfile code 209 = text;
                                                              option pxelinux.pathprefix code 210 = text;

                                                              Сам блок меняем на такой, учтите что хабр заменил двойные кавычки
                                                              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»;
                                                              filename «gpxelinux.0»;
                                                              next-server 10.0.10.1;
                                                              option root-path «10.0.10.1:/srv/tftp/»;
                                                              option pxelinux.configfile «pxelinux.cfg/default»;
                                                              option pxelinux.pathprefix «10.0.10.1/srv/tftp»;
                                                              vendor-option-space pxelinux;
                                                              }

                                                              Перезапускаем сервис: /etc/init.d/isc-dhcp-server restart

                                                              В принципе, этого уже достаточно. http префикс должен работать на всех сборках, исошках и т.п.
                                                              А скорость вырастает с неприличных ~44 кб/сек до 11 Мб/сек! Тестировал на десятках серверов Dell и HP, ноутбуках Lenovo, Dell, Acer, Samsung, включая старые с IDE винтами. Загрузка работала превосходно.

                                                              Я некоторое время бился с двумя необходимыми мне программами — Acronis True Image и ESXi инсталлятором.
                                                              Немного вайна
                                                              Обе они имеются в своих iso (по непонятной мне причине метод загрузки ESXi через распакованные файлы не работает с http, точнее работать-то работает, но после изначально быстрой загрузки переключается на ~44 кб/сек скорость, я плюнул на плюшки от своего ks.cfg и разместил iso файл, заодно и версию обновил на 5.5.0 update03 — скорее всего можно ks.cfg вкрутить в исошку, так что кому важно — дерзайте).

                                                              Акронис из-за своего размера не помещался в оперативную память, решается добавлением mem=1536mb
                                                              ESXi же превосходно работает без доп.настроек, хотя я все равно прописал его с полными путями (должно работать и без них, как акронис, просто не успел проверить).
                                                              Пункты меню
                                                              LABEL VMware-5-5-u3-http-iso
                                                              KERNEL 10.0.10.1/srv/tftp/memdisk
                                                              APPEND iso initrd=http://10.0.10.1/srv/tftp/vmw/5.5.3.iso

                                                              LABEL VMware-5-5-u3-iso
                                                              KERNEL memdisk
                                                              APPEND iso initrd=vmw/5.5.3.iso

                                                              LABEL Acronis2015
                                                              MENU LABEL Acronis 2015 (1536mb)
                                                              KERNEL memdisk
                                                              APPEND iso initrd=acronis/acronis.iso mem=1536mb

                                                              В целом, с включением gPXE стало возможным указывать не относительные пути к файлам, а их URL.
                                                              Пример
                                                              Вместо:
                                                              APPEND iso initrd=acronis/acronis.iso
                                                              Можно так:
                                                              APPEND iso initrd=http://10.0.10.1/srv/tftp/acronis/acronis.iso
                                                              Хотя в целом это overkill, ведь сейчас, как я понял, все ресурсы изначально грузятся по http за счет глобального префикса (помните, мы указали его в DHCP?).

                                                              Рекомендую избавиться от тяжелого апача и использовать православный nginx. Все что нужно:
                                                              К стоковому /etc/nginx/sites-available/default добавить такой location (не надо бояться root /;)
                                                              location /srv/tftp
                                                              {
                                                              root /;
                                                              error_page 404 10.0.10.1/srv/tftp/pxelinux.cfg/default;
                                                              }
                                                                –1
                                                                замечательное дополнение!
                                                                  0
                                                                  А не могли бы подсказать по настройке префикса в Windows DHCP? У меня при прямом указании через INITRD http://.. грузится по http. Но без этого по тфтп (сужу по секундомеру). Сделал в windows dhcp «Set predefined option» там создал опцию pxelinux.configfile и pxelinux.pathprefix. Типа text нет в списке выбора, взял string [arial], может в этом дело. Назначил данный код, но видимо этих действий не хватает. Уже попробовал и pxelinux.magic задать. Также пробовал vendor class создавать pxelinux и в нем определять эти опции.
                                                                    0
                                                                    Дополняю свои наблюдения. Пришлось ознакомится с отловом DHCP ответов. Смотрел через Wireshark и tcpdump|dhcpdump. При создании опций 209 210 и даже 252 из руководства эти опции не отображаются в ответах DHCP сервера. При этом есть ряд неопределнных опций 128...135 без названия и данных. Если создать предопределенную опцию с этим кодом (от 128 до 135) то она появляется в ответах, в Wireshark и dhcpdump. Пока я могу сделать только 3 возможных вывода:
                                                                    1. Ограничения Windows 2012R2
                                                                    2. Ограничение декодирования dhcpdump, wireshark
                                                                    3. Проблема в DHCP Relay(хотя не должно быть никаких изменений

                                                                    На данный момент даже не знаю что и думать. В ближайшее время планирую сделать такую же сборку в виртуалке на сервисном ноутбуке с DHCPd. Вот и сравню выводы Wireshark'а.

                                                                    Кстати вопрос в догонку, при отдаче контента через NGINX вместо Apache получили ли какой нибудь прирост?
                                                                      0
                                                                      По Nginx — он просто легче. Статику в рамках одной машины и одного соединения и апач нормально отдает, но он тяжелый, а nginx легенький, как пушинка. И это не тот случай когда Nginx не пушка — когда нужно, nginx'ом не то что воробьев, ворон гонять можно :)

                                                                      Кстати, нашел старый компьютер на ASRock, где встроенный PXE не поддерживает gPXE и скорость печальная, как обычно. На брендовых материнках и ноутбуках/серверах, даже старых, все нормально.

                                                                      А по DHCP на Windows не подскажу, я чистейшей воды линуксоид, хоть и работаю время от времени с Windows.
                                                                        0
                                                                        Тестил на Asus'ах под S478 — заработало. Разницы в скорости не заметил в гостевых машинах VMWare ESXi, а с виртуальным адаптером VMXNET3 gpxe не заработал, по http не мог загрузить образы :(
                                                                        Интересный еще момент, какие карточки использовать взамен сгоревших встроенных, чтоб была поддержка загрузки по сети. Есть D-link'и dge-528T (еще с распаянным отсеком под bootrom, сейчас пошли уже без распаянного). Только вот bootrom чипов к ним понятия не имею где достать. Итого в продаже кроме Intel PWLA не нашел других карт, которые были бы в полном комплекте для сетевой загрузки.
                                                                          0
                                                                          С тех пор тоже встретилась машинка (старая) которая не поддерживала gPXE, немного помучившись все таки поменял загрузчик на iPXE. Плюшек много, но синтаксис немного отличается, приходится постепенно переписывать старые пункты. Зато пока работает везде. Плюс можно прям средствами iPXE раздавать разным машинам разные конфиги
                                                                      +2
                                                                      Ссылки на торренты отчего-то протухли на дропбоксе, вот актуальные
                                                                      вся система
                                                                      только файлы
                                                                      ps
                                                                      в статье пока не могу изменить (
                                                                        0
                                                                        Требуется разрешение на доступ. :(
                                                                        0
                                                                        Не понял как в гуглдиске нормально расшариить, вот с яндекса
                                                                        только файлы — https://yadi.sk/d/eNc6IEB2qikrc
                                                                        вся система — https://yadi.sk/d/E4Zvwr9Zqikrk
                                                                          +3
                                                                          Ссылки на ресурсы не очень хорошо, они тоже умирают, лучше уж MAGNET:
                                                                          magnet:?xt=urn:btih:A9B86DBDD42D1EAA816F00E0D0496923834C989D — root_tftp_by_ServerClub.tgz
                                                                          magnet:?xt=urn:btih:ABE5C64FB7AE418D8FB6E5F001B7192AE3B1D529 — entire_system_pxe_boot_by_ServerClub.tgz
                                                                          0
                                                                          Разместить фото
                                                                          Ребят помогиде пожалуйста при попытке запустить установку windows вылезает вот такая ошибка что я делаю не так если можно объясните для тупых пожалуйста
                                                                            0
                                                                            забыл добавить дела всё как в статье
                                                                              0
                                                                              Проверяйте доступы на файлы windows, для всех должно быть право на чтение.
                                                                              Качали готовые сборки или сами делали по аналогии?
                                                                                0
                                                                                делал сам по аналогии доступ открыл полный на чтение и изменение всё равно не помогает
                                                                                  0
                                                                                  у меня получилось всё кроме виндовс
                                                                                –2
                                                                                ((((((((

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

                                                                                Самое читаемое