Skocz do zawartości

Instalacja systemu z plików wim (zautomatyzowana)


maggreg

Rekomendowane odpowiedzi

Nosiłem się z myślą o napisaniu tego tematu już jakiś czas ale jakoś zawsze było coś ważniejszego/ciekawszego.

Ostatni jednak spotkał mnie wysyp tematów sprowadzających się mniej więcej do jednego - jak zainstalować windows w trybie efi, płyta nie chce się bootować odpowiednio, nie widzi dysku itp.

 

Oczywiście całość sprowadza się do bardzo prostych czynności:

Ustaw dysk (diskpart itp.) > przywróć obraz (dism, imagex) > ustaw rozruch (bcdboot, bcdedit + ew. skrypty).

Opis metody ręcznej można znaleźć na tysiącach forów o tematyce it również na fixitpc, skupię się na metodzie automatycznej (czy też pół automatycznej - to zależy jak sobie ustawimy całe środowisko).

 

Odpowiednie skrypty są dostępne już od dawna w Microsoft Docs:

 

Sample: Apply Images on a UEFI-based Computer by Using ImageX

 

ale powiedzmy sobie - można to zrobić lepiej, bardziej zautomatyzować, uprościć, uczynić bardziej uniwersalnym i w końcu uatrakcyjnić (a czemu nie).

 

Dlatego pozwolę sobie przedstawić własną wersję skryptu:

 

  Pokaż ukrytą zawartość

 

Zewnętrzny link (na wypadek problemow z kodowaniem znaków w skrypcie).

 

Jaka przewaga (poza upiększeniem) w stosunku do wersji technet wynika z mojego skryptu:

1. Skrypt pozwala wybrać między trybem instalacji efi i legacy (niezależnie od tego w jekim trybie wystartowało środowisko winpe).

2. Pozwala wybrać index obrazu (czyli instalować z czystych wim od ms).

3. Templaty dla dysku z utworzeniem obszaru dla recovery, samego winre lub bez.

4. Możliwość pominięcia templatów i wybrania własnego pliku konfiguracyjnego.

 

Co jest potrzebne:

1. Środowisko WinPE - najlepiej w najnowszej wersji, może być gołe (bez pakietów WinPE_OCs), może być środowisko z płyty instalacyjnej windowsa.

2. Pliki wim z płyt instalacyjnych bądź samodzielnie przygotowane/przechwycone.

Nie ma różnicy czy środowisko WinPe wystartujemy z sieci (po pxe) z pena czy też z płyty.

 

Użycie skryptu jest banalnie proste - wystarczy wydać komendę:

 

install.cmd ścieżka\install.wim 3

 

gdzie:

1. install.cmd > to nazwa pod jaką zapisany jest powyższy skrypt

2. ścieżka\install.wim > to nazwa naszego pliku wim wraz ze ścieżką (może się znajdować w tym samym katalogu w którym mamy skrypt - wtedy ścieżka jest niepotrzebna)

