Установка и настройка инструментов, позволяющих использовать Debian систему в качестве источника PXE загрузки ОС (Linux, Windows и прочее.)

Автором завершена активная разработка страницы


20 мая 2012 г. из содержимого раздела удалён ряд материалов, публикация которых, по мнению одного из редакторов, недопустима из-за взаимодействия с проприетарным ПО.

31 мая 2012 г. удалённые материалы были восстановлены автором из-за бездействия уважаемого PavloRudyj, рассмотренного как безразличие к содержимому раздела.

В настоящий момент устраивающее всех решение на найдено и находится в стадии ожидания.

Уважаемый PavloRudyj! Прошу связаться со мной по e-mail для цивилизованного решения возникшего вопроса.


Наши опечатки и ошибки в статье можно править смело, нет необходимости сообщать об этом на почту, просьба соблюдать стилевое оформление страницы и использовать разделители разделов (серые линии различной толщины)

В указанных ниже программах есть масса дополнительных возможностей, поэтому если есть время и желание - проверяйте их работу и смело добавляйте сюда новые рецепты.



Теория процесса


Задача: запустить и\или установить ОС (Linux, Windows и прочее.) на компьютере с помощью сетевого подключения к выделенному Debian серверу.


Нам понадобятся:

На сервере Debian мы установим:

  1. Служба DHCP - будет выдавать настройки сети + информацию о том где искать загрузочные файлы и какой из них запускать первым (dhcp3-server, dnsmasq и пр.).

  2. Служба TFTP - будет раздавать загрузочные файлы на начальном этапе (dnsmasq, tftpd-hpa и пр.).

  3. Служба Syslinux обеспечит удобное меню для выбора ОС и опций её загрузки.

  4. Cлужба доступа к файлам - будет раздавать файлы на поздних этапах по протоколам SMB, NBD, HTTP, NFS и пр.

Ниже представлены, различные варианты ПО реализующие в себе один или несколько вышеуказанных инструментов. Необходимо выбрать лишь один


Общие настройки


DHCP сервер


Dnsmasq (1-й вариант)


Устанавливаем dnsmasq: - простую и функциональную утилиту способную работать и DHCP сервером . В примерах ниже рассматриваются примеры для домашнего роутера. Этот вариант лучше подходит для сервера "всё-в-одном"

aptitude install dnsmasq


Общие настройки


Делаем backup оригинального файла настроек

mv /etc/dnsmasq.conf /etc/dnsmasq.conf.BAK

Редактируем настройки

nano /etc/dnsmasq.conf

interface=eth0                                                  #Указываем сетевую карту
listen-address=192.168.0.1,127.0.0.1                            #Указываем адреса на которых слушаем запросы


DHCP настройки


Добавляем строки

nano /etc/dnsmasq.conf

dhcp-range=192.168.0.20,192.168.0.50,255.255.255.0,2h           #Указываем диапазон адресов, маску сети и время аренды адреса
dhcp-option=option:ntp-server,192.168.0.1                       #Указываем IP NTP сервера
dhcp-boot=pxelinux.0,gate.local,192.168.0.1                     #Указываем имя загрузочного файла,имя и IP TFTP сервера
dhcp-leasefile=/var/log/dnsmasq.leases                          #Аренду адреса логируем
dhcp-host=00:14:D1:C9:53:B4,192.168.0.15,infinite               #Жёсткая привязка mac адреса к IP


Кеширование DNS (для RIS не обязательно)


Кешировани dns полезно, если сервер раздаёт доступ в интернет

Добавляем строки

nano /etc/dnsmasq.conf

domain=home                                                             #чтобы работал локальный DDNS
domain-needed                                                           #никогда не пересылать адреса без доменной части
bogus-priv                                                              #никогда не пересылать адреса из немаршрутизируемого пространства
strict-order                                                         #пересылать запросы, с первого и по порядку
address=/gate.local/192.168.0.1                                         #DNS запись о нашем сервере     
local=/home/                                                            #Не помню зачем, но нужно
#log-queries                                                            #Лог запросов не ведём

Прописываем dnsmasq в сетевых настройках:

Если адресация статическая? то добавляем строку в начало:

nano /etc/resolv.conf

nameserver 127.0.0.1
nameserver первый DNS сервер провайдера
nameserver второй DNS сервер провайдера

Если динамическая то добавляем строку между :

nano /etc/dhcp/dhclient.conf

#supersede domain-name-servers 127.1.2.3;
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,

и обновляем настройки dhcp от провайдера

