Сервер развертывания windows на linux

Preboot eXecution Environment (PXE) is a widely used protocol that enables a workstation to boot from the network rather than from a local hard drive. This is particularly useful in large-scale deployments where installing operating systems on multiple machines manually would be impractical. Configuring a PXE boot server on Ubuntu 20.04 for Windows deployment can streamline the process of setting up new computers in your network. This article walks through the necessary steps to set up a PXE Boot Server for Windows deployment.

Setting Up a PXE Boot Server for Windows Deployment on Ubuntu 20.04 image

Prerequisites

  • A machine running Ubuntu 20.04
  • Access to the internet
  • Windows installation media
  • Sufficient storage for the Windows installation files
  • Basic knowledge of Linux command line interface

Step 1: Installing Required Packages

First, we need to install the necessary software on the Ubuntu server. This includes a DHCP server, a TFTP server, and an NFS server.

sudo apt update
sudo apt install -y isc-dhcp-server tftpd-hpa nfs-kernel-server

Step 2: Configuring the DHCP Server

The DHCP server assigns IP addresses to clients in the network. Edit the DHCP configuration file to define the range of IP addresses and specify the PXE boot filename.

sudo nano /etc/dhcp/dhcpd.conf

Add the following configuration, adjusting the IP address range to fit your network:

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.20 192.168.1.30;
  option domain-name-servers ns1.example.org, ns2.example.org;
  option domain-name "example.org";
  option routers 192.168.1.1;
  option broadcast-address 192.168.1.255;
  default-lease-time 600;
  max-lease-time 7200;
  next-server 192.168.1.10;
  filename "pxelinux.0";
}

Step 3: Setting Up the TFTP Server

The TFTP server hosts the boot files needed by the PXE client. Configure the TFTP server by editing the default file.

sudo nano /etc/default/tftpd-hpa

Ensure the following lines are set in the file:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Step 4: Configuring the NFS Server

The NFS server will host the Windows installation files, allowing PXE clients to access them. Create a directory to store the files and add it to the NFS exports.

sudo mkdir -p /srv/nfs/win-install
sudo nano /etc/exports

Add the following line, granting access to your network:

/srv/nfs/win-install 192.168.1.0/24(ro,sync,no_subtree_check)

Export the shared directory and restart the NFS services:

sudo exportfs -a
sudo systemctl restart nfs-kernel-server

Step 5: Preparing the Windows Installation Files

Mount the Windows installation media and copy the contents to the NFS share.

