How-To PXE+TFTP - czyli instalacja Windows przez sieć

avis

Network Architect
Q's Professional
Dec 4, 2010
364
110
43
52°17'21.9"N 21°02'45.2"E
QNAP
TVS-x71U
Ethernet
1 GbE
Na początek jakby ktoś miał jakieś ale co do tematu to najpierw dam w ryj a potem zmienię jeżeli sugestia będzie słuszna i do przyjęcia :p

No więc ostatnio zainspirowany usługą Windows Deployment Services oferowaną przez serwerowe wersje systemu Windows, przysiadłem i postanowiłem zrobić Qnap Deployment Services :p i niestety ale udało się, dlatego poniżej zamieszczam poradnik jak to cudo ogarnąć :)

Co będzie nam potrzebne:

NAS firmy QNAP
Nośnik instalacyjny Windows Vista, 7, 8 lub 8.1
Obraz Windows Preboot Environement (WinPE) jak go utworzyć przy użyciu Automated Installation Kit znajdziecie tutaj:WinPE: Create a Boot CD, DVD, ISO, or VHD lub pobierzecie stąd dla wersji x86 lub stąd dla wersji x64

Na potrzeby tego poradnika wykorzystałem wersje x86 WinPE



Zaczynamy

Na początek stwórzmy na dysku C:\ dwa katalogi: "image" i "mount"
Nastepnie z nośnika z WinPE do katalogu mount kopiujemy plik boot.wim. Plik ten znajdziemy w katalogu "sources".
Otwieramy wiersz poleceń jako administrator i montujemy nasz plik boot.wim poleceniem:

W systemie Windows 8, 8.1
Code:
Dism /Mount-Image /ImageFile:"C:\Image\boot.wim" /Index:1 /MountDir:C:\mount
W systemie Windows 7
Code:
DISM /Mount-Wim /WimFile:C:\Image\boot.wim /Index:1 /MountDir:C:\mount

CMD4.PNG

Kiedy już zamontujemy obraz musimy zatroszczyć się o katalog dla serwera tftp. W tym celu otwieramy interfejs WEB naszego NAS-a i w panelu sterowania przechodzimy do zakładki: "ustawienia uprawnień" a następnie wybieramy opcję "Foldery współdzielone". Tam tworzymy nowy folder udostępniony. W moim przypadku wygląda to tak:

CMD5.PNG


CMD19.PNG

Gdy mamy już utworzony udział sieciowy przechodzimy do katalogu w którym zamontowaliśmy nasz obraz (C:\mount) a tam dalej do: Windows\Boot\PXE i kopiujemy z niego wszystkie pliki (nie katalogi) do naszego udziału tftproot.

CMD8.PNG

Piki do skopiowania​

Po tej operacji odmontowujemy plik boot.wim poleceniem:

W Windows 8, 8.1
Code:
Dism /Unmount-Image /MountDir:C:\mount /Discard
W Windows 7
Code:
DISM /Unmount-Wim  /MountDir:C:\mount /Discard

CMD10.PNG

(UWAGA!!! aby plik został odmontowany poprawnie należy zamknąć okna explorera odwołujące się do katalogów w folderze mount).


Następnie kopiujemy do udziału sieciowego zawartość całego nośnika instalacyjnego (UWAGA!!! jeżeli zaznaczyliśmy tak jak ja że folder ma być ukryty dostać sie do niego możemy wpisując w Start->uruchom polecenie: \\<adres ip NAS>\<nazwa folderu> np: \\10.0.0.2\tftproot).

CMD9.PNG

zawartość udziału sieciowego​

Gdy skończymy kopiować pliki z nośnika instalacyjnego kopiujemy nasz plik boot.wim z folderu image do folderu "sources" znajdującego się w naszym udziale sieciowym zamieniając tym samym oryginalny plik.

Na tym etapie mamy już przygotowany system plików, przechodzimy więc do ustawienia naszego serwera NAS.
Na początek wchodzimy w panel sterowania -> serwery aplikacji -> serwer TFTP. Tu włączamy nasz serwer TFTP a jako katalog główny ustawiamy nasz udział sieciowy.

CMD11.PNG