/etc/init.d/networking restart


Применение настроек


Перезапускаем dnsmasq для применения новых настроек

/etc/init.d/dnsmasq restart


Isc-dhcp-server (2-й вариант)


Устанавливаем isc-dhcp-server: - популярный DHCP сервер, ставший стандартом де-факто для большинства UNIX систем . Рекомендую для использования на выделенном сервере, где требуется индивидуальный подход для каждого клиента в сети

aptitude install isc-dhcp-server

Редактируем настройки утилиты в файле /etc/dhcp3/dhcp.conf

# Указываем подсеть и маску сети
subnet 192.168.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
option domain-name-servers 192.168.0.1;
filename "startrom.0";
next-server 192.168.0.1;
# Привязываем mac адрес сетевой карты к её индивидуальным настройкам IP 
host net_install {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 192.168.0.20;}
}

Перезапускаем isc-dhcp-server для применения новых настроек

/etc/init.d/isc-dhcp-server restart


TFTP сервер


tftpd-hpa


Устанавливаем tftpd-hpa: - ТFTP сервер с поддержкой специфичных требований к PXE. Пока что, это единственный известный инструмент позволяющий работать с идеологией именования файлов от Microsoft

aptitude install tftpd-hpa

Во время установки указываем путь к корневому каталогу с загрузочными файлами. Например /mnt/data/tftpboot

Запускаем подробную настройку

dpkg-reconfigure tftpd-hpa

* Учётную запись рекомендую не изменять.

* Корневой каталог был уже указан при установке, не меняем.

* Указываем IP системы, на котором tftpd-hpa будет слушать запросы, если сетевых карт несколько.

* Опции пока оставляем по-умолчанию.

Примечание: TFTP сервер способен отдавать содержимое только указанного корневого каталога.


Syslinux


Базовая настройка


Устанавливаем syslinux: - набор загрузчиков ядра Linux, среди которых есть и вариант для PXE.

aptitude install syslinux

Копируем PXE загрузчик в корневую директорию TFTP сервера

cp /usr/lib/syslinux/pxelinux.0 /mnt/data/tftpboot/

Создаём папку для хранения служебных файлов pxelinux

mkdir /mnt/data/tftpboot/pxelinux.cfg

Копируем бинарный файл меню в папку pxelinux.cfg

cp /usr/lib/syslinux/menu.c32 /mnt/data/tftpboot/pxelinux.cfg/

Создаем конфигурационный файл:

nano /mnt/data/tftpboot/pxelinux.cfg/default

default pxelinux.cfg/menu.c32
menu title Boot menu

label bootHDD
        menu label Boot from с HDD
        #menu default
        localboot 0x0

Этих настроек достаточно чтобы загрузиться по сети и запустить локально установленную ОС.


Расширенная настройка


Графическое меню


Копируем бинарный файл vesa-меню в папку pxelinux.cfg

cp /usr/lib/syslinux/vesamenu.c32 /mnt/data/tftpboot/pxelinux.cfg/

Для размещения фоновой картинки нужно скопировать 8 битное изображение с разрешением меню (например 800х600) в формате png в папку pxelinux.cfg.

Указываем новый бинарник меню, фоновую картинку, разрешение экрана и количество строк:

nano /mnt/data/tftpboot/pxelinux.cfg/default"

#default pxelinux.cfg/menu.c32
default pxelinux.cfg/vesamenu.c32
menu background pxelinux.cfg/splash.png
menu resolution 800 600
menu rows 25


Таймаут выполнения


Опция TIMEOUT задаёт время ожидания командной строки перед автоматической загрузкой в условных единицах = 0,1 с. Таймаут отключается как только пользователь нажимает какую-либо клавишу. Нулевой таймаут вовсе отключает эту функцию (по-умолчанию).

Опция TOTALTIMEOUT задаёт время ожидания перед автоматической загрузкой и не отменяется нажатием клавиши.

Указываем время выполнения пункта меню по-умолчанию (1 и 5 минут)

nano /mnt/data/tftpboot/pxelinux.cfg/default

menu autoboot Auto boot # s.
timeout 600
totaltimeout 3000


Локализация


Копируем кириллический шрифт в папку pxelinux.cfg (должен быть установлен пакет console-cyrillic)

cp /usr/share/console-cyrillic/alt-sans-8x16.psf /mnt/data/tftpboot/pxelinux.cfg/

Делаем копию конфигурационного файла

cp /mnt/data/tftpboot/pxelinux.cfg/default /mnt/data/tftpboot/pxelinux.cfg/defaultUTF