3. 3 > opcjonalny numer indexu konkretnego obrazu w pliku wim, jeżeli nie podamy tego parametru przywrócony zostanie obraz pierwszy (wygodne dla własnoręcznie przygotowanych instalek gdzie poszczególne obrazy najczęściej trzymamy w osobnych plikach.

 

Jakie obrazy (i ich indeksy) zawiera plik wim możemy zawsze sprawdzić komendą:

 

dism /get-wiminfo /wimfile:ścieżka\install.wim

 

edit 18.10.2016

Mała zmiana w skrypcie - ponieważ skrypt zakładał konfigurację identyczną z moją odwoływał się w paru miejscach "bezwzględnie" do napędu N: - poprawione na odwołanie względne.

 

cdn.

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

Następnie skrypt zapyta nas o tryb instalacji (legacy czy efi), "y" lub "t" oznacza instalację w trybie efi (nie ma znaczenia wielkość wpisanej litery), inny wpis bądź pozostawienie pustej pozycji oznacza instalację w trybie legacy.

 

Po zatwierdzeniu wyboru przejdziemy do następnej decyzji, skrypt zaproponuje nam wybór jednego z templatów dla podziału dysku bądź wybór zewnętrznej konfiguracji.

Ustawione domyślnie templaty kasują zawartość dysku więc są przeznaczone dla świeżej instalacji w innych wypadkach należy skorzystać z pliku konfiguracyjnego.

Możemy dokonać następujących wyborów:

A: Partycja rozruchowa 512MB, partycja recovery 15GB* na końcu dysku,w przypadku instalacji efi partycja MSR 100MB, reszta dysku partycja dla windowsa.

B: Partycja rozruchowa 512MB, partycja dla winre 1GB* na końcu dysku,w przypadku instalacji efi partycja MSR 100MB, reszta dysku partycja dla windowsa.

Z: Wybór zewnętrznej konfiguracji.

Inny wybór bądź pozostawienie pustej pozycji: Partycja rozruchowa 512MB, w przypadku instalacji efi partycja MSR 100MB, reszta dysku partycja dla windowsa.

 

Przykładowy zewnętrzny konfig (zapisany jako custom.txt w ścieżce z której uruchamiamy skrypt) musi być zgodny z założeniami skryptu czyli partycja rozruchowa musi mieć literę "s:", partycja z windowsem literę "w:" i ew. partycja recovery literę "r:"

Dobrze też zachować nazewnictwo jak w poniższym przykładzie gdyż (jeżeli będzie zainteresowani) w przyszłości udostępnię skrypty dla recovery i innych prac przygotowawczych przydatnych w środowisku produkcji/serwisu komputerów.

 

Przykładowy custom.txt:

 

  Pokaż ukrytą zawartość

 

Oczywiście templaty można sobie wy edytować do własnych potrzeb, również wybór programu którym przywracamy obraz.

W skrypcie są trzy opcje: dism, imagex i zewnętrzne narzędzie imlib-imagex.exe.

imlib-imagex.exe możemy ściągnąć z poniższego linku:

https://wimlib.net/

 

Sam program w kwestii przywracania niewiele wnosi ale posiada kilka opcji których próżno szukać w narzędziach ms jak choćby możliwość dodawania i kasowania plików w obrazie bez potrzeby jego montowania, optymalizacja/przepakowania plików wim (pozwala np. wyczyścić nadpisane pliki).

 

*ew. opis co z tym dalej zrobić uzależniam od waszego zainteresowania tematem.

cdn.

Odnośnik do komentarza

W tym poście zamieszczę obrazki z takiej przykładowej instalacji, środowisko winpe uruchomione z mojego serwera NAS, również obrazy wim i skrypt znajdują się na tym serwerze. Winpe jest skonfigurowany tak że automatycznie przypisuje odpowiednią ścieżkę do katalogu ze skryptem (jeżeli będzie takie życzenie mogę opisać jak to ustawić, zainteresowanym osobom służę również pomocą w skonfigurowaniu serwera NAS - i nie tylko - pod usługi pxe/tftp).

 

Instalujemy windows 10 pro w najnowszej wersji:

post-67-0-05740000-1476129397_thumb.png

Wybieramy instalację efi (lewy) i układ partycji "B" (prawy):

post-67-0-14940000-1476129398_thumb.png post-67-0-80140000-1476129400_thumb.png

Samo przywracanie na obrazkach widać efekt działania zewnętrznej komendy "imlib-imagex.exe"(lewy) i wbudowanej dism (prawy):

post-67-0-25380000-1476129401_thumb.png post-67-0-82020000-1476130117_thumb.png

System się przywrócił można zrestartować:

post-67-0-61260000-1476129401_thumb.png post-67-0-92460000-1476129401_thumb.png

 

Reszta wygląda jak standardowa instalacja z płyty (obee itp).

post-67-0-17180000-1476132618_thumb.png post-67-0-51500000-1476132618_thumb.png

cdn.

Odnośnik do komentarza

Skoro już próbujemy sobie uprościć życie to czemu nie skorzystać z opcji instalacji nienadzorowanej, jak to zrobić skoro nie korzystamy z firmowego instalatora?

Wbrew pozorom bardzo prosto, otóż wystarczy skopiować nasz plik do ścieżki Windows\Panther jako "unattend.xml".

Przykład komendy która to zrobi (zwracam uwagę na gwiazdkę na końcu, jest to nieudokumentowana a przydatna opcja xcopy):

 

@xcopy /cherky N:\un.xml W:\Windows\Panther\unattend.xml*

 

Powiedzmy, że chcemy pominąć oobe i zalogować się automatycznie jako administrator (konto zostanie aktywowane):

 

  Pokaż ukrytą zawartość

 

dodatkowo ustawiamy sobie też kilka opcji związanych z zasilaniem.

 

Jeżeli zaś chcemy założyć nowego użytkownika i włączyć dla niego automatyczne logowanie (w tym przypadku z pustym hasłem):

 

  Pokaż ukrytą zawartość

 

 

Oczywiście niezależnie jaki sobie plik odpowiedzi ustawimy pamiętajmy o jednym, faza winpe została przez nas pominięta więc jej umieszczanie w pliku nie ma sensu.

 

 

Proponuję analizę skryptu install.cmd nawet osobom które nie są zainteresowane instalacją systemów, jest w nim użyte kilka trików których opis trudno wyszperać w internecie (są ale się urywają :)), mam na myśli:

pętle wielowarunkowe, wyciąganie fragmentów odpowiedzi zwracany przez komendy w pętlach for, wierszowa obsługa diskparta, polskie znaki w skrypcie.

 

pzdr

Odnośnik do komentarza

Przykładowy filmik jak taka instalacja wygląda - bez cięć więc proponuję sobie przewijać (całość <8min) - zamieściłem w czasie rzeczywistym żeby można było sobie porównać długość poszczególnych etapów.

 

 

Startujemy z sieci w trybie legacy, menu w grub4dos plus chainload syslinux - właściwie lpxelinux który obsługuje transfer po http, znacznie szybszy od tftp.

Sam chain dlatego, że winpe jest ładowane z pośrednictwem "wimboot" który bardzo przyspiesza start samego pe.

Sam system instalowany jako efi.

 

Dodatkowo mała zmiana w głównym skrypcie więc jak ktoś ściągnął radzę sięgnąć ponownie do pierwszego postu.

 

pzdr

Odnośnik do komentarza

Wywołany do tablicy przez kolegę z innego forum "dorobiłem" skrypt tworzący menu dostępnych do instalacji obrazów.

Skrypt przeczesuje podany na początku w zmiennej katalog pod kątem plików wim i wyświetla wszystkie dostępne w nich obrazy.

 

Wygląda to tak:

post-67-0-59770000-1476811426_thumb.png post-67-0-21690000-1476811430_thumb.png

 

Jako odpowiedź podajemy numer obraz z kolumny Lp., skrypt jrszcze się upewni, że wybór jest prawidłowy, jeżeli potwierdzimy wywoła skrypt główny.

 

 

  Pokaż ukrytą zawartość

 

 

Zewnętrzny link

 

Katalog z obrazami ustawiamy w linii:

@set "katalog=!cd!obrazy"

Może to byś ścieżka względna, bezwzględna jak i bezpośrednio plik wim.

 

Kod odpowiedzialny za ustawienie wyniku w kolumnach to gotowiec znaleziony w sieci.

 

Uwaga - zarówno skrypt główny jak i pomocniczy zakładają, że pracujemy w systemie (winpe) anglojęzycznym w przeciwnym wypadku niektóre linijki będą niewłaściwe - najczęściej chodzi o ustawienia "tokens" dla pętli "for" czy też argumenty dla komendy "find".

 

np.:

@for /f "tokens=3,* delims= " %%G in ('call dism /get-wiminfo /wimfile:%wimfile%  ^| find /i "index"') do (call :do_set2 "%%G") 

vs

@for /f "tokens=2,* delims= " %%G in ('call dism /get-wiminfo /wimfile:%wimfile%  ^| find /i "indeks"') do (call :do_set2 "%%G") 

pzdr

Odnośnik do komentarza