sudo mount /dev/cdrom /mnt
sudo cp -r /mnt/* /srv/nfs/win-install/
sudo umount /mnt

Step 6: Configuring PXE Boot Menus

Set up the PXE boot menus to allow clients to choose the Windows installation. Download and configure the PXELINUX bootloader.

sudo apt install -y syslinux
sudo cp /usr/lib/syslinux/modules/bios/pxelinux.0 /var/lib/tftpboot/
sudo mkdir /var/lib/tftpboot/pxelinux.cfg
sudo nano /var/lib/tftpboot/pxelinux.cfg/default

Add the following to the default file:

DEFAULT menu.c32
PROMPT 0
MENU TITLE PXE Boot Menu
LABEL windows
  MENU LABEL Windows Install
  KERNEL pxeboot.n12
  APPEND -

Conclusion

Setting up a PXE Boot Server for Windows deployment on Ubuntu 20.04 involves several steps but can significantly simplify the installation of Windows on multiple computers across a network. By following this guide, you should be able to boot a client machine from the network and proceed with a Windows installation.

If you need professional assistance to manage and optimize your PXE boot server or other DevOps tasks, consider the option to hire remote DevOps engineers to support your infrastructure needs.

Время на прочтение4 мин

Количество просмотров26K

Привет Хабро-людям!

Будучи начинающим администратором, я стремлюсь познать все новое и как губка впитывать информацию. Так же ценю порядок в IT-инфраструктуре предприятия, логичность, доступность и универсальность. Стремясь добиться последнего, (использовать для Active Directory nix-овый DNS — BIND) не так давно потерпел фиаско, но не останавливаюсь на достигнутом. Я хотел бы поделиться с вами информацией, касающейся роли Windows Deployment Services в Windows Server 2012 и настройкой ее для работы со сторонним DHCP-сервером на Ubuntu Server.

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

Вся сеть в нашей организации построена на UNIX-системах, а для, пусть и скромного по меркам IT, парка машин в 50 шт. все же хочется использовать все современные блага и удобства администрирования. Встал вопрос: как разворачивать Windows на ПК пользователей по сети, когда TFTP-сервер будет находиться отдельно от DHCP? Задача, хоть и простая, но заставила меня бегло изучить работу и настройку DHCP-сервера на Ubuntu. Нам же важна универсальность. :) Не поднимать же ради этого «виндовый» DHCP.

Всего-то требовалось, при описании сети, указать командой next-server, что TFTP-сервер находится на другом хосте. Приведу фрагмент конфига DHCP на примере сети 192.168.1.0/24:

shared-network 2_Users {
    subnet 192.168.1.0 netmask 255.255.255.0
        {
            range 192.168.1.2 192.168.1.254;
            default-lease-time 3600;
            max-lease-time 7200;
            option domain-name "test.jp";
            option domain-name-servers 192.168.1.1;
            option routers 192.168.1.1;
            next-server 192.168.2.2;  #Вот как раз строка, которая сообщает клиентам DHCP, что TFTP-сервер с PXE-загрузчиком находится на другом сервере. Он может находиться даже в другой подсети, главное, чтобы был туда маршрут.
            option tftp-server-name "addc1.test.jp"; #DNS-имя нашего сервера с ролью WDS. Указываем на всякий случай, лишним не будет. 
            option bootfile-name "boot\\x86\\wdsnbp.com"; #Указываем, где на нашем сервере лежит файл для сетевой загрузки. 
        }

Вот, собственно, и все. /etc/init.d/isc-dhcp-server restart. Переходим к настройке WDS.

Часть 2. Настройка роли Windows Deployment Services

Об установке роли вряд ли можно что-то сказать. Она проста, не требует перезагрузку и просит указать, какие компоненты нужно ставить. Нам нужны оба компонента: Сервер развертывания и Транспортный сервер.

После установки роли, ее консоль будет доступна в списке Администрирование Панели управления Windows Server и носит название Службы развертывания Windows.

image

Первоначально сервер нужно настроить. ПКМ по серверу слева и выбираем «Настроить сервер». Настройка не представляет собой ничего сложного, я расскажу лишь о важных, на мой взгляд моментах:

Если в вашей сети используются доменные службы Active Directory, то при настройке сервера можете указать, будет ли сервер изолирован или завести его в AD. Куда важнее будет позже отметить, что DHCP-сервер находится в другом месте и не нужно слушать подключения на портах нашего WDS-сервера.

  • Вам потребуется указать, интегрировать ли сервер в AD
  • Указать место хранения образов установки
  • Выбрать политику ответов клиентам. Здесь немного подробнее.

image

Если ограничиться только установкой системы, то можно выбрать пункт «Отвечать всем…» т.к., установка Windows потребует пары логин/пароль от сервера, с которого происходит загрузка. Несанкционированная установка «винды по сетке» не прокатит.

  • В конце будет предложено добавить первый образ

Хочу обратить ваше внимание на вкладку «Протокол DHCP» свойств сервера.

image

Здесь как раз и требуется снять птичек, если вы используете сторонний DHCP-сервер. А на вкладке «Клиент» можно указать, заводить ли новых пользователей в домен.

image

Часть 3. Интересности

Как известно, образы Windows добавляются на WDS-сервер в два этапа: добавления загрузочного образа (boot.wim) и образа установки (install.wim). Вот тут я и заметил маленькую и интересную особенность. В нашей компании используются ОС Windows, начиная с Windows 7, Server 2008R2 и заканчивая Windows 8.1 и Server 2012. Как известно, содержимое boot.wim — это то, что мы видим, запустив установку Windows с диска. И если при установке с диска важны только драйверы на контроллер HDD, то для сетевой установки важны еще драйвера на сетевой адаптер. В этой статье хорошо описан способ внедрения драйверов в дистрибутив с помощью WAIK. Но когда я добавил образ загрузки из дистрибутива Windows 8.1 и проверил его, то заметил, что база драйверов на сетевые адаптеры расширена. Но главная особенность не в этом. :) Используя один, самый последний образ загрузки Windows (пусть даже собранный вами лично с помощью WAIK), можно устанавливать любые редакции Windows, начиная с Windows Vista, заканчивая Windows Server 2012R2. Вам не нужно добавлять кучу образов для загрузки — выберет один, универсальный и современный. Можно добавлять только образы установки (install.wim), выбирая, какие редакции Windows вам нужны.

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

image

… и в результате получите при установке список всех ОС, из групп Desktop и Servers, выберете нужную и проинсталлируете. Не забывайте, для установки требуется ввести логин/пароль администратора сервера.

Содержимое каталога, где хранятся образы установки, будет выглядеть следующим образом:

image

Несмотря на банальность происходящего, это не помешает вам установить любую Windows из добавленных вами на сервер.

Вот, собственно, и все, чем я хотел с вами поделиться. Если хотите расширить возможности WDS, на хабре есть статья «Добавляем WDS универсальности», где еще больший любитель этой самой «универсальности», рассказывает, как заставить WDS использовать GRUB2, а отсюда и установка Linux и утилиты реанимации… В общем, все для того, чтобы современный админ не таскал с собой флешку.

Я за совместное использование Windows и Linux. Спасибо за внимание!

Discover how to install Windows 10 over PXE Linux server in just a few steps! Don’t miss out—learn the efficient, sysadmin-friendly method to deploy Windows OS remotely like a pro. #centlinux #linux #pxe

Table of Contents

Problem Statement

In our previous posts, we have configured a PXE boot server for automated installation of RHEL 7.5 operating system that supports both BIOS and UEFI based clients. Later on, we added RHEL 6 and Ubuntu 18.10 installation options in our PXE boot server. We have also written Kickstart files for automated installations of both operating systems.

Before concluding our PXE configuration series, we decided to write an article to add the installation option of a Microsoft’s operating system. Therefore, we have selected the Microsoft Windows 10 (the latest OS at the time of this writeup) as the candidate for our PXE boot server.

How to install Windows 10 over PXE Linux Server

Linux Server Specification

In this article, we will install Windows 10 over PXE Server.

We use the same Linux server that we have configured as PXE Boot Server in our previous article. These specifications have been re-mentioned below for convenience of the readers.

  • CPU – 2 Core (2.4 Mhz)
  • Memory – 2 GB
  • Storage – 50 GB
  • Operating System – RHEL 7.5
  • Hostname – pxe-server.itlab.com
  • IP Address – 192.168.116.41/24

Furthermore, we need a client system to create Windows PE iso file. Here, we are using a MS Windows 8.1 machine for this purpose, however, you can use other versions of MS Windows as well (be noted that configurations are slightly different in MS Windows versions prior to 8.1).

Recommended Training: The Linux Command Line Bootcamp: Beginner To Power User from Colt Steele

Read Also: How to install Linux over PXE Server

Install Samba Server on Linux

We used Samba server to share installation media of MS Windows 10 Operating System with PXE clients.

Connect to pxe-server.itlab.com using ssh and install Samba server.

yum install -y samba

Create a directory to share Windows 10 installation media.

mkdir /smbshare

Adjust SELinux permissions.

semanage fcontext -a '/smbshare(/.*)?' -t samba_share_t
restorecon -Rv /smbshare

Create an user to control access to Samba share.

useradd -s /sbin/nologin ahmer
smbpasswd -a ahmer

Change owner of the shared directory with user ahmer.

chown ahmer:ahmer /smbshare/

Allow Samba service in Linux Firewall.

firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

Add directives in /etc/samba/smb.conf to share the directory /smbshare with clients.

cat >> /etc/samba/smb.conf << EOF
[install]
        comment = Installation Media
        path = /smbshare
        public = yes
        writable = no
        printable = no
        browseable = yes
EOF

Start and enable Samba services.

systemctl start smb nmb
systemctl enable smb nmb

Attach MS Windows 10 ISO/DVD and mount it at /mnt/iso (you can use any mountpoint, according to your choice).

mount -t iso9660 /dev/cdrom /mnt/iso

Output:

mount: /dev/sr0 is write-protected, mounting read-only

Copy contents of /mnt/iso to /smbshare/windows10 directory.

cp -rf /mnt/iso /smbshare/windows10

Create a Customized Windows PE ISO

Connect to MS Windows 8.1 client.

We required Windows ADK (Assessment and Deployment Kit) to create our Windows PE iso. Therefore, we have downloaded it from Microsoft’s website and installed it on our Windows 8.1 client.

After installation, run Deployment and Imaging Tools Environment as Administrator.

Run the following command to create working directories for Win PE. (Command output has been trimmed to show only success status)

cd C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Windows Preinstallation Environment
copype x86 c:\WinPE_x86\

Output:

---
186 File(s) copied
1 file(s) copied.
1 file(s) copied.
1 file(s) copied.

Success

We will customize the startup script startcmd.net, so MS Windows 10 setup will start automatically. Therefore, mount the image file and customize it accordingly.

Dism /Mount-Image /ImageFile:"c:\WinPE_x86\media\sources\boot.wim" /index:1 /MountDir:"c:\WinPE_x86\mount"

Output:

Deployment Image Servicing and Management tool
Version: 6.2.9200.16384

Mounting image
[==========================100.0%==========================]
The operation completed successfully.

Now, edit startnet.cmd.

notepad c:\WinPE_x86\mount\Windows\System32\Start\net.cmd

And add following lines therein.

wpeinit 
net use z: \\192.168.116.41\install\windows10 /user:ahmer@123
z:\setup.exe

Save and unmount the image file.

Dism /Unmount-Image /MountDir:"c:\WinPE_x86\mount" /commit

Output:

Deployment Image Servicing and Management tool
Version: 6.2.9200.16384

Saving image
[==========================100.0%==========================]
Unmounting image
[==========================100.0%==========================]
The operation completed successfully.

Generate winpe.iso file.

MakeWinPEMedia /ISO c:\WinPE_x86 c:\winpe.iso

Output:

Creating c:\winpe.iso...

100% complete

Success

Transfer winpe.iso file to pxe-server-itlab.com and copy it to /var/lib/tftpboot/networkboot/windows10/ directory.

Now, connect to pxe-server.itlab.com again using ssh.

Copy Kernel boot image for MS Windows in tftpboot directory.

cp /usr/lib/syslinux/memdisk /var/lib/tftpboot/

Edit PXE boot menu for BIOS based clients.

vi /var/lib/tftpboot/pxelinux.cfg/default

And add following menu option at the end of file.

label Install MS Windows 10
menu label Install MS Windows 10
kernel memdisk
initrd /networkboot/windows10/winpe.iso
append iso raw

Connect a new client to your network and turn it on. It should get the IP address from DHCP server and display our PXE boot Menu as follows:

PXE Boot Menu

Select Install MS Windows 10 option and press <ENTER>.

install Windows 10 over PXE
Microsoft Windows 10 Setup

We have successfully added the MS Windows 10 installation option in our Linux based PXE server.

Frequently Asked Questions (FAQs)

What is PXE booting, and how does it help install Windows 10?
PXE (Preboot Execution Environment) allows a computer to boot and install an operating system over a network instead of using physical media. A Linux server can host the Windows 10 installation files for remote deployment.

Do I need a Windows server to set up PXE for Windows 10?
No, you can use a Linux server (like Ubuntu or CentOS) to configure a PXE boot environment for Windows 10 installation with the right tools and configurations.

What files are required on the Linux server for Windows 10 PXE installation?
You’ll need the Windows 10 ISO (or extracted files), a TFTP server to host boot files, a DHCP server to assign IPs, and a network share (SMB/NFS) for the Windows installation files.

Can I use PXE to install Windows 10 on multiple computers at once?
Yes! Once the PXE server is set up, any device connected to the same network can boot and install Windows 10 simultaneously (depending on network bandwidth and server capacity).

Are there any risks when installing Windows 10 over PXE?
If configured incorrectly, you might face boot failures or network issues. Ensure proper DHCP settings, correct file paths, and compatible hardware (PXE-supported network cards). Always back up data before installation.

Final Thoughts

By now, you’ve seen how straightforward it can be to install Windows 10 over a PXE Linux server. From setting up the TFTP and DHCP services to booting the Windows installer remotely, you’re just steps away from streamlining your deployment process.

If you’re still manually installing operating systems or juggling bootable USBs, you’re already falling behind. Modern sysadmins automate and scale—and PXE booting is at the heart of that transformation.

Don’t let outdated methods slow you down. Get ahead, save time, and take control of your infrastructure.

Ready to level up your deployment game? Start implementing PXE boot with Linux today—your future self will thank you.

Struggling with Linux server management? I offer professional support to ensure your servers are secure, optimized, and always available. Visit my Fiverr profile to learn more!

Looking for something?

Latest Articles

Дано: некий офис с компьютерами типа PC, сервер с Linux.
Задача: Сделать сервис установки системы по сети без использования платных Windows Server и др.
Решение:

Решение базируется на статье «PXE Win Install: установка Windows 7 по сети» Автор: Игорь Осколков от 22.03.2012.
Привожу рабочее решение, с исправленными ошибками в упомянутой статье и для Linux серверов с сервисами DHCP, TFTP и Samba.

План работ

1. Настройка служб DHCP, TFTP и Samba на Linux сервере.
2. В первую очередь необходимо создать образ WINPE, интегрирования в него сетевых драйверов и настройку скрипта сетевой загрузки.
3. Создание и настройка загрузчика BCD.
4. Размещение файлов на сервере и проверка сетевой загрузки.

Что понадобиться:

1. Компьютер с установленной Windows 7.
2. Windows Automated Installation Kit (WAIK).
3. Linux сервер, можно два :)

Приступим.

1. DHCP

У меня DHCP установлен на маршрутизаторе 192.168.1.1, с Debian GNU/Linux.
Все что необходимо нам от DHCP сервера — это указать адрес сервера загрузки и имя файла для загрузки по сети.

Я поместил эти параметры в блок описания подсети:

subnet 192.168.1.0 netmask 255.255.255.0
{
option netbios-name-servers 192.168.1.1;

option routers 192.168.1.1;
next-server 192.168.1.200;
filename «pxelinux.0»;

}

2. TFTP сервер

Находится вместе с Samba сервером на отдельном комьютере, с адресом 192.168.1.200. Здесь установлен дистрибутив Gentoo.

Как установить tftpd в gentoo — читать здесь.

Настройки TFTP:
Файл /etc/conf.d/in.tftpd


INTFTPD_PATH=»/opt/pxe/»
INTFTPD_OPTS=»-R 4096:32767 -s ${INTFTPD_PATH} -m /etc/tftpd.rules -v»

Первый параметр — корень папки TFTP сервера.
Второй — параметры запуска.

Файл /etc/tftpd.rules


rg \\ /

Для автозамены слешей в стиле windows на linux-like.

В папку /opt/pxe/ копируем файлы из пакета syslinux:

cp /usr/share/syslinux/pxelinux.0 /opt/pxe/
cp /usr/share/syslinux/pxechain.com /opt/pxe/
cp /usr/share/syslinux/memdisk /opt/pxe/

Создаем папку pxelinux.cfg

mkdir -p /opt/pxe/pxelinux.cfg

Копируем туда файлы из пакета syslinux:

cp /usr/share/syslinux/menu.c32 /opt/pxe/pxelinux.cfg/
cp /usr/share/syslinux/poweroff.com /opt/pxe/pxelinux.cfg/
cp /usr/share/syslinux/reboot.c32 /opt/pxe/pxelinux.cfg/

Создаем файл default

nano /opt/pxe/pxelinux.cfg/default


такого содержания:



DEFAULT pxelinux.cfg/menu.c32
TIMEOUT 600
MENU TITLE PXE BOOT MENU
ALLOWOPTIONS 0
PROMPT 0


LABEL 001
MENU LABEL Local ^Boot
MENU DEFAULT
LOCALBOOT 0
TIMEOUT 80
TOTALTIMEOUT 9000


LABEL 002
MENU LABEL ^Install Windows 7 x64
KERNEL pxechain.com
APPEND ../Boot/pxeboot.com


LABEL 003
MENU LABEL ^Memtest86+
KERNEL images/memtest


LABEL Reboot
MANU LABEL ^Reboot
KERNEL pxelinux.cfg/reboot.c32

3. Samba

Приведу секцию, которая отвечает за созданную шару с дистрибутивом windows7:

[Win7Install$]
comment = Windows7x64 install folder
path = /opt/sambashare/win7x64
read only = No
create mask = 0666
directory mask = 0777
guest only = Yes
guest ok = Yes

Проверить можно с любой windows в командной строке:

net use z: \\192.168.1.200\Win7Install$

Если ресурс под паролем, то

net use z: \\192.168.1.200\Win7Install$ password /user:username

В эту папку копируем содержимое папки sources из дистрибутива Windows 7.

4. WinPE

Частично действия похожи на те, что делались в статье «Собираем свой дистрибутив Windows 7 с программами».

Установим WAIK, который мы скачали по ссылке выше.

Запускаем «Командная строка средств развертывания» (если у вас английская версия — Deployment Tools Command Prompt). Запускаем от имени Администратора.

В консоли выполняем команду:

copype.cmd amd64 C:\WinPE

Эта команда копирует в каталог C:\WinPE файлы, необходимые для создания образа с предустановочным окружением 64-разрядной Windows 7. Для 32-битной версии надо указать параметр x86 вместо amd64.

copype.cmd x86 C:\WinPE

Далее буду приводить две команды, с обеими архитектурами, для удобства copy-paste.

Сразу же создайте папку C:\TFTP\, в которой будут файлы для TFTP-сервера, а в ней сделайте директорию Boot. В последней будут храниться загрузочные файлы.

Копируем файлы из стандартного winpe образа в папку C:\TFTP\Boot

imagex /mountrw winpe.wim 1 mount

Эта комнада монтирует winpe.wim в папку C:\WinPE\ mount (осле первой команды мы автоматически попадаем в папку C:\WinPE)

copy mount\Windows\Boot\PXE\*.* C:\TFTP\Boot

Я еще скопировал папку ru-RU и папку fonts. Если их в образе не окажется — их можно взять с любого установочного диска Windows7.

Копируем еще один нужный файл

copy «C:\Program Files\Windows AIK\Tools\PETools\amd64\boot\boot.sdi» C:\TFTP\Boot
copy «C:\Program Files\Windows AIK\Tools\PETools\x86\boot\boot.sdi» C:\TFTP\Boot

Интегрируем драйвера. Для этого, скачиваем пакет дрйверов для сетевых карт, отсюда. Распаковываем, я для удобства перенес папку L из распакованного дерева в корень диска С.

dism /image:c:\winpe\mount /add-driver /driver:c:\L /recurse /forceunsigned

Где:
/image:c:\winpe\mount примонтированый образ

/add-driver — добавить драйвера.
/driver:c:\L — папка с драйверами.
/recurse — позволяет брать драйвера еще и из подпапок.
/forceunsigned — если есть неподписанные драйверы.

После этого, пока образ еще примонтирован, необходимо подправить файл startnet.cmd. Но для этого уже необходимо знать IP адрес Samba сервера и путь к ресурсу, который будет отдавать дистрибудтив Windows 7.
Выполняем команду:

notepad C:\WinPE\mount\windows\system32\startnet.cmd

Приводим содержимое к такому виду:

wpeinit
net use z: \\192.168.1.200\Win7Install$
z:\setup.exe

Если ресурс под паролем, то строка имеет другой вид:

net use z: \\192.168.1.200\Win7Install$ password /user:username

Закрываем блокнот, с сохранением изменений, проверяем, чтобы в проводнике не было открыто содержимое папки mount и выполняем команду для отмонтирования:

imagex /unmount c:\winpe\mount /commit

И копируем файл образа в C:\TFTP\Boot\

copy c:\winpe\winpe.wim C:\TFTP\Boot\boot.wim

5. Загрузчик BCD

Здесь в оригинальной статье скрылись несколько ошибок, из-за которых не загружался загрузчик и в Linux вылезли мелкие ошибки, такие как соответствие регистра.
Ниже представлен вариант, который работает, следите за регистром в пути к файлам, так как в Windows все будет работать и так, а в Linux приведет к ошибке.

Создаем загрузчик:

bcdedit -createstore c:\BCD
bcdedit -store c:\BCD -create {ramdiskoptions} /d «Ramdisk options» 
bcdedit -store c:\BCD -set {ramdiskoptions} ramdisksdidevice  boot
bcdedit -store c:\BCD -set {ramdiskoptions} ramdisksdipath  \Boot\boot.sdi
bcdedit -store c:\BCD -create /d «PE Boot Image» /application osloader

После этого в консоли появиться сообщение содержащее GUID в виде

{ef40ab64-7ce9-11e2-8487-a0b3ccc2b14c} (пример). Копируем его в следующие команды:

bcdedit -store c:\BCD -set GUID systemroot \Windows 
bcdedit -store c:\BCD -set GUID detecthal Yes 
bcdedit -store c:\BCD -set GUID winpe Yes 
bcdedit -store c:\BCD -set GUID osdevice ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions} 
bcdedit -store c:\BCD -set GUID device ramdisk=[boot]\Boot\boot.wim,{ramdiskoptions}




bcdedit -store c:\BCD -create {bootmgr} /d «Windows BootManager» 
bcdedit -store c:\BCD -set {bootmgr} timeout 30 
bcdedit -store c:\BCD -displayorder {ef40ab64-7ce9-11e2-8487-a0b3ccc2b14c}

Копируем (или переносим, чтобы не мешал) созданный BCD в папку C:\TFTP\Boot\

copy c:\BCD C:\TFTP\Boot\
move c:\BCD C:\TFTP\Boot\

Файл pxeboot.com заменяем файлом pxeboot.n12, меняя ему расширение.

Получилась такая картина в этой папке:

Папки:

fonts
ru-RU

Файлы:

BCD
abortpxe.com
boot.wim
hdlscom1.n12
hdlscom2.n12
wdsnbp.com
WdsConfig.inf
boot.sdi
bootmgr.exe
hdlscom1.com
hdlscom2.com
pxeboot.com
wdsmgfw.efi

Полученную папку C:\TFTP копируем на Linux сервер, любым удобным для вас способом. Копируем в папку /opt/pxe/ . Так же файл bootmgr.exe копируем из папки Boot в корень папки /opt/pxe/
Получается так:

ls -la /opt/pxe/
total 574
drwxrwxrwx  5 root root    248 Feb 22 18:59 .
drwxr-xr-x 17 root root    808 Feb 18 15:16 ..
drwxrwxrwx  4 root root    520 Feb 25 18:10 Boot
drwxrwxrwx  2 root root     72 Feb 18 14:53 images
drwxrwxrwx  2 root root    160 Feb 22 18:07 pxelinux.cfg
-rwxrwxrwx  1 root root 523328 Jul 14  2009 bootmgr.exe
-rwxrwxrwx  1 root root  26140 Feb 18 14:45 memdisk
-rwxrwxrwx  1 root root    998 Feb 22 18:20 pxechain.com
-rwxrwxrwx  1 root root  26579 Feb 18 14:45 pxelinux.0

ls -la /opt/pxe/Boot/ —group-directories-first
total 282836
drwxrwxrwx 4 root root       520 Feb 25 18:10 .
drwxrwxrwx 5 root root       248 Feb 22 18:59 ..
drwxrwxrwx 2 root root       208 Jan 27  2011 fonts
drwxrwxrwx 2 root root       112 Feb 22 17:36 ru-RU
-rwxrwxrwx 1 root root     12288 Feb 22 16:27 BCD
-rwxrwxrwx 1 root root      1347 Jun 11  2009 WdsConfig.inf
-rwxrwxrwx 1 root root        79 Jun 11  2009 abortpxe.com
-rwxrwxrwx 1 root root   3170304 Jun 10  2009 boot.sdi
-rwxrwxrwx 1 root root 138584642 Feb 22 17:58 boot.wim
-rwxrwxrwx 1 root root    523328 Jul 14  2009 bootmgr.exe
-rwxrwxrwx 1 root root     26076 Jun 11  2009 hdlscom1.com
-rwxrwxrwx 1 root root     26060 Jun 11  2009 hdlscom1.n12
-rwxrwxrwx 1 root root     26076 Jun 11  2009 hdlscom2.com
-rwxrwxrwx 1 root root     26060 Jun 11  2009 hdlscom2.n12
-rwxrwxrwx 1 root root     25772 Jun 11  2009 pxeboot.com
-rwxrwxrwx 1 root root    527360 Jul 14  2009 wdsmgfw.efi
-rwxrwxrwx 1 root root     31124 Feb 22 18:15 wdsnbp.com

6. Проверка работы

Проверяем работу сервиса. С любого другого компьютера, загружаемся в BIOS, разрешаем возможность загрузки по сети. Загруженное меню:

Выбираем пункт Install, загружается образ winpe:

Лог загрузки:


Feb 25 14:24:49 dev1 in.tftpd[31185]: RRQ from 192.168.1.152 filename pxelinux.cfg/01-00-1c-42-cb-f8-83 
Feb 25 14:24:49 dev1 in.tftpd[31186]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A80198 
Feb 25 14:24:49 dev1 in.tftpd[31187]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A8019 
Feb 25 14:24:49 dev1 in.tftpd[31188]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A801 
Feb 25 14:24:49 dev1 in.tftpd[31189]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A80 
Feb 25 14:24:49 dev1 in.tftpd[31190]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A8 
Feb 25 14:24:49 dev1 in.tftpd[31191]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0A 
Feb 25 14:24:49 dev1 in.tftpd[31192]: RRQ from 192.168.1.152 filename pxelinux.cfg/C0 
Feb 25 14:24:49 dev1 in.tftpd[31193]: RRQ from 192.168.1.152 filename pxelinux.cfg/C 
Feb 25 14:24:49 dev1 in.tftpd[31194]: RRQ from 192.168.1.152 filename pxelinux.cfg/default 
Feb 25 14:24:49 dev1 in.tftpd[31195]: RRQ from 192.168.1.152 filename pxelinux.cfg/menu.c32 
Feb 25 14:24:49 dev1 in.tftpd[31196]: RRQ from 192.168.1.152 filename pxelinux.cfg/default 
Feb 25 14:25:11 dev1 in.tftpd[31203]: RRQ from 192.168.1.152 filename pxechain.com 
Feb 25 14:25:11 dev1 in.tftpd[31204]: RRQ from 192.168.1.152 filename pxelinux.cfg/../Boot/pxeboot.com 
Feb 25 14:25:11 dev1 in.tftpd[31205]: RRQ from 192.168.1.152 filename bootmgr.exe 
Feb 25 14:25:12 dev1 in.tftpd[31207]: RRQ from 192.168.1.152 filename \Boot\Fonts\wgl4_boot.ttf remapped to /Boot/Fonts/wgl4_boot.ttf 
Feb 25 14:25:12 dev1 in.tftpd[31208]: RRQ from 192.168.1.152 filename \boot.ini remapped to /boot.ini 
Feb 25 14:25:27 dev1 in.tftpd[31218]: RRQ from 192.168.1.152 filename \Boot\BCD remapped to /Boot/BCD 
Feb 25 14:25:27 dev1 in.tftpd[31218]: tftp: client does not accept options 
Feb 25 14:25:27 dev1 in.tftpd[31219]: RRQ from 192.168.1.152 filename \Boot\BCD remapped to /Boot/BCD 
Feb 25 14:25:27 dev1 in.tftpd[31220]: RRQ from 192.168.1.152 filename \Boot\Fonts\wgl4_boot.ttf remapped to /Boot/Fonts/wgl4_boot.ttf 
Feb 25 14:25:27 dev1 in.tftpd[31221]: RRQ from 192.168.1.152 filename \hiberfil.sys remapped to /hiberfil.sys 
Feb 25 14:25:27 dev1 in.tftpd[31222]: RRQ from 192.168.1.152 filename \Boot\boot.wim remapped to /Boot/boot.wim 
Feb 25 14:25:27 dev1 in.tftpd[31222]: tftp: client does not accept options 
Feb 25 14:25:27 dev1 in.tftpd[31223]: RRQ from 192.168.1.152 filename \boot\boot.sdi remapped to /Boot/boot.sdi 
Feb 25 14:25:27 dev1 in.tftpd[31223]: tftp: client does not accept options 
Feb 25 14:25:27 dev1 in.tftpd[31224]: RRQ from 192.168.1.152 filename \boot\boot.sdi remapped to /Boot/boot.sdi 
Feb 25 14:25:30 dev1 in.tftpd[31226]: RRQ from 192.168.1.152 filename \Boot\boot.wim remapped to /Boot/boot.wim 

На этом все. Про создание своего дистрибутива Windows, с установленными программами, автоматизацией установки и прочее читать здесь — «Собираем свой дистрибутив Windows 7 с программами».

Продолжая серию статей по развёртыванию Windows, сегодня мы займёмся подготовкой сервера сетевой загрузки на базе ОС Linux и организацией загрузки Windows PE с такого сервера, а так же подготовим установочный дистрибутив Windows 7 или Windows Server 2008 R2 для установки с сетевого ресурса. В этой инструкции я приведу пример для Debian Linux 8.

Для работы нам понадобится образ Windows PE и установочный дистрибутив системы Windows.

  • Создание образа Windows PE 3.1
  • Создание собственного образа дистрибутива Windows 7 или Windows Server 2008 R2
  • Настройка Linux PXE сервера сетевой установки Windows 7 или Windows Server 2008 R2

Подготовка загрузочных файлов Windows для PXE

Для загрузки системы Windows с PXE сервера нам понадобятся следующие файлы:

  • winpe/boot/fonts/wgl4_boot.ttf — из поставки Windows
  • winpe/boot/bcd — хранилище конфигурации (необходимо сгенерировать)
  • winpe/boot/boot.sdi — из поставки Windows
  • winpe/boot/winpe.wim — образ Windows PE (инструкция по сборке)
  • winpe/pxeboot.0 — pxeboot.n12 из поставки Windows
  • winpe/bootmgr.exe — из поставки Windows

Создадим папку, в которую будем собирать загружаемую по PXE систему:

mkdir c:\tftpboot\winpe\boot

Скопируем шрифт, который использует bootfix.bin и файл boot.sdi, который необходим для создания виртуального диска в памяти:

xcopy c:\WinPE\x86\ISO\boot\fonts\wgl4_boot.ttf c:\tftpboot\winpe\boot\fonts\wgl4_boot.ttf
xcopy c:\WinPE\x86\ISO\boot\boot.sdi c:\tftpboot\winpe\boot\boot.sdi

Теперь нам понадобится загрузчик, который загрузит менеджер загрузки и хранилище конфигурации. Они есть в загрузочном образе Windows PE. Для этого подключим образ Windows PE:

dism /mount-wim /wimfile:C:\WinPE\x86\winpe.wim /index:1 /mountdir:C:\WinPE\x86\mount

И скопируем от туда файл pxeboot.n12, переименовав его в pxeboot.0 и bootmgr.exe:

xcopy c:\WinPE\x86\mount\Windows\Boot\PXE\pxeboot.n12 c:\tftpboot\winpe\pxeboot.0
xcopy c:\WinPE\x86\mount\Windows\Boot\PXE\bootmgr.exe c:\tftpboot\winpe\bootmgr.exe

Необходимые файлы за исключением конфигурации загрузки и образа системы у нас есть, поэтому образ Windows PE можно отключить без сохранения изменений:

dism /unmount-wim /mountdir:C:\WinPE\x86\mount /discard

Копируем образ системы Windows PE в папку загрузки:

xcopy  C:\WinPE\x86\winpe.wim c:\tftpboot\winpe\boot\

Теперь самое время сгенерировать конфигурацию загрузки, для этого создадим файл makebcd.cmd:

notepad c:\tftpboot\makebcd.cmd

Со следующим содержимым:

bcdedit -createstore %1\BCD
bcdedit -store %1\BCD -create {ramdiskoptions} /d «Ramdisk options»
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdidevice boot
bcdedit -store %1\BCD -set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /F «tokens=2 delims={}» %%i in (‘bcdedit -store %1\BCD -create /d «Windows PE Boot Image» /application osloader’) do set guid={%%i}
bcdedit -store %1\BCD -set %guid% systemroot \Windows
bcdedit -store %1\BCD -set %guid% detecthal Yes
bcdedit -store %1\BCD -set %guid% winpe Yes
bcdedit -store %1\BCD -set %guid% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -set %guid% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
bcdedit -store %1\BCD -create {bootmgr} /d «Windows BootManager»
bcdedit -store %1\BCD -set {bootmgr} timeout 30
bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%
move %1\BCD %1\bcd

И запустим его на исполнение, передав ему в качестве аргумента расположение и имя файла хранилища конфигурации:

c:\tftpboot\makebcd.cmd c:\tftpboot\winpe\boot

На этом подготовка необходимых файлов для загрузки с PXE в среде Windows окончена, и мы приступаем к настройке Linux-сервера.

Установка PXE-сервера

Установка TFTP

Установка необходимых пакетов:

# aptitude install tftpd-hpa syslinux pxelinux -y

Настраиваем TFTP-сервер:

# vim /etc/default/tftpd-hpa

TFTP_USERNAME=»tftp»
TFTP_DIRECTORY=»/srv/tftpboot»
TFTP_ADDRESS=»0.0.0.0:69″
TFTP_OPTIONS=»—secure -m /etc/default/tftp-remap.conf -v»
RUN_DAEMON=»yes»

Т.к. Windows будет искать свои файлы загрузки относительно корня tftp, делаем маппинг и ассоциируем эти файлы с каталогом winpe на сервере.

Создаём файл маппинга:

# vim /etc/default/tftp-remap.conf

Со слеюующим содержимым:

r pxeboot.0 /pxeboot.0
r bootmgr.exe /winpe/bootmgr.exe
r \\Boot\\BCD /winpe/boot/bcd
r \\boot\\boot.sdi /winpe/boot/boot.sdi
r \\Boot\\winpe.wim /winpe/boot/winpe.wim
r \\Boot\\Fonts\\wgl4_boot.ttf /winpe/boot/fonts/wgl4_boot.ttf
gr \\ /

Последняя строка «gr \\ /» говорит tftp, если в путях указывются обратные слэши, менять их на прямые.
Внимание! Важно, чтобы регистре букв в именах файлов был точно таким же, как вы указывайтей в файлах. Если вы в на этапе создания конфигурации указали /boot/bcd, а файл назвали /Boot/BCD, загрузчик не сможет загрузить систему, т.к. не найдёт нужного файла.

Создаём наш каталог загрузки:

mkdir -p /srv/tftpboot/winpe

Теперь необходим скопировать в него файлы, из каталога c:\tftpboot\:

c:\tftpboot\winpe\> pscp -r * root@pxeboot.home.local:/srv/tftpboot/winpe

Создаём меню загрузки

Для того, чтобы меню загрузки работало, нам понадобятся следующие файлы, копируем их в корневой каталог нашего tftp-сервера:

# cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/chain.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/libcom32.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/libutil.c32 /srv/tftpboot
# cp /usr/lib/syslinux/modules/bios/vesamenu.c32 /srv/tftpboot

И создаём каталог, где будет хранится само меню загрузки:

# mkdir -p /srv/tftpboot/pxelinux.cfg

Ещё нам понадобится красивая загрузочная картинка для нашего меню. Она должна быть в формате jpg и разрешением 640×480. Копируем её с нашей машины:

C:\Users\golovlevmv\> pscp Pictures\menu.jpg root@pxeboot.home.local:/srv/tftpboot/pxelinux.cfg/menu.jpg

Теперь самое время создать меню загрузки:

# vim /srv/tftpboot/pxelinux.cfg/default

Со следущим содержимым:

PROMPT 0
UI vesamenu.c32
MENU TITLE PXE Server Boot Menu
MENU BACKGROUND pxelinux.cfg/menu.jpg
TIMEOUT 600

LABEL ^0) Boot from hard disk
TEXT HELP
    Boot from first (hdd 0)
ENDTEXT
    COM32 chain.c32
    APPEND hd0 1

MENU SEPARATOR

LABEL ^1) Load Windows PE 3.1 x86
TEXT HELP
    Boot Windows PE x86 from pxeboot
ENDTEXT
    kernel winpe/pxeboot.0

Перезапускаем tftpd:

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

Альтернативный вариант загрузки с PXE

Так же можно организовать ещё один вариант загрузки системы с PXE, используя memdisk, но он потребует уже значительно большего объёма памяти и у вас могут возникнуть проблемы с компьютерами с объёмом памяти менее 1Гб.

Tftp сервер должен быть уже подготовлен, по инструкции выше.

Нам понадобится memdisk, копируем его из состава пакета syslinux:

# cp /usr/lib/syslinux/memdisk /srv/tftpboot

Копируем ISO-образ Windows PE:

C:\WinPE\x86\> pscp WinPE_x86.iso root@pxeboot.home.local:/srv/tftpboot/winpe/winpe_x86.iso

Добавляем в наше загрузочное меню ещё один пункт:

# vim /srv/tftpboot/pxelinux.cfg/default

LABEL ^2) Load Windows PE 3.1 x86 (iso)
TEXT HELP
    Boot Windows PE x86 from iso image
    need more 512MB RAM to correct work
ENDTEXT
    KERNEL memdisk
    APPEND iso raw
    INITRD winpe/winpe_x86.iso

Настройка DHCP

Для того, чтобы наши клиенты могли загружаться по сети, необходимо наличие DHCP-сервера, а он в свою очередь должен выдавать клиентам адрес свервеа сетевой загрузки и имя файла, которое необходимо загружать.
Вы можете использовать любой уже имеющийся DHCP-сервер, ему необходимо передать следующие параметры:

  • filename = «pxelinux.0»;
  • next-server <ip-адрес сервера>;

В случае отсутствия у вас DHCP-сервера, я так же приведу пример его установки и настройки на нашем PXE-серере.

Устанавливаем DHCP сервер:

# aptitude install isc-dhcp-server -y

Включаем DHCP на нужном нам сетевом интерфейсе:

# vim /etc/default/isc-dhcp-server

INTERFACES=»eth1″

Приводим dhcpd.conf к нужному нам виду:

# vim /etc/dhcp/dhcpd.conf

ddns-update-style none;
option domain-name «home.local»;
option domain-name-servers 192.168.140.10;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.140.0 netmask 255.255.255.0 {
    range 192.168.140.51 192.168.140.254;
    option routers 192.168.140.10;
    option domain-name «home.local»;
    filename = «pxelinux.0»;
    next-server 192.168.140.10;
}

Запускаем isc-dhcp-server:

# /etc/init.d/isc-dhcp-server start

Теперь у нас должно загружаться окружение Windows PE. Через него мы можем скопировать данные из аварийной системы и установить чистую систему на машину.

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

Если всё получилось, то основная и самая сложная часть работы сделана. Теперь подготовим дистрибутив для установки системы по сети.

Сетевая установка Windows

Далее для сетевой установки можно использовать уже существующий файловый сервер на базе Windows или SAMBA. Но, посколько я решил организовать хранение установочных дистрибутивов системы на этом же сервер, то кратко покажу, как организовать такой SAMBA-сервер на нашем серере PXE.

Устанавливаем SAMBA

# aptitude install samba -y

Тут всё достаточно просто. Я приведу минимальный конфиг smb.conf, без подключения сервера к домену и задания пользовательских учётных записей. Это будет просто сервер с гостевым доступом на чтение.

Правим конфигурацию samba:

# vim /etc/samba/smb.conf

[global]
   workgroup = WORKGROUP
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   acl allow execute always = true

[win7x86]
   comment = Windows 7
   path = /srv/dist/win7x86
   guest ok = yes
   browseable = yes
   create mask = 0644
   directory mask = 0755
   acl allow execute always = true

Не забудьте указать «acl allow execute always = true». Этот параметр необходимо указать для того, чтобы можно было запускать на исполнение exe-файлы, иначе запустить setup.exe у вас не получится.

Возьмём установочный дистрибутив Windows 7 SP1 x86 необходимой редакции, и скопируем все файлы на наш сервер в папку с дистрибутивами:

C:\Users\golovlevmv\> pscp -r E:\ root@pxeboot.home.local:/srv/dist/win7x86/

Перезапустим samba

# /etc/init.d/samba restart

Попробуем обратиться к нашему сетевому ресурсу по имени или ip адресу «\\pxeboot\» или «\\192.168.140.10\».

Теперь для того, чтобы у нас с нашего сервера устанавливалась наша система, то берём файл install.wim, который мы создавали при сборке собственного дистрибутива Windows, и заменяем им дистрибутивный файл.

C:\Users\golovlevmv\> pscp C:\Win7\x86\dist\sources\install.wim root@pxeboot.home.local:/srv/dist/win7x86/sources/

А вот файл /srv/dist/win7x86/sources/boot.wim можно удалить, т.к. загрузку мы уже к тому времени уже произвели с помощью Windows PE.

Запуск установки системы Windows 7 x86

Для того, чтобы запустить установку, необходимо подключить сетевой ресурс:

net use * \\192.168.140.10\win7x86

Подключится сетевой диск «Z:», и выполнить команду:

Z:\setup.exe

Далее, для того, чтобы автоматизировать установку системы, можно с помощью «диспетчера образов системы Windows» подготовить файл ответов autounattend.xml, и запускать установку с файлом ответов:

Z:\setup.exe /unattend:autounattend.xml

В такойм случае, для того, чтобы разворачивать системы Windows на большом количестве ПК, вам будет нужно лишь загрузиться с PXE, подключить сетевой ресурс, и запустить установку с указанием файла ответов.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows mobile device center download
  • Как вернуть виндовс из папки windows old
  • Удаление трояна windows 7
  • Ping with timestamp windows
  • Heic в jpg программа для windows бесплатно