Указываем шрифт и переводим английские названия пунктов меню на Русский язык

nano /mnt/data/tftpboot/pxelinux.cfg/defaultUTF

font pxelinux.cfg/alt-sans-8x16.psf
#menu title Boot menu
menu title Загрузочное меню
...

Конвертируем конфигурационный файл в CP866

iconv -f UTF8 -t CP866 /mnt/data/tftpboot/pxelinux.cfg/defaultUTF -o /mnt/data/tftpboot/pxelinux.cfg/default

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


Установка Windows XP


Подключение дистрибутива


Создаём общую папку для хранения базовых установочных файлов и папку для дистрибутива.

mkdir /mnt/data/tftpboot/winxp.
mkdir /mnt/data/tftpboot/winxp/distrib

Копируем в distrib cодержимое установочного диска.

Устанавливаем распаковщики cab файлов, переходим в winxp и извлекаем загрузчики.

aptitude install cabextract unzip
cd /mnt/data/tftpboot/winxp
cabextract /mnt/data/tftpboot/winxp/distrib/I386/SETUPLDR.EX_
mv setupldr.exe ntldr
cabextract /mnt/data/tftpboot/winxp/distrib/I386/STARTROM.N1_
mv startrom.n12 startrom.0
cp /mnt/data/tftpboot/winxp/distrib/I386/NTDETECT.COM ntdetect.com

Для русской версии Windows XP копируем кириллический шрифт

cp /mnt/data/tftpboot/winxp/distrib/BOOTFONT.BIN /mnt/data/tftpboot/winxp/bootfont.bin


Расшаривание по сети


Устанавливаем Samba и выставляем базовые настройки

aptitude install samba
dpkg-reconfigure samba
dpkg-reconfigure samba-common

Выставляем дополнительные настройки в файле /etc/samba/smb.conf

# nano /etc/samba/smb.conf

[global]
# сначала производится вход с локальными логином и паролем клиента
security = user
# Если будет получен неправильный пароль, то клиенту будет дан гостевой доступ.
map to guest = Bad Password

[winxp]
path = /mnt/data/tftpboot/winxp/
browsable = yes
read only = yes
guest ok = yes

Перезапускаем samba для применения новых настроек

/etc/init.d/samba restart


Обработка сетевых драйверов


Во время установки Windows XP должна получить информацию, какой драйвер для сетевой платы она должна использовать. Эту информация предоставляет служба BINL. Эта программа написана на языке Python и поэтому, необходимо еще установить интерпретатор этого языка.

Устанавливаем распаковщик zip файлов и Python 2.6

aptitude install unzip python-minimal

Загружаем и распаковываем BINL сервер + сборник дров к самым популярным сетевым картам.

cd /usr/local/bin
wget http://oss.netfarm.it/guides/ris-linux-0.4.tar.gz
tar -xvf ris-linux-0.4.tar.gz
rm ris-linux-0.4.tar.gz
cd /mnt/data/tftpboot/winxp 
wget http://unattendedxp.com/articles/wxpris/files/lan-drivers.zip
unzip lan-drivers.zip -d drv
rm lan-drivers.zip

Добавить новые драйвера можно (и нужно) самостоятельно. Для этого надо извлечь из установочных архивов inf и sys файлы в папки drv и drv/sys соответственно.

Создадим скрипт запуска BINL: * Формирует актуальную базу драйверов. * Запускает сервер

nano /usr/local/bin/binl.sh

#!/bin/sh

cd /usr/local/bin/ris-linux-0.4
./infparser.py /mnt/data/tftpboot/winxp/drv/
./binlsrv.py

Делаем исполняемым и запускаем сервер.

chmod +x /usr/local/bin/binl.sh
/usr/local/bin/binl.sh


Настройка установщика


Создаём файл конфигурации winnt.sif

nano /mnt/data/tftpboot/winxp/winnt.sif

[Data]
    MsDosInitiated="1"
    floppyless="1"
    LocalSourceOnCD=1
    UnattendedInstall="Yes"
    AutomaticUpdates="Yes"
    OriSrc="\\ip_сервера\winxp\distrib\i386"
    OriTyp="4"
    
[SetupData]
   OsLoadOptions = "/noguiboot /fastdetect"
   SetupSourceDevice = "\Device\LanmanRedirector\ip_сервера\winxp\distrib"

[RemoteInstall]
   Repartition = No
   UseWholeDisk = No