Ostatnim krokiem mającym na celu uruchomienie naszego serwera instalacji zdalnej jest włączenie serwera DHCP na QNAP-ie i ustawienie pliku który pozwoli na bootowanie przez sieć. W tym calu panelu sterowania przechodzimy do zakładki ustawienia sieciowe -> sieć i tu klikamy na ikonkę edycji przy interfejsie sieciowym

CMD12.PNG

W oknie które nam się pojawi w zakładce serwer DHCP włączamy serwer DHCP na QNAP-ie i w pole plik startowy wpisujemy: "wdsnbp.com" (UWAGA!!! przed włączeniem serwera DHCP należy wyłączyć inne serwery DHCP pracujące w sieci. Nie wyłączenie innego serwera DHCP może spowodować konflikty oraz problemy w funkcjonowaniu sieci)

CMD13.PNG

No i to byłoby na tyle w kwesti ustawień, możemy przejść do testów. Do tego celu potrzebny będzie komputer wyposażony w karte sieciową z opcją botowania przez sieć (czasem tą opcję należy włączyć w biosie ale to już musicie znaleźć sami) i próbujemy uruchomić komputer. Jeżeli wszystko pójdzie ok powinniśmy ujrzeć taki ekran:

CMD14.PNG

i tu należy klepnąć klawisz F12 aby procedura bootowania przeszła do kolejnego etapu

CMD15.PNG

Po uruchomieniu komputera zobaczymy ekran z wierszem poleceń. W wierszu poleceń mapujemy nasz dysk poleceniem: net use y: \\<adres ip serwera NAS>\<udział sieciowy> np:

Code:
net use y: \\10.0.0.2\tftproot

CMD16.PNG

Po zamontowaniu dysku sieciowego przechodzimy na niego (wpisując jego literę np: y:) i uruchamiamy instalatora wydając polecenie: setup.exe. Od tego momentu cała instalacja wygląda jak ta przeprowadzana z dysku DVD lub USB.

CMD17.PNG


CMD18.PNG

I to by było na tyle ot cała filozofia. Podejrzewam że ci bardziej dociekliwi zauważą listę ze screenu na której jest sporo więcej edycji Windowsa 8.1 niż na normalnym nośniku i spytają jak to to tak? i że oni też tak chcą. Odrazu odpowiem, powiem jak to zrobić ale dziś mi się skończyła wena. Dla bardziej dociekliwych podpowiem że chodzi o plik install.wim i dodawanie do niego obrazów instalacyjnych.

Edit:

Usiadłem cichutko w kąciku, pomyślałem i naszła mnie wena. Więc wracając do wyżej wspomnianych wersji, to żeby mieć taką ładną listę trzeba je upakować w jeden plik install wim. No więc jak to zrobić? Nic prostszego bierzemy nośniki z różnymi OS-ami np Windows vista, 7, 8 i co tam jeszcze sobie wymarzycie (oczywiście tylko i wyłącznie dotyczy to windowsów od Visty w górę) i kopiujemy z tychże nośników pliki install.wim do oddzielnych katalogów (jakby jakiś geniusz wpadł na pomysł że skopiuje je wszystkie do jednego katalogu to niech się nie zdziwi że każdy następny kopiowany plik nadpisze mu poprzedni :p no chyba że wcześniej pozmienia nazwy). OK no więc powiedzmy że chcemy mieć win7 i win8 w wersjach x86 i x64 w jednym pliku install wim. Tworzymy na dysku c:\ np strukturę katalogów:

install1.PNG
Do każdego z nich kopiujemy odpowiednio plik install.wim (chyba nie muszę tłumaczyć że z nośnika z win 7 x86 plik install.wim kopiujemy do katalogu win7x86 itd)
Teraz warto by było dowiedzieć się jakie wersje zawiera każdy z pilików, aby to zrobić wydajemy w wierszu poleceń (uruchamiamy go jako administrator) następujące polecenia:

Code:
dism /get-wiminfo /wimfile:"c:\win7x86\install.wim" >> c:\win7x86\info.txt
dism /get-wiminfo /wimfile:"c:\win7x64\install.wim" >> c:\win7x64\info.txt
dism /get-wiminfo /wimfile:"c:\win8x86\install.wim" >> c:\win8x86\info.txt
dism /get-wiminfo /wimfile:"c:\win8x64\install.wim" >> c:\win8x64\info.txt

