Разные заметки

понедельник, 25 февраля 2013 г.

Установка Windows 7 с помощью PXE и LINUX сервера


Дано: некий офис с компьютерами типа 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 с программами".




22 комментария:

  1. Спасибо за ман.
    Но и тут опечатки
    1)"Копируем еще один нужный файл
    copy "C:\Programm Files\Windows AIK\Tools\PETools\...."

    2)"Получилась такая картина в этой папке:
    Папки:
    fonts
    BCD
    ru-RU"
    BCD - это НЕ папка. Это файл. Что и подтверждается выводом ls -la далее по тексту.

    Ну и всё равно не работает. Последние записи в логе:
    : RRQ from 192.168.1.3 filename pxechain.com
    : RRQ from 192.168.1.3 filename pxelinux.cfg/../Boot/pxeboot.com
    : RRQ from 192.168.1.3 filename bootmgr.exe
    Т.е. по каким-то причинам загрузчик ищет этот файл не в Boot\ , а уровнем выше, рядом с папкой Boot и файлом pxechain.com

    ОтветитьУдалить
    Ответы
    1. 1) Выше написано "Далее буду приводить !ДВЕ! команды, с обеими архитектурами, для удобства copy-paste." Или укажите на опечатку

      2) поправлю

      3) Ничего не могу сказать, ман делал параллельно настройке. в принципе смотрите внимательно на пути и на то какие файлы грузит, может ошибки в настройках BCD - такое бывает, я его делал несколько раз. В начале собиралось с ошибками потом все получилось как здесь описано. Может GUID не подставили?

      Удалить
    2. Спасибо за быстрый ответ.
      1) В "Programm" две буквы m. Должна быть одна

      Уже после отправки коммента ещё раз пересмотрел Ваш лог загрузки. И добавился ещё один вопрос.
      Откуда взялись в логе файлы \boot.ini и \hiberfil.sys ? Они отсуствовали в выводе ls -la /opt/pxe/Boot/

      Удалить
    3. Исправил.
      Я видимо их добавил. так как загрузчик их пытался подгрузить. Откуда их взял? Из дистрибутива.

      Удалить
    4. Нашел рабочее решение проблемы. Павел, если вы решите добавить его в свою статью - возражать не буду. :)

      Суть проблемы: Windows не хочет грузиться при попытке её установить через pxe-меню. Без меню - работает. Т.е. невозможно было сделать меню с выбором установки из нескольких ОС (несколько Windows+Linux+tools). Только прямая загрузка без всякого выбора.

      Проблема оказалась в виндовом загрузчике pxeboot.n12, который в этой статье был переименован в pxeboot.com.
      Этот злой загрузчик, оказывается, будет работать только из корня tftp-сервера. И конструкцией
      kernel pxechain.com
      append ../Boot/pxeboot.com
      его не обманешь. Кстати, хочу обратить внимание, что в версиях syslinux 4.0.0-4.0.3 этот самый pxechain.com битый (http://www.syslinux.org/wiki/index.php/Common_Problems#pxechain.com.2FPXELINUX-4.00.2B).

      Оказалось, что из меню default можно вызвать другой tftp-сервер. Но на каждый инстальник винды плодить по tftp-серверу - это же глупо.
      Мне удалось обмануть виндовый загрузчик, вызвав тот же самый tftp-сервер.

      Сначала скопировал в корень tftp-сервера файлы pxeboot.n12 и bootmgr.exe
      cp /tftpboot/Boot/pxeboot.n12 /tftpboot/
      cp /tftpboot/Boot/bootmgr.exe /tftpboot/

      Потом поправил файл меню pxelinux.cfg/default :
      LABEL 002
      MENU LABEL ^Install Windows 7 x64
      PXE 192.168.1.3::pxeboot.n12

      И всё взлетело.

      Удалить
  2. Прочитал, сделал, работает
    Вот только никак в толк не возьму, зачем захламлять корень TFTP. Я пытался заставить работать из-под папки, но не знаю к какому виду надо привести команды создания загрузчика
    кстати о птичках (типа автоматизация процесса)
    createbcd.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" %%i in ('bcdedit -store %1\BCD -create /d "MyWinPE 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 VISTA BootManager"
    bcdedit -store %1\BCD -set {bootmgr} timeout 30
    bcdedit -store %1\BCD -set {bootmgr} displayorder %guid%

    ОтветитьУдалить
    Ответы
    1. Насчет корня TFTP - там не все файлы удастся спрятать в папки, загрузчик ищет в корне. потому так и сделано.
      Автоматизацию, при случае, проверю. Спасибо!

      Удалить
  3. со слов
    5. Загрузчик BCD
    перестал понимать. где создавать? если в том же окне - не катит. если найти все же файл bsdedit и продолжить - в целом файл BCD получается) вроде кидаю его... но все равно не грузится ничего(
    кстати, зачем самба то нажна была?

    ОтветитьУдалить
    Ответы
    1. После слов
      >Создаем загрузчик:

      даны команды, для окна консоли, которая уже открыта.

      > но все равно не грузится ничего(
      значит что-то не так делаете.

      > кстати, зачем самба то нажна была?
      Для того чтобы загрузчик мог считывать файлы дистрибутива по сети. Сам он загружается по TFTP но остальные файлы так считывать не может.

      Удалить
  4. и интеграция дров ругается. оишбка 0x80010105

    ОтветитьУдалить
    Ответы
    1. Смотрите вот эту статью - http://silver979.blogspot.ru/2012/06/windows-7.html
      Там все разжевано :)

      Удалить
  5. вот до сюда у меня лог получается(
    filename pxelinux.cfg/../Boot/pxeboot.com

    ОтветитьУдалить
    Ответы
    1. Советую воспроизвести структуру файлов в точности как в статье.
      А потом разбираться, откуда что берет загрузчик и как правильно прописать ссылки в него.

      Удалить
  6. вот у меня на этом моменте останавливается
    RRQ from 192.168.1.13 filename \Boot\winpe.wim remapped to /Boot/winpe.wim
    Jul 18 10:12:58 detroit in.tftpd[5121]: tftp: client does not accept options
    Jul 18 10:12:58 detroit in.tftpd[5122]: RRQ from 192.168.1.13 filename \boot\boot.sdi remapped to /boot/boot.sdi
    Jul 18 10:12:58 detroit in.tftpd[5122]: sending NAK (1, File not found) to 192.168.1.13

    а на загружаемой машине
    status: 0xc000000f

    загрузчик BCD пересоздавал несколько раз(


    ОтветитьУдалить
    Ответы
    1. Покажите содержимое каталога куда смотрит TFTP сервер. В данной статье это "/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

      Удалить
  7. все получилось. в некоторых моментах хоетл сумничать (к примеру файл boot.sdi взял не там, ставил загрузку не с файла, который у Вас указан)...
    в целом, получилось 3 скрипта.
    раз.
    imagex /mountrw winpe.wim 1 mount
    copy mount\Windows\Boot\PXE\*.* d:\tftp\Boot
    rem copy /y d:\winpe\ISO\boot\boot.sdi d:\tftp\Boot
    copy "c:\Program Files\Windows AIK\Tools\PETools\x86\boot\boot.sdi" d:\tftp\Boot
    dism /image:d:\winpe\mount /add-driver /driver:d:\Inst\drv\L /recurse
    echo net use z: \\192.168.1.1\w7$ >> d:\winpe\mount\windows\system32\startnet.cmd
    echo z:\setup.exe >> d:\winpe\mount\windows\system32\startnet.cmd
    imagex /unmount d:\winpe\mount /commit
    copy d:\winpe\winpe.wim d:\tftp\Boot\winpe.wim

    два.
    set i=d:\tftp\Boot

    bcdedit -createstore %i%\BCD
    bcdedit -store %i%\BCD -create {ramdiskoptions} /d "Ramdisk options"
    bcdedit -store %i%\BCD -set {ramdiskoptions} ramdisksdidevice Boot
    bcdedit -store %i%\BCD -set {ramdiskoptions} ramdisksdipath \Boot\boot.sdi
    bcdedit -store %i%\BCD -create /d "MyWinPE" /application osloader > guid.txt
    notepad guid.txt

    и три. т.к. guid выдается строкой с русскими буквами...
    set guid={043131e8-0e55-11e4-8280-bb5c29b3e422}
    set i=d:\tftp\Boot

    bcdedit -store %i%\BCD -set %guid% systemroot \Windows
    bcdedit -store %i%\BCD -set %guid% detecthal Yes
    bcdedit -store %i%\BCD -set %guid% winpe Yes
    bcdedit -store %i%\BCD -set %guid% osdevice ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
    bcdedit -store %i%\BCD -set %guid% device ramdisk=[boot]\Boot\winpe.wim,{ramdiskoptions}
    bcdedit -store %i%\BCD -create {bootmgr} /d "Windows 7 Boot Manager"
    bcdedit -store %i%\BCD -set {bootmgr} timeout 30
    bcdedit -store %i%\BCD -set {bootmgr} displayorder %guid%

    ОтветитьУдалить
    Ответы
    1. Я так понял вы на Windows делаете?
      Просто под Linux названия в пути разным регистром - разный путь.

      >RRQ from 192.168.1.13 filename \Boot\winpe.wim remapped to /Boot/winpe.wim

      >Jul 18 10:12:58 detroit in.tftpd[5122]: RRQ from 192.168.1.13 filename \boot\boot.sdi remapped to /boot/boot.sdi

      Сравниет пути к файлам. Это из Вашего предыдущего комента.

      А так, получилось - и хорошо :) можете обкатать и свою шпаргалку написать, если условия реализации отличаются.

      Удалить
  8. У меня получилась такая беда и в чем причина не ясно...
    Старт загрузки по сети и получение меню:
    Jun 28 16:42:57 localhost in.tftpd[3647]: RRQ from 192.168.10.152 filename pxelinux.0
    Jun 28 16:42:57 localhost in.tftpd[3648]: RRQ from 192.168.10.152 filename pxelinux.cfg/dad61656-5cad-4aa4-9587-144507470021
    Jun 28 16:42:57 localhost in.tftpd[3649]: RRQ from 192.168.10.152 filename pxelinux.cfg/01-08-00-27-eb-d0-42
    Jun 28 16:42:57 localhost in.tftpd[3650]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A80A98
    Jun 28 16:42:57 localhost in.tftpd[3651]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A80A9
    Jun 28 16:42:57 localhost in.tftpd[3652]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A80A
    Jun 28 16:42:57 localhost in.tftpd[3653]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A80
    Jun 28 16:42:57 localhost in.tftpd[3654]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A8
    Jun 28 16:42:57 localhost in.tftpd[3655]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0A
    Jun 28 16:42:57 localhost in.tftpd[3656]: RRQ from 192.168.10.152 filename pxelinux.cfg/C0
    Jun 28 16:42:57 localhost in.tftpd[3657]: RRQ from 192.168.10.152 filename pxelinux.cfg/C
    Jun 28 16:42:57 localhost in.tftpd[3658]: RRQ from 192.168.10.152 filename pxelinux.cfg/default
    Jun 28 16:42:57 localhost in.tftpd[3659]: RRQ from 192.168.10.152 filename pxelinux.cfg/menu.c32
    Jun 28 16:42:57 localhost in.tftpd[3660]: RRQ from 192.168.10.152 filename pxelinux.cfg/default


    Выбор пункта инсталяции Windows
    Jun 28 16:43:04 localhost in.tftpd[3661]: RRQ from 192.168.10.152 filename pxechain.com
    Jun 28 16:43:04 localhost in.tftpd[3662]: RRQ from 192.168.10.152 filename pxelinux.cfg/../Boot/pxeboot.n12
    Jun 28 16:43:04 localhost in.tftpd[3663]: RRQ from 192.168.10.152 filename bootmgr.exe
    Jun 28 16:43:04 localhost in.tftpd[3664]: RRQ from 192.168.10.152 filename \Boot\Fonts\wgl4_boot.ttf
    Jun 28 16:43:04 localhost in.tftpd[3665]: RRQ from 192.168.10.152 filename \boot.ini


    Происходит затык, вылазит ошибка инсталятора (Filename: \Boot\BCD Status: 0xc000000f) и вместе с этим в лог:
    Jun 28 16:43:20 localhost in.tftpd[3666]: RRQ from 192.168.10.152 filename \Boot\BCD
    Jun 28 16:43:20 localhost in.tftpd[3667]: RRQ from 192.168.10.152 filename \Boot\Fonts\wgl4_boot.ttf

    Что это? Как это побороть? Почему вообще затык на несуществующем файле?

    ОтветитьУдалить
  9. Как правильно написать следующие команды ?
    bcdedit -store c:\BCD -set {ef40ab64-7ce9-11e2-8487-a0b3ccc2b14c} systemroot \Windows
    или
    bcdedit -store c:\BCD -set ef40ab64-7ce9-11e2-8487-a0b3ccc2b14c systemroot \Windows

    и ещё, у меня нет файла wdsmgfw.efi

    ОтветитьУдалить
  10. У меня после запуска wpeinit наглухо зависает WinPE, есть ли какое-либо решение?

    ОтветитьУдалить