[Unattended]
    AutoActivate=No
    FileSystem=*
    DUDisable = Yes
    CrashDumpSetting=0
    DriverSigningPolicy=Ignore
    FactoryMode=No
    UnattendMode=FullUnattended
    UnattendSwitch="Yes"
    Repartition=No      
    TargetPath=\WINDOWS
    OemSkipEula=Yes
    WaitForReboot=No
    NtUpgrade=No
    OverwriteOemFilesOnUpgrade=No
    OEMPreinstall=Yes
;   OemPnPDriversPath="install\drivers\sisraid;install\drivers\atisb7xx"
    DriverSigningPolicy=Ignore

[GuiUnattended]
;   EncryptedAdminPassword=Yes
    OEMSkipRegional=1
;AdminPassword=add2f3e23a77f2aaaad3b435b51404eea3c3dde4000a38b5373112c243ee6cee
    AutoLogon=Yes
    AutoLogonCount=1
    TimeZone=145
    OemSkipWelcome=1

[UserData]
    FullName="_"
    OrgName="_"
    ComputerName=host
    ProductKey=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

[Identification]
    JoinDomain=GSPK

[Networking]
    InstallDefaultComponents=No

[Display]
    BitsPerPel=16
    Xresolution=1024
    YResolution=768
    Vrefresh=75

[GuiRunOnce]
;  "regedit /s %systemdrive%\install\tweak.reg"
;  "regedit /s %systemdrive%\install\current.reg"
;  "%systemdrive%\install\hide.cmd"

[TapiLocation]
    CountryCode=7
    Dialing=Pulse
    AreaCode=495

[RegionalSettings]
    LanguageGroup=1,5
    SystemLocale=00000419
    UserLocale=00000419
    InputLocale=0409:00000409,0419:00000419

[Branding]
    BrandIEUsingUnattended=Yes

[URL]
    Home_Page=www.yandex.ru

[Proxy]
    Proxy_Enable=0
    Use_Same_Proxy=0

[NetAdapters]
    Adapter1=params.Adapter1

[NetClients]
    MS_MSClient=params.MS_MSClient

[NetServices]
    MS_SERVER=params.MS_SERVER

[NetProtocols]
    MS_TCPIP=params.MS_TCPIP

[params.MS_TCPIP]
    DNS=Yes
    UseDomainNameDevolution=No
    EnableLMHosts=Yes
    AdapterSections=params.MS_TCPIP.Adapter1

[params.MS_TCPIP.Adapter1]
    SpecificTo=Adapter1
    DHCP=Yes
    WINS=No
    NetBIOSOptions=0

[TerminalServices]
    AllowConnections=0

[PCHealth]
RA_AllowToGetHelp=0

[Components]
AccessOpt=Off
charmap=Off
clipbook=Off
freecell=Off
hearts=Off
IEAccess=Off
media_clips=Off
minesweeper=Off
mousepoint=Off
msnexplr=Off
mswordpad=Off
netoc=Off
OEAccess=Off
pinball=Off
Pop3Srv=Off
rec=Off
rootautoupdate=Off
templates=Off
zonegames=Off
Chat=Off
Deskpaper=Off
IEAccess=Off
Media_utopia=Off
Mousepoint=Off
Msnexplr=Off
OEAccess=Off
Templates=Off
WMAccess=Off
WMPOCM=Off
Wms=Off
Wms_admin_asp=Off
Wms_admin_mmc=Off
Wms_isapi=Off
Wms_server=Off


Настройка syslinux


Добавляем в основной конфигурационный файл ссылку на Windows XP

nano /mnt/data/tftpboot/pxelinux.cfg/default

label Windows XP Professional SP3 RU network install
  kernel winxp/startrom.0


Решение проблем и настройка переназначения адресов


На текущий момент останутся следующе пробелмы.

Проблема 1. Согласно нашей файловой иерархии, установочные файлы ntldr, BOOTFONT.BIN, ntdetect.com и winnt.sif НЕ лежат в корневой папке TFTP сервера, а значит установщик startrom.0 их не получит. А должен искать в папке winxp.

Проблема 2. Согласно нашей файловой иерархии, sys файлы сетевых драйверов НЕ лежат в \distrib\i386, а значит установщик startrom.0 их не получит. А должен искать в папке winxp/drv/sys.

Проблема 3. Путь к файлу в Windows разделяется "/", а в Линуксе "\". Пути изначально неверные. Пути должны содержать именно "\".