Dzięki temu w każdym z katalogów pojawi się plik zawierający informacje o tym jakie wersje systemów znajdują się w danym pliku install.wim

Przykładowy plik:

install2.PNG
Jak widać każda wersja systemu ma swój własny numer indexu i to jest właśnie kluczem do sukcesu. Tak więc aby dodawanie kolejnych wersji do nowego pliku install.wim. W tym celu wydajemy w CMD polecenia:

Code:
Dism /Export-Image /SourceImageFile:c:\win8x86\install.wim /SourceIndex:1 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Professional x86
Dism /Export-Image /SourceImageFile:c:\win8x86\install.wim /SourceIndex:2 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Core x86"

Teraz szybki opis tych poleceń:
DISM -> poczytajcie na Technecie co to jest a jak was to nie interesuje to przyjmijcie że tak ma być i już
/Export-Image -> przełącznik powodujący eksportowanie obrazu do nowego pliku
/SourceImageFile -> plik źródłowy
/SourceIndex: -> index obrazu w pliku źródłowym (to o czym pisałem że jest kluczem w całej zabawie)
/DestinationImageFile: -> plik docelowy (czyli ten gdzie będą wszystkie wyeksportowane obrazy)
/DestinationName: -> Przyjazna nazwa możecie wpisać co chcecie (UWAGA!!! jeżeli nazwa zawiera spacje to używacie " ") :p

No więc koniec pierdoł i do rzeczy macie tu schemat, nie chce mi się pisać poleceń dla każdego pliku install wim dlatego zostawiam to waszej inwencji. Na koniec dodam że nie musicie eksportować plików po kolei tak jak są one w oryginalnym obrazie możecie wachlować ich ustawieniem do woli np:

Code:
Dism /Export-Image /SourceImageFile:c:\win8x86\install.wim /SourceIndex:1 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Professional x86"
Dism /Export-Image /SourceImageFile:c:\win8x64\install.wim /SourceIndex:1 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Professional x64"
Dism /Export-Image /SourceImageFile:c:\win8x86\install.wim /SourceIndex:2 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Core x86"
Dism /Export-Image /SourceImageFile:c:\win8x64\install.wim /SourceIndex:2 /DestinationImageFile:c:\install.wim /DestinationName:"Windows 8.1 Core x64"

W wyniku wykonania tego polecenia dostaniecie plik install.wim zawierający 4 obrazy instalacyjne ustawione kolejno:

Windows 8.1 Professional x86
Windows 8.1 Professional x64
Windows 8.1 Core x86
Windows 8.1 Core x64

I to już cała filozofia

PS.
Każdy wyeksportowany obraz do nowego pliku install.wim dostaje w nim kolejny numer indeksu które nijak się nie maja do oryginalnych plików.

Następny PS.
Polecam w katalogu sources na waszym udziale serwera tftp utworzyć plik ei.cfg z zawartością:

[Channel]
Retail
[VL]
0

Dzięki temu będziecie mieli możliwość wyboru systemu który chcecie zainstalować a dodatkowo podczas instalacji nie będzie wymagany klucz produktu. Szczególnie przydatne przy Win 8 :p
 
WinPE 32 bit ? .... @avis od zawsze 64bitowe ... jak ja dawno nie widzialem 32 bitowego Wina ...
druga rzecz przydałoby się menu do wyboru 32/64 PE ;)

Dla bardziej dociekliwych podpowiem że chodzi o plik install.wim i dodawanie do niego obrazów instalacyjnych.
Pochwal się blogiem :D

PS: a nie prosciej jakiego batcha po odpaleniu WinPE dodać ?
 
WinPE 32 bit ? .... @avis od zawsze 64bitowe ... jak ja dawno nie widzialem 32 bitowego Wina ...
Dlatego 32 bit bo ogarnia i 32 bitowe wersje i 64 szczerze mówiąc nie testowałem z wersja 64 bitową. Poza tym mam taba którego UEFI nie ogarnia 64 bitowego Windowsa 8.1

druga rzecz przydałoby się menu do wyboru 32/64 PE
okulary ci sprezentować?? :p popatrz na listę systemów na ostatnim screenie :p
 
Sam se kup i przeczytaj sam jeszcze raz raz
ja mówię o wyborze WinPE a ty mi pokazujesz listę obrazów z pliku install.wim !
 