Opis w drugiej kolumnie listingu z poprzedniego postu jest tworzony na podstawie zmiennej "description" (w wersji polskiej właśnie "opis") poszczególnych obrazów wim.

O ile oryginalne obrazy od ms mają ten parametr ustawiony o tyle obrazy przerabiane, łapane samodzielnie już nie. Sam skrypt troszkę traci na czytelności bez tych opisów więc warto je ustawić.

 

Zrobimy to w imagex:

 

imagex /info obraz.wim 1 "windows 7 ze sterami" "windows 7 ze sterami"

 

Pierwszy wpis ustawia nazwę i musi być obligatoryjnie podany jeżeli chcemy też edytować opis (najczęściej oba zawierają to samo).

 

lub alternatywnie z większą kontrolą w wimlib-imagex:

 

P:\temp\wimlib\wimlib-imagex.exe info 7_sp1_ulti_pl.wim 1 "Windows 7 ULTIMATE" --image-property DESCRIPTION="Windows 7 ULTIMATE" --image-property DISPLAYNAME="Windows 7 Ultimate" --image-property DISPLAYDESCRIPTION="Windows 7 Ultimate" --image-property FLAGS="Ultimate"

 

Tutaj możemy edytować wszystkie flagi wewnętrznego pliku xml zawierającego konfigurację danego obrazu.

Np. ustawienie flagi "flags" pozwala użyć takiego obrazu jako źródła instalacji dla firmowego setupu ms (install.wim), inaczej setup taki plik odrzuci.

Uwaga na wielkość liter - flagi muszą mieć zapis identyczny jak w oryginalnym pliku xml.

 

 

Niezależnie od tego czy winpe starujemy z sieci czy z pena warto sobie ustawić skrypt automatycznie pozycjonujący w katalogu z naszymi skryptami i obrazami, ja proponuję następujące skrypty które możemy wstawić do winpe jako "startnet.cmd":

 

dla wersji sieciowej np.:

 

@wpeinit >nul
@net use n: \\192.168.0.1\tftpboot\instalki /user:guest "" >nul
@cd /d n:
@cmd /k

 

dla wersji usb:

 

@wpeinit >nul

@echo off

@for %%d in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do if exist "%%d\instalki\install.cmd" (

@cd /d %%d\instalki

)

@subst N: %cd%

@cd /d N:

@cmd /k

 

Przy pomocy winlib-imagex możemy plik zintegrować w obrazie bez potrzeby jego montowania:

 

wimlib-imagex.exe update winpe.wim 1 --check --rebuild --command="add startnet.cmd \windows\system32\startnet.cmd"

 

Jeżeli inicjacja sieci dla wersji pierwszej będzie zbyt długa i przypisanie udziałów sieciowych się nie powiedzie można do skryptu dodać opóźnienie, w wine pe nie mamy komendy wait więc można ją zastąpić przez ping.

Np. opóźnienie o 5s:

 

ping localhost -n 5 > nul

 

 

pzdr

Odnośnik do komentarza
  • 1 miesiąc temu...

Nowa wersja skryptu, odrobinę bardziej zaawansowana.

Różnice w stosunku do wersji podstawowej:

1. Wybór dysku w przypadku wykrycia większej ilości odpowiednich napędów (z wykluczeniem napędów usb).

post-67-0-33690000-1480547190_thumb.png post-67-0-36170000-1480547194_thumb.png

2. Opcja P pozwalająca pominąć konfigurację dysku - wygodniejsza alternatywa dla opcji custom, raczej dla zaawansowanych użytkowników (potencjalnie destrukcyjna, pozwala też na niespójności konfiguracyjne).

3. Po wybraniu opcji utworzenia małej partycji recovery - konfiguruje odpowiednią opcję startową.

4. Ustawiony katalog tymczasowy dla DISM - workaround dla błędnej konfiguracji winpe.

5. Kilka kosmetycznych zmian w formatowaniu kodu.

 

 

  Pokaż ukrytą zawartość

 

 

Zewnętrzny link

 

pzdr

 

Odnośnik do komentarza
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...