Проблема 4. Windows при обработке файлов НЕ обращает внимание на регистр букв, а вот Linux обращает. Из-за этого Linux не может отдать файл на запрос типа BOOT.dll, когда по-факту нужно отдать BOOT.DLL. Имена всех запросов должны быть в маленьком регистре.

Проблема 5. Согласно нашей файловой иерархии, прочие установочные файлы НЕ лежат в папке distrib, а значит установщик startrom.0 их не получит. А должен искать в папке winxp/distrib.

Для решения этих проблем создадим правило переназначения имён файлов. Этим мы заставим наш tftp-hpa сервер преобразовывать поступающие от startrom.0 строки запросов, в "правильные", соответствующие нашей файловой иерархии и правилам именования.

Единственный известный мне TFTP сервер, который способен понимать такие правила - tftp-hpa.

Если вы его ещё не установили, то удаляем/отключаем любой другой tftp сервер и инсталлируем tftp-hpa

Сначала создадим и откорректируем такое правило:

nano /mnt/data/tftpboot/winxp/tftpd.rules

r ntldr /winxp/ntldr
r ntdetect.com /winxp/ntdetect.com
r winnt.sif /winxp/winnt.sif
r BOOTFONT.BIN /winxp/BOOTFONT.BIN

rg \\ /
# Переводим имена запрашиваемых файлов в нижний регистр
r .* \L\0

r distrib/i386 winxp/distrib/i386 

r /winxp/distrib/i386/vmxnet.sys /winxp/drv/sys/vmxnet.sys
r /winxp/distrib/i386/_e100b325.sys /winxp/drv/sys/_e100b325.sys
r /winxp/distrib/i386/atl01_xp.sys /winxp/drv/sys/atl01_xp.sys
r /winxp/distrib/i386/b06nd51x.sys /winxp/drv/sys/b06nd51x.sys
r /winxp/distrib/i386/b57xp32.sys /winxp/drv/sys/b57xp32.sys
r /winxp/distrib/i386/e1e5132.sys /winxp/drv/sys/e1e5132.sys
r /winxp/distrib/i386/E1000325.sys /winxp/drv/sys/E1000325.sys
r /winxp/distrib/i386/el2k_xp.sys /winxp/drv/sys/el2k_xp.sys
r /winxp/distrib/i386/fetnd5bv.sys /winxp/drv/sys/fetnd5bv.sys
r /winxp/distrib/i386/l251x86.sys /winxp/drv/sys/l251x86.sys
r /winxp/distrib/i386/nvefd2k.sys /winxp/drv/sys/nvefd2k.sys
r /winxp/distrib/i386/nvnrm.sys /winxp/drv/sys/nvnrm.sys
r /winxp/distrib/i386/Rtenicxp.sys /winxp/drv/sys/rtenicxp.sys
r /winxp/distrib/i386/Rtnicxp.sys /winxp/drv/sys/rtnicxp.sys
r /winxp/distrib/i386/vmxnet.sys /winxp/drv/sys/vmxnet.sys
r /winxp/distrib/i386/yk51x86.sys /winxp/drv/sys/yk51x86.sys

Далее для решения проблемы 4, необходимо переименовать всех файлы в папке distrib в нижний регистр.

Создаём скрипт переименования.

nano /usr/local/bin/rn.sh

#!/bin/sh

if test "x$1" = x; then
    exit -1
fi

cd "$1" || exit -1
for n in `find -maxdepth 1 | tail -n +2`; do
    x=`echo "$n" | tr "[:upper:]" "[:lower:]"`
    if test "x$n" != "x$x"; then
        mv -v "$n" "$x"
    fi
done

for n in `find -maxdepth 1 -type d | tail -n +2`; do
    echo "$0" "$n"
    "$0" "$n"
done 

Делаем исполняемым и запускаем переименование

chmod +x /usr/local/bin/rn.sh
/usr/local/bin/rn.sh /mnt/data/tftpboot/winxp/distrib

И наконец, нужно указать tftp-hpa вновь созданный файл правил.

Указываем новые параметры для tftp-hpa

dpkg-reconfigure tftpd-hpa 

В последнем окне "Дополнительные параметры сервера TFTP" выставляем опции

--secure -m /mnt/data/tftpboot/winxp/tftpd.rules -vvv

"-vvv" означает очень подробный вывод в лог "/var/log/syslog", "/var/log/daemon.log". Все пути в логах указываются относительно корневой папки tftp сервера (например /mnt/data/tftpboot/). Если проблем не наблюдается, то опцию рекомендую отключить.

Теперь всё должно работать.


Установка Debian 6


Размещение дистрибутива