O to z ty trochę więcej jest zachodu bo trzeba zagłębić się w plik BCD a to już raczej wyższa szkoła jazdy a poradnik miał być dla prostych ludzi.
BTW ostatnio jak grzebałem w BCD po kilku (beer)ch to mi się notebook przestał uruchamiać :p

a nie prosciej jakiego batcha po odpaleniu WinPE dodać ?

Prościej ale co ja będę o wszystkim pisał niech sobie poszukają to nie Technet tylko forum Qnapa
Wlaśnie jestem na etapie ulepszania mojego poradnika i tworzenia wersji z boot menu jak skończe to ogarniać to dopisze co i jak. Narazie wygląda to tak:

menu.PNG
 
  • Like
Reactions: hans
Wlaśnie jestem na etapie ulepszania mojego poradnika i tworzenia wersji z boot menu jak skończe to ogarniać to dopisze co i jak
Super poradnik! Dzięki!
@avis A udało Ci się już może skończyć wspomniany poradnik? :)
A tutaj konfiguracja DHCP na routerze z OpenWRT
Bash:
# cat /etc/config/dhcp

...

config boot
        option filename 'wdsnbp.com'
        option servername 'hostname_qnapa'
        option serveraddress 'ip_qnapa'

...

Dzięki takiej konfiguracji (bądź konfiguracji Mikrotika wskazanej przez @Silas Mariusz), nie ma konieczności uruchamiania serwera DHCP na Qnapie (jak to zostało pokazane w niniejszym How-To).
 
Code:
/ ip dhcp-server option
add name="tftp-silasa" code=66 value="'10.100.200.10'"

Przyjęło by również dziesiętne gdybyś użył " oraz '

Parameter's value.

Starting from v6.8 available data types for options are:

  • 0xXXXX - hex string (works also in v5)
  • 'XXXXX' - string (works also in v5 but without ' ' around the text)
  • $(XXXXX) - variable (currently there are no variables for server)
  • '10.10.10.10' - IP address
  • s'10.10.10.10' - IP address converted to string
  • '10' - decimal number
  • s'10' - decimal number converted to string
Now it is also possible to combine data types into one, for example: "0x01'vards'$(HOSTNAME)"

For example if HOSTNAME is 'kvm', then raw value will be 0x0176617264736b766d
 
postąpiłem wg tutoriala i przy próbie połączenia się wyrzuca bład ( ARP timeout pxe) -> zdjęcie w poście. Zaistalowałem wersje WinPE x64
zna ktoś rozwiązanie problemu ?

20151117_150811.jpg
 
Adres IP QNAPa nie jest zgodny z tym co jest zapisane w konfiguracji PXE (parametr w opcjach serwera DHCP - next server).

View attachment 14030
dzięki :) wszystko działa jak należy, póki co chciałem zainstalować WIN 7 x86 bit, a mam WinPE x64, więc nie jest to możliwe. Na dzień dzisiejszy jeśli chciałbym zainstalować WIN7 x86 to muszę cały tutorial od nowa wdrożyć uwzględniając wersje docelowego systemu?
 
O to z ty trochę więcej jest zachodu bo trzeba zagłębić się w plik BCD a to już raczej wyższa szkoła jazdy a poradnik miał być dla prostych ludzi.
BTW ostatnio jak grzebałem w BCD po kilku (beer)ch to mi się notebook przestał uruchamiać :p

a nie prosciej jakiego batcha po odpaleniu WinPE dodać ?

Prościej ale co ja będę o wszystkim pisał niech sobie poszukają to nie Technet tylko forum Qnapa
Wlaśnie jestem na etapie ulepszania mojego poradnika i tworzenia wersji z boot menu jak skończe to ogarniać to dopisze co i jak. Narazie wygląda to tak:

View attachment 8145
czekamy :)
 
pytanie. serwer DHCP musi być na QNAP-ie ? a jesli domyslnie DHCP jest na routerze ?
 

Users search this thread by keywords

  1. tftp
  2. serwera TFTP dla PXE boot to
  3. NetBootXYZ
  4. poradnik
  5. https://forum.qnap.net.pl/threads/pxe-tftp-czyli-instalacja-windows-przez-sie%C4%87.6120/