- Установка Windows 7 поверх PXE из Linux без использования WAIK
- 1. Обзор
- 1.1. Введение
- 1.2. Что должны получить
- 1.3. Ссылки
- 2. Конфигурирование и запуск сервисов
- 2.1 dhcp
- 2.2 tftpd
- 2.3 samba
- 2.4 binl
- 3. Подготовка загрузочных файлов Windows
- 3.1. Импорт загрузочного файла, используемого по умолчанию
- 3.2. Подготовка файла WIM
- 3.2.1. Создаем файл winpehl.ini
- 3.2.2. Создаем скрипт install.cmd
- 3.2.3. Добавляем сетевые драйверы
- 3.2.4. Создаем файл actionfile
- 3.2.5. Создаем файл WIM
- 3.3. Создание загрузочных файлов для конкретных систем
- 4. Подготовка файлов автоматической установки
- 4.1. Поддерживаемый язык
- 4.2. Определение версии ОС
- 4.3. Выбор образа подходящего инсталлятора
- 4.4. Создаем/редактируем файлы автоматической установки
- 5. Решение возникших проблем
- Установка Windows по сети с Ubuntu PXE сервера
Установка Windows 7 поверх PXE из Linux без использования WAIK
1. Обзор
1.1. Введение
В статье приводится описание, как из Linux по сети (PXE) развернуть для работы систему Windows 7. Не нужно пользоваться «рабочим компьютером» с установленным пакетом WAIK (Windows Automated Installation Kit — пакет автоматической установки Windows), нужна лишь система Linux. Я использую 32-битный инсталлятор Centos 5.3, но если вы разбираетесь в том, что делаете, то я уверен, что вы сможете выполнить эту работу на том варианте Linux, который вы лично предпочитаете использовать. Для этого вам нужно следующее:
- сервер tftp
- сервер dhcp
- сервер samba
- пакет ris для linux
- PXELinux
- hivex
- мой скрипт (wimlib/bcdedit.pl/getbcdlocation.sh)
Последние четыре пакета, объединенные вместе в один пакет, вы можете скачать с сайта www.ultimatedeployment.org. Скачайте пакет отсюда .
Все остальное либо есть в вашем дистрибутиве Linux, либо может быть достаточно просто установлено с помощью менеджера пакетов вашего дистрибутива Linux (um, apt-get и т.д.).
Загрузите пакет и распакуйте его корневой каталог системы. Будет создан каталог /work, в котором все будет происходить. В остальной части этого документа я предполагаю, что вы это уже сделали и что там же находятся скрипты и конфигурационные файлы. Конечно, вы всегда можете распаковать его в другое место, куда захотите .
Отказ от ответственности: Настоящий подход все еще находится в стадии разработки, и в нем могут быть (очевидные) ошибки. В действительности здесь описывается, как я развернул систему Windows 7 для работы в UDA. Это моя рабочая среда, поэтому дайте мне знать, если у вас есть исправления или другие советы и подсказки.
1.2. Что должны получить
Как только вы закончите подготавливать вашу файловую систему, она должна выглядеть следующим образом. Большинство файлов уже заранее подготовлены в архиве, но, конечно, не те, которые я не должен был самостоятельно распространять, например, двоичные файлы загрузки windows. В данном руководстве будет рассказано, откуда их получить или как их найти на вашем носителе с инсталлятором windows 7.
1.3. Ссылки
Я нашел в сети интересную информацию, объединил ее и при помощи некоторых проб и ошибок придумал этот метод. Вот некоторые ссылки для получения дополнительной информации.
Дайте мне знать, если вы найдете более интересные статьи! (пожалуйста, сделайте это в форуме на www.ultimatedeployment.org ).
2. Конфигурирование и запуск сервисов
2.1 dhcp
Запустите сервер dhcp следующим образом
Файл dhcpd.conf должен выглядеть приблизительно следующим образом. Если захотите, вы можете внести изменения в ip-адреса, выделенные красным цветом:
Файл pxelinux.0 является загрузочным файлом, который запускает весь процесс pxe. Когда клиент загружается, этот файл загружается первым и, в свою очередь, загружает конфигурационный файл pxelinux.cfg/default. Этот файл выглядит следующим образом:
2.2 tftpd
Запустите демон tftp следующим образом
Эта команда запускает tftpd со следующими параметрами:
Конфигурационный файл /work/conf/tftpd.conf лишь заменяется обратный слэш на прямой слэш:
2.3 samba
Запустите сервер samba следующим образом
Убедитесь, что каталог /work/sambashare экспортируется как sambashare REMINST. Это важная часть файла smb.conf:
2.4 binl
Запустите сервер binl следующим образом
Эта команда запустит сервис binl со следующими параметрами:
Здесь журнальный файл важен, поскольку в дальнейшем он должен быть прочитан. Сервис binl определяет, какой загрузочный файл клиент скачал последним, для этого выполняется следующий скрипт. Скрипт ищет журнальный файл tftpd и возвращает место, где расположен файл bcd, который находится в том же самом каталоге, что и найденный файл wdsnbp.com. Это необходимо, т.к. мы хотим знать, какой вариант был выбран в меню загрузки PXE.
3. Подготовка загрузочных файлов Windows
3.1. Импорт загрузочного файла, используемого по умолчанию
Прежде всего нам нужно смонтировать установочный DVD. Я смею предположить, что он находится в плейере DVD, известным как /dev/cdrom. Вы должны смонтировать его следующим образом:
Если у вас есть файл iso, то вы должны сделать что-то вроде следующего:
Как только вы это сделаете, файлы, расположенные на DVD (внутри образа), можно будет опубликовать с помощью samabashare. Затем нам нужно извлечь отдельные файлы из файла boot.wim, который находится на DVD в каталоге /sources. Они должны быть в самом конце каталога /work/tftproot, поэтому мы сначала выполняем следующее:
Обратите внимание, что мы извлекли файл pxeboot.n12, а затем переименовали его в pxeboot.com!
3.2. Подготовка файла WIM
Что ж, теперь нам нужно создать файл winpe.wim. Мы делаем следующее:
3.2.1. Создаем файл winpehl.ini
В нем должно быть что-то вроде следующего:
Убедитесь, что он имеет формат dos (а не формат unix)
3.2.2. Создаем скрипт install.cmd
Создайте скрипт install.cmd, который позаботится о установке сразу, как будет запущен Winpe:
3.2.3. Добавляем сетевые драйверы
Идем дальше. Сетевые драйверы являются трудной темой. Вам нужны будут сетевые драйверы, которые поставляются для вашей сетевой карты, их можно скачать с сайта поставщика сетевой карты, а некоторые из них могут быть уже в дистрибутиве Windows 7 WINPE на инсталляционном носителе. Я предполагаю, что вы будете с помощью PXE (загрузка по сети) загружать виртуальную машину vmware с сетевой картой AMD (которая во многих случаях, является сетевой картой, используемой по умолчанию для новой виртуальной машины).
Если вы загрузили виртуальную машину и, когда загрузка идет из сети, то сообщается о сетевой карте Intel E1000, вам придется остановить виртуальную машину, удалить следующие строки из файла .vmx и перезапустить виртуальную машину.
Если вы теперь запустите виртуальную машину, то вам будет сообщено, что есть сетевая карта AMD . Так что теперь нам нужно драйвера windows PE для этой сетевой карты AMD. Есть станица , на которой вы можете узнать откуда их можно скачать:
Для windows PE вы можете использовать драйвера windows XP. В общем, вам нужен файл .inf и файл .sys. Файл inf обычно содержит список файлов идентификаторов сетевое устройств и соответствующих им драйверов .sys). Если вы не знаете, сетевая с каким идентификатором используется в вашей системе, то просто скопируйте в каталог /work/wim несколько драйверов (файлы inf и sys).
3.2.4. Создаем файл actionfile
Ниже указаны действия, которые нам нужно выполнить, когда из файла boot.wim создается файл winpe.wim. Вы можете захотеть отредактировать список драйверов, которые указываются в файле /work/wim/actionfile.txt. Этот файл может выглядеть следующим образом:
3.2.5. Создаем файл WIM
Теперь мы можем создать файл winpe.wim
cd /work/wim /work/bin/updatewim /work/sambashare/win7/sources/boot.wim /work/tftproot/winpe.wim /work/wim/actionfile.txt
3.3. Создание загрузочных файлов для конкретных систем
Сначала нам нужно инструментальное средство hivex. Архивы RPM, которые я использую, находятся в этом пакете .
Возможно, что для вашего любимого дистрибутива Linux вам потребуются другие пакеты с дистрибутивами. Нам нужны эти инструментальные средства для того, чтобы иметь возможность отредактировать файлы windows BCD (Boot Cofiguration Data — конфигурационные данные для загрузки). Теперь мы выполняем три операции для обеих систем, которые мы хотим установить дистанционно:
- Копируем данные Boot Cofiguration Data с установочного DVD в загрузочный каталог систем pxe
- Изменяем их для того, чтобы получить PXE BCD
- Копирует в этот каталог программу сетевой загрузки сервиса развертывания Windows (wdsnbp.com) и также и переименовываем ее в wdsnbp.0
Вы можете легко выполнить эти операции для более, чем двух систем .
4. Подготовка файлов автоматической установки
4.1. Поддерживаемый язык
Сначала узнаем, какие языки поддерживаются на данном установочном носителе.
Вы должны найти что-то вроде следующего
По-видимому, на этом DVD есть язык en-US (и еще en-us).
4.2. Определение версии ОС
Теперь нам нужно проверить, какая версия поддерживается установочным DVD
Вы должны получить нечто вроде следующего:
Так что это Windows 7 Ultimate OEM DVD с лицензией (non Volume). Нам нужна эта информация для того, чтобы иметь возможность выбрать образ в следующем разделе:
4.3. Выбор образа подходящего инсталлятора
Сначала мы сделаем дамп информации XML файла install.wim:
Вы должны получить приблизительно следующее:
Поскольку мы знаем с каким языком и какой версией windows 7 мы имеем дело, мы можем отредактировать файлы автоматической установки. Я выделил третий образ, поскольку это версия Ultimate Edition, которую мы нашли в предыдущем разделе. Это Architecture 0, что означает — x86.
4.4. Создаем/редактируем файлы автоматической установки
Файл автоматической установки может выглядеть, например, следующим образом (вероятно, вы захотите изменить значения, выделенные красным цветом):
Итак, как только вы это сделаете, вы должны быть в состоянии загрузить (загрузка pxe) новую систему, и вы должны иметь возможность выбирать из двух систем, которые вы настроили для автоматического развертывания. Если этого сделать не удастся, то, пожалуйста, перейдите к следующему разделу «Решение возникших проблем» и поделитесь своим опытом на форуме на сайте ultimatedeployment.org .
5. Решение возникших проблем
Ниже приведен упрощенный обзор процесса загрузки, через который проходят клиенты PXE, когда используется этот метод.
- C обозначает клиентскую систему (система, которая должна быть развернута)
- S обозначает сервер (систему, на которой находятся конфигурационные файлы и на которой запущены сервисы, позволяющие установить клиентскую систему)
Сервер ищет в файле находит в tftpd.log, откуда клиент загрузил свой файл wdsnbp и предполагает, что файл BCD находится в том же самом каталоге.
Клиент читает файл BCD и определяет, откуда нужно скачивать файлы boot.sdi и winpe.wim
Затем клиент загружается в Windows PE. Когда это будет сделано, то от нас потребуется подготовить следующее:
- Найти в реестре адрес IP сервера загрузки
- Найти в реестре конкретные данные о загрузке
- Загрузить сетевые драйверы и запустить сервис сети
- Переместить файлы setup.exe и sources\setup.exe на прежнее место
- Подключиться через Samba к серверу загрузки
- Разбить диск на разделы с помощью файла diskpart, который можно найти через samba на сервере загрузки
- Переместить файлы setup.exe и sources\setup.exe на прежнее место
- Удалить из реестра ответ PXE binl для того, чтобы предотвратить установку WDS вместо обычной установки
- Запустить setup.exe с файлом автоматической установки, который можно найти на сервере загрузки
Когда возникают проблемы, то, очевидно, что нужно заглянуть в следующие журнальные файлы:
- журнальный файл tftpd (/work/log/tftpd.log)
- журнальный файл dhcpd (/var/log/messages)
- журнальный файл binl (/work/log/binl.log)
Если я найду дополнительную информацию, то я ее добавлю.
Установка Windows по сети с Ubuntu PXE сервера
Итак, я плавно со своим PXE сервером развернутым на Ubuntu 18.04 Server подошел к этапу, когда нужно в дополнении к автоматизированным установкам Ubuntu 18.04 Desktop & Server дополнить функционал. Уже сделал, что можно загрузившись через LiveCD инструмент сбросить Windows пароль, проверить жесткий диск на предмет заражения вирусами т. д. А вот моя мечта это возможность устанавливать Windows 7,10 и серверную линейку из среды Ubuntu. Использовать WDS, пожалуй нет. Я специализируюсь на Ubuntu системах, а значит и пишу и делаю исходя из своего предпочтения. В этой заметке я для себя разобрал, как сделать Windows загрузку из под Ubuntu 18.04 PXE.
Подготавливаю систему Ubuntu 18.04 Server amd64 под первоначальное использование:
$ hg clone —insecure https://172.33.33.7/hg/dproject
Устанавливаю пакет Samba на нем, точнее с его помощью у меня будет файловый ресурс где будет храниться образа Windows 7, как x86/amd64:
$ sudo apt-get install samba samba-common -y
$ sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.backup
$ sudo nano /etc/samba/smb.conf
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
netbios name = pxe
map to guest = bad user
## For multiple installations the same time — not lock kernel
kernel oplocks = no
nt acl support = no
guest account = nobody
comment = Windows 7 Image
level2 oplocks = no
acl allow execute always = true
На заметку: Параметр « acl allow execute always = true » в smb.conf необходим для возможности запускать на исполнение файлы exe.
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
$ sudo mkdir -p /windows/x32
$ sudo mkdir -p /windows/x64
Монтирую ISO образ Windows 7 на каталог Samba сервиса:
$ scp /media/ekzorchik/iso/SW_DVD5_Win_Pro_7w_SP1_64BIT_Russian_-2_MLF_X17-59431.ISO ekzorchik@172.33.33.25:/home/ekzorchik
$ sudo mount -o loop SW_DVD5_Win_Pro_7w_SP1_64BIT_Russian_-2_MLF_X17-59431.ISO /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
$ sudo cp -fr /mnt/* /windows/x64/
$ scp /media/ekzorchik/iso/SW_DVD5_Win_Pro_7w_SP1_32BIT_Russian_MLF_X17-28979.ISO ekzorchik@172.33.33.25:/home/ekzorchik
$ sudo mount -o loop SW_DVD5_Win_Pro_7w_SP1_32BIT_Russian_MLF_X17-28979.ISO /mnt
$ sudo cp -fr /mnt/* /windows/x32/
$ sudo chmod -R 755 /windows/
$ sudo chown -R nobody:nogroup /windows/
$ sudo /etc/init.d/smbd restart
$ sudo /etc/init.d/nmbd restart
Устанавливаю PXE сервис:
Устанавливаю в систему пакет tftpd-hpa:
$ sudo apt-get install tftpd-hpa -y
$ sudo mkdir /media/pxeboot
$ sudo chmod -R 777 /media/pxeboot/
$ sudo chown -R nobody:nogroup /media/pxeboot/
$ sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa.backup
$ sudo nano /etc/default/tftpd-hpa
TFTP_OPTIONS=»—secure —create —verbose»
Перезапускаю сервис tftpd-hpa:
$ sudo service tftpd-hpa restart && sudo service tftpd-hpa status | head -n 5
$ sudo apt-get install pxelinux syslinux -y
$ sudo cp /usr/lib/syslinux/modules/bios/vesamenu.c32 /media/pxeboot/
$ sudo cp /usr/lib/syslinux/modules/bios/libcom32.c32 /media/pxeboot/
$ sudo cp /usr/lib/syslinux/modules/bios/libutil.c32 /media/pxeboot/
$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /media/pxeboot/
$ sudo cp /usr/lib/syslinux/memdisk /media/pxeboot/
$ sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /media/pxeboot/
$ sudo mkdir /media/pxeboot/pxelinux.cfg/
$ sudo nano /media/pxeboot/pxelinux.cfg/default
#Секция по умолчанию, если пользователь не выбрал никакого варианта или нажал
клавишу Enter
#Секция времени в секундах, в течении которого отображается загрузочное меню
#Секция отображения строки для выбора варианта загрузки (1 — view, 0 — hidden)
MENU TITLE PXE MENU
# загрузка системы с диска
LABEL Boot from first hard disk
label Install Windows 7 x32/x64
$ sudo chown -R nobody:nogroup /media/pxeboot/
$ ss -l4 | grep tftp
udp UNCONN 3072 0 0.0.0.0:tftp 0.0.0.0:*
Далее на VM под управлением Windows 7 x64 устанавливаю пакет Windows AIK (KB3AIK_RU.iso размером 1.2 Gb ) и через инструмент Deployment Tools Command Prompt
Win + Все программы — Microsoft Windows AIK — «Командная стройка средств развертывания» (запускаю через правый клик с правами администратора)
( для amd64 создаю winpe образ )
C:\Program Files\Windows AIK\Tools\PETools>copype amd64 c:\winPE_x64
c:\winPE_x64>copy «c:\Program Files\Windows AIK\Tools\PETools\amd64\winpe.wim» c:\winPE_x64\ISO\sources\Boot.wim
c:\winPE_x64>copy «c:\Program Files\Windows AIK\Tools\amd64\imagex.exe» c:\winPE_x64\ISO\
c:\winPE_x64>oscdimg -n -bC:\winPE_x64\etfsboot.com c:\winPE_x64\ISO c:\winPE_x64\winpe_amd64.iso
Computing directory information complete
Image file is 170760192 bytes
Writing 22 files in 9 directories to c:\winPE_x64\winpe_amd64.iso
Final image file is 170760192 bytes
( для x86 создаю winpe образ )
C:\Program Files\Windows AIK\Tools\PETools>copype x86 c:\winPE_x86
c:\winPE_x86>copy «c:\Program Files\Windows AIK\Tools\PETools\x86\winpe.wim» c:\winPE_x86\ISO\sources\Boot.wim
c:\winPE_x86>copy «c:\Program Files\Windows AIK\Tools\x86\imagex.exe» c:\winPE_x86\ISO\
c:\winPE_x86>oscdimg -n -bC:\winPE_x86\etfsboot.com c:\winPE_x86\ISO c:\winPE_x86\winpe_x86.iso
Computing directory information complete
Image file is 145268736 bytes
Writing 18 files in 8 directories to c:\winPE_x86\winpe_x86.iso
Final image file is 145268736 bytes
Копирую получившийся iso файл на SAMBA сервис в каталог \\172.33.33.25\install
$ sudo mkdir /media/pxeboot/windows/
$ sudo mv /windows/winpe_amd64.iso /media/pxeboot/windows/
$ sudo mv /windows/winpe_x86.iso /media/pxeboot/windows/
Теперь беру VM и выставляю ей что она сперва должна произвести загрузку по сети
Вижу запрос на нажатие клавиши нажимаю клавишу Enter и производится загрузка с диска, а диск у меня это iso образ. Тем самым стартует загрузка Windows, но не привычная установка а приглашение командной строки:
В этом приглашении следует уже подмонтировать SAMBA ресурс и запустить установку ОС, т. е. Windows 7 Pro x64
X:\windows\system32> net use M: \\172.33.33.25\install\x64
где M: — это произвольное буква на которую монтирую доступ к ресурсу.
Затем перехожу на букву M: и запускаю файл инсталляции операционной системы:
X:\windows\system32\cd /d M:
M:\>setup.exe
Указываю метод ввода (я предпочитаю чтобы дефолтным был английский язык, а не русский)
Нажимаю «Далее» — «Установить» и начинается обыденный процесс инсталляции операционной системы Windows, как если бы я просто записал образ на болванку или USB Flash Drive, выставил в BIOS с чего загружаться и загрузился.
Вообще следует разделить установку Windows в default файле:
LABEL Boot from first hard disk
LABEL Install Windows 7 Pro SP1 x64
LABEL Install Windows 7 Pro SP1 x86
Далее, для того, чтобы автоматизировать установку системы, можно с помощью «диспетчера образов системы Windows» подготовить файл ответов Autounattend.xml (именно так должен именовать файл ответов), и запускать установку с файлом ответов:
M:\setup.exe /unattend: Autounattend.xml
Исходя из этого, становится возможным на большом количестве персональных компьютеров которые необходимо вот прям, завтра, или сейчас ввести в эксплуатацию установить ось задействовав текущий PXE сервис и общий ресурс в роли SAMBA сервиса на который взгромоздить подготовленный ранее файл ответом или ставить все в ручную.
О том, как подготовить файл ответов будет в следующей заметке.
А пока я прощаюсь, на этом всё, с уважением автор блога Олло Александр aka ekzorchik