Ищем на ftp://ftp.debian.org/debian/dists/ нужную версию дистрибутива.

Создаём временную и основную папки для хранения дистрибутива сетевой установки. Например так:

mkdir -p /mnt/data/tftpboot/temp
mkdir -p /mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text

Загружаем его во временную папку.

Например так:

wget -P /mnt/data/tftpboot/temp ftp://ftp.debian.org/debian/dists/squeeze/main/installer-amd64/20110106+squeeze3/images/netboot/netboot.tar.gz

Распаковываем архив.

cd /mnt/data/tftpboot/temp
tar -xvz -f netboot.tar.gz

Перемещаем нужные файлы и прибираемся за собой

mv /mnt/data/tftpboot/temp/debian-installer/amd64/* /mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text/
cd .. && rm -r temp


Замена путей к файлам


Этот дистрибутив заранее подготовлен только для собственной установки, поэтому нам нужно внедрить его в нашу схему размещения дистрибутивов.

Создаём скрипт замены путей в cfg файлах на соответствующие нашей файловой иерархии.

nano /usr/local/bin/rpl_text.sh

#!/bin/sh

sour='debian-installer/amd64/boot-screens/'
targ='debian/amd64/20110106+squeeze3_text/boot-screens/'
dirr='/mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text/boot-screens/'
grep --color -oiIrn $sour $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='debian-installer/amd64/linux'
targ='debian/amd64/20110106+squeeze3_text/linux'
dirr='/mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text/boot-screens/'
grep --color -oiIrn $sour $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done 

sour='debian-installer/amd64/initrd.gz'
targ='debian/amd64/20110106+squeeze3_text/initrd.gz'
dirr='/mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text/boot-screens/'
grep --color -oiIrn $sour $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done  

Делаем исполняемым и запускаем переименование

chmod +x /usr/local/bin/rpl_text.sh
/usr/local/bin/rpl_text.sh


Настройка syslinux


Добавляем в основной конфигурационный файл ссылку на дистрибутив

nano /mnt/data/tftpboot/pxelinux.cfg/default

menu begin Debian
        menu title Debian network install

label Debian squeeze amd64 text
        kernel debian/amd64/20110106+squeeze3_text/boot-screens/vesamenu.c32
        config debian/amd64/20110106+squeeze3_text/boot-screens/syslinux.cfg

label mainmenu
                menu label ^Back..
                menu exit
menu end

Теперь будет работать 8)


Автоматизация установки


Внимание! Автоматическая разметка разделов ЖД не рассматривается, т.е. вопросы от установщика Debian всё же будут.

Устанавливаем систему в экспертном режиме на типовой машине

Устанавливаем на этом компьютере утилиты для работы с БД debconf и системной БД пользователй

aptitude install debconf-utils whois

Формируем MD5 хеш пароля администратора

printf "наш_пароль" | mkpasswd -s -m md5

Выгружаем все выбранные при установке ответы в файл

debconf-get-selections --installer > /preseed_full.cfg

В preseed_full.cfg содержится много лишней информации, внимательно ищем знакомые вопросы и ответы.

Затем на RIS сервере создаём свой, новый файл ответов.

nano /mnt/data/tftpboot/debian/amd64/20110106+squeeze3_text/preseed.cfg

# Указываем зеркало 
d-i mirror/country string manual
d-i mirror/http/hostname string mirror.yandex.ru
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# Загружаем дополнительные модули установщика
d-i     anna/choose_modules     multiselect     cfdisk-udeb, crypto-dm-modules-2.6.32-5-amd64-di, crypto-modules-2.6.32-5-amd64-di, lvmcfg, ntfs-modules-2.6.32-5-amd64-di, parted-udeb, partman-reiserfs, qnx4-modules-2.6.32-5-amd64-di, reiserfs-modules-2.6.32-5-amd64-di, speakup-modules-2.6.32-5-amd64-di, squashfs-modules-2.6.32-5-amd64-di

# Устанавливаемая версия.
d-i mirror/suite string stable

# Включить поддержку теневых (shadow) паролей?
user-setup-udeb passwd/shadow   boolean true

# ------------------Настройка пользователей - только root -----------------
# Разрешаем вход в систему пользователю root
user-setup-udeb passwd/root-login       boolean true
# Других пользователей не создаём
user-setup-udeb passwd/make-user        boolean false
# Указываем MD5 хеш пароль администратора
d-i passwd/root-password-crypted password MD5хеш
# ----------Вариант настройки пользователей - только Ivan с sudo ----------
# Разрешить вход в систему суперпользователем root?
#user-setup-udeb        passwd/root-login       boolean false
# Создать учётную запись обычного пользователя?
#user-setup-udeb        passwd/make-user        boolean true
# Введите полное имя нового пользователя:
#user-setup-udeb        passwd/user-fullname    string  Petrov Ivan
# Имя вашей учётной записи:
#user-setup-udeb        passwd/username string  ivan
# Пароль обычного пользователя
#d-i passwd/user-password-crypted password md5-хэш
#---------------------------------------------------------------------------
# По-умолчанию рекомендуемые пакеты не устанавливаем
d-i base-installer/install-recommends boolean false
# Указываем ядро
bootstrap-base  base-installer/kernel/image     select  linux-image-2.6.32-5-amd64
# Так переключаем раскладки
d-i     keyboard-configuration/toggle   select  Alt+Shift
# Временная зона
tzsetup-udeb    time/zone       select  Europe/Moscow
# Страна
tzsetup-udeb    tzsetup/country/RU      select  Europe/Moscow

# Разрешаем все источники пакетов
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true
d-i apt-setup/security-updates boolean true
        
# Система чистая - никаких сборок пакетов. Что нужно поставим сами.
tasksel tasksel/first multiselect
# Дополнительно устанавливаем нужные нам пакеты
d-i pkgsel/include string console-cyrillic localepurge mc screen htop less hwinfo lshw dnsutils
# Отвечаем на вопросы console-cyrillic
d-i     console-cyrillic/switch select  Нет временного переключателя
d-i     console-cyrillic/toggle select  Alt+Shift
# Отвечаем на вопросы localepurge
d-i     localepurge/nopurge     multiselect     en, en_US.UTF-8, ru, ru_RU.UTF-8
#Обновлять ли пакеты после debootstrap.
#d-i pkgsel/upgrade select safe-upgrade

# Не учавствуем в опросе популярности пакетов
popularity-contest popularity-contest/participate boolean false

# Слабо представляю, что зачем оно нужно, но ответ оставляем
dictionaries-common     dictionaries-common/default-wordlist    select  настройка символьных ссылок вручную
# Устанавливаем GRUB2 в MBR
grub-installer  grub-installer/only_debian      boolean true
#d-i grub-installer/bootdev  string (hd0,0)

# Добавляем опцию к параметрам запуска ядра
d-i debian-installer/add-kernel-opts string vga=788
# Сразу ребутаем систему после установки
d-i finish-install/reboot_in_progress note

Обновляем раздел Debian в основном конфигурационном файле syslinux

nano /mnt/data/tftpboot/pxelinux.cfg/default

label OEM
        menu label Debian squeeze amd64 text OEM install
        kernel debian/amd64/20110106+squeeze3_text/linux
        append vga=788 initrd=debian/amd64/20110106+squeeze3_text/initrd.gz preseed/url=tftp://10.108.167.93/debian/amd64/20110106+squeeze3_text/preseed.cfg hostname=host domain=local debian-installer/locale=ru_RU.UTF-8 console-keymaps-at/keymap=ru -- 


Запуск Systemrescuecd


Размещение дистрибутива


Создаём временные и основную папки для хранения дистрибутива .

mkdir -p /mnt/data/tftpboot/temp
mkdir -p /mnt/data/tftpboot/temp/mnt
mkdir -p /mnt/data/tftpboot/sysrescd/2.3.0/

Загружаем и монтируем образ диска

wget --no-check-certificate -P /mnt/data/tftpboot/temp https://sourceforge.net/projects/systemrescuecd/files/sysresccd-x86/2.3.0/systemrescuecd-x86-2.3.0.iso
mount -o loop /mnt/data/tftpboot/temp/systemrescuecd-x86-2.3.0.iso /mnt/data/tftpboot/temp/mnt

Перемещаем файлы в основную папку и прибираемся за собой

cp -R /mnt/data/tftpboot/temp/mnt/* /mnt/data/tftpboot/sysrescd/2.3.0/
umount /mnt/data/tftpboot/temp/mnt
rm -r /mnt/data/tftpboot/temp

По замыслу сборщиков дистрибутива, sysrescd изначально поддерживает TFTP,HTTP,NFS,NBD протоколы для запуска через сеть.

Далее рассмотрим вариант по протоколу NBD, т.к. он очень прост и НЕ требует более 400 Мб оперативной памяти на клиентском компьютере. Остальные варианты смотрим здесь

Устанавливаем NBD. Нам нужна 1 копия сервера на порту 2000. Экспортируемый файл "/mnt/data/tftpboot/sysrescd/2.3.0/sysrcd.dat"

aptitude install nbd-server
dpkg-reconfigure nbd-server


Замена путей к файлам


Sysrescd заранее подготовлен только для собственной установки, поэтому нам нужно внедрить его в нашу схему размещения дистрибутивов.

Создаём скрипт замены путей в cfg файлах на соответствующие нашей файловой иерархии.

nano /usr/local/bin/rpl_text.sh

#!/bin/sh

# бинарники syslinux

sour='vesamenu.c32'
targ='pxelinux.cfg/vesamenu.c32'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='kdbmap.c32'
targ='pxelinux.cfg/kdbmap.c32'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='memdisk'
targ='pxelinux.cfg/memdisk'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='chain.c32'
targ='pxelinux.cfg/chain.c32'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

# Ядра sysrescd 

sour='LINUX rescue'
targ='LINUX sysrescd/2.3.0/isolinux/rescue'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done 

sour='LINUX altker'
targ='LINUX sysrescd/2.3.0/isolinux/altker'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done 

# initram sysrescd

sour='INITRD initram.igz'
targ='INITRD sysrescd/2.3.0/isolinux/initram.igz'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

# Опции запуска sysrescd

sour='APPEND scandelay=1'
targ='APPEND nonm setkmap=ru scandelay=5 netboot=nbd://192.168.0.25:2000'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

# Бинарники floppy tools

sour='/bootdisk/'
targ='/sysrescd/2.3.0/bootdisk/'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='initrd=/ntpasswd/initrd.cgz,/ntpasswd/scsi.cgz'
targ='initrd=/sysrescd/2.3.0/ntpasswd/initrd.cgz,/sysrescd/2.3.0/ntpasswd/scsi.cgz'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

sour='/ntpasswd/vmlinuz'
targ='/sysrescd/2.3.0/ntpasswd/vmlinuz'
dirr='/mnt/data/tftpboot/sysrescd/2.3.0/isolinux/'
grep --color -oiIrn "$sour" $dirr | awk -F':' '{print $1, $2, $0}' |
while read file string all
        do
        what=$(echo "${all}" | cut -d: -f3-)
        sed -i -e "${string}s@${what}@${targ}@gi" "${file}"
done

Делаем исполняемым и запускаем переименование

chmod +x /usr/local/bin/rpl_text.sh
/usr/local/bin/rpl_text.sh


Настройка syslinux


Копируем дополнительные бинарные файлы syslinux в папку pxelinux.cfg

cp /usr/lib/syslinux/vesamenu.c32 /mnt/data/tftpboot/pxelinux.cfg/
cp /usr/lib/syslinux/chain.c32 /mnt/data/tftpboot/pxelinux.cfg/
cp /usr/lib/syslinux/kbdmap.c32 /mnt/data/tftpboot/pxelinux.cfg/
cp /usr/lib/syslinux/memdisk /mnt/data/tftpboot/pxelinux.cfg/

Добавляем в основной конфигурационный файл ссылку на дистрибутив

nano /mnt/data/tftpboot/pxelinux.cfg/default

label systemrescuecd-x86-2.3.0
        kernel pxelinux.cfg/vesamenu.c32
        config sysrescd/2.3.0/isolinux/isolinux.cfg

Не забудьте проверить открыты ли порты на сервере.

Теперь все пункты меню должны работать 8)


Запуск Acronis True Image Echo Enterprise Server


Создаём папку для хранения дистрибутива. Например так:

mkdir -p /mnt/data/tftpboot/acronis/tuees

Устанавливаем в среде Windows Acronis True Image Echo Enterprise Server Заходим в C:\Program Files\Acronis\?TrueImageEchoEnterpriseServer\BartPE\Files

Ищем 2 файла: kernel.dat и ramdisk.dat

Копируем их в папку /mnt/data/tftpboot/acronis/tuees

Переименовываем в kernel и ramdisk соответственно.

Добавляем в основной конфигурационный файл ссылку на дистрибутив

nano /mnt/data/tftpboot/pxelinux.cfg/default

menu begin Acronis
        menu title acronis utilites

label Acronis True Image Echo Enterprise
kernel /acronis/tu/kernel
append initrd=acronis/tu/ramdisk /s ramdisk_size=40000 quiet vga=791 

label mainmenu
                menu label ^Back..
                menu exit
menu end

Теперь будет работать. 8)


Запуск Windows PE