Windows Updates mit SaltStack verteilen

Und weiter geht die wilde Reise um SaltStack Windows Hosts zu administrieren. Mein ewiges Projekt um um Windows Servern herumzukommen. Mittlerweise installier ich per Salt Software und update diese auch von einem Linux Server aus.

Als Basis setze ich den WSUS Offline Updater ein. Ein ganz tolles Stück Software, welches der Heise Verlag mal veröffentlicht hat und seitdem weiter entwickelt wird. Es ist eigentlich dazu gedacht Windows Update herunterzuladen und dann auf eine CD zu brennen mit der man dann Turnschuhadmin-mäßig durch das Büro rennen kann und offline die Updates einspielt. Nachdem die Update runtergeladen wurden, wird unter anderem ein Batch-Script erstellt das Massenupdate anschubst. Meine Herangehensweise ist vielleicht noch nicht 100% ausgereift aber erstmal ein Anfang.

Den WSUS Offline Updater auf den Salt-Master runterladen, entpacken und die Pakete laden. In dem Verzeichnis sh/ liegt das Script DownloadUpdates.sh. Dies ist unser Freund. Es wird aufgerufen und abgefragt welche Updates man gerne haben möchte. Ist alles auf der Festplatte, legt man sich sein state-file an. Ich habe es einfach als init.sls in den entpackten wsusoffline-Ordner geschmissen.

c:/windows/temp/wsusoffline:
  file.recurse:
    - source: salt://win/wsusoffline/client

c:/windows/temp/wsusoffline/cmd/DoUpdate.cmd:
  cmd.run

Da passiert kein Hexenwerk. Ich kopiere die Windows-Updates, in ein temporäres Verzeichnis, auf die Clients. Ganz praktisch das quasi ein Sync stattfindet. Er bringt die beiden Verzeichnisse auf einen Stand. Danach wird lokal das Update-Script ausgeführt.

Also los geht es mit sudo salt 'testwindowsclient' state.sls win/wsusoffline:

testwindowsclient:
----------
          ID: c:/windows/temp/wsusoffline
    Function: file.recurse
      Result: True
     Comment: The directory c:/windows/temp/wsusoffline is in the correct state
     Changes:   
----------
          ID: c:/windows/temp/wsusoffline/cmd/DoUpdate.cmd
    Function: cmd.run
      Result: False
     Comment: Command "c:/windows/temp/wsusoffline/cmd/DoUpdate.cmd" run
     Changes:   
              ----------
              pid:
                  4252
              retcode:
                  3010
              stderr:
                  Der Befehl "chcp" ist entweder falsch geschrieben oder
                  konnte nicht gefunden werden.
              stdout:
                  Starting WSUS Offline Update (v. 9.4.2) at 14:33:59,78...
                  Checking user's privileges...
                  Determining system's properties...
                  Determining Windows licensing info...
                  Found Microsoft Windows version: 6.1.7601.18700 (w61 x64 deu sp1)
                  Found Microsoft Windows Software Licensing Management Tool info...
                  Name: Windows(R) 7, Ultimate edition
                  Beschreibung: Windows Operating System - Windows(R) 7, OEM_COA_SLP channel
                  Teil-Product Key: JX37D
                  Lizenzstatus: Lizenziert
                  Found Microsoft Office 2007 Word version: 12.0.4518.1014 (o2k7 deu sp0)
                  Checking medium content...
                  Medium build date: 11.02.2015
                  Medium supports Microsoft Windows (w61 x64 glb).
                  Medium does not support Microsoft Office (ofc glb).
                  Checking Windows Service Pack version...
                  Checking Windows Update Agent version...
                  Checking Windows Installer version...
                  Checking Windows Script Host version...
                  Checking Internet Explorer version...
                  Checking Windows Defender installation state...
                  Checking Office Service Pack versions...
                  Warning: Update kb2526086 not found.
                  Warning: Office Service Pack installation file(s) not found.
                  Checking state of service 'Windows Update'...
                  14:34:02,93 - Listing ids of missing updates (please be patient, this will take a while)...
                  14:37:42,05 - Done.
                  Listing ids of installed updates...
                  Listing update files...
                  Info: Skipping update kb982861 (Internet Explorer 9) due to matching black list entry.
                  Warning: Update kb2538243 (id: 729a0dcb-df9e-4d02-b603-ed1aee074428) not found.
                  Info: Skipping update kb2526086 (Office 2007 Service Pack 3) due to matching black list entry.
                  Info: Skipping update kb2917500 (Revoked Root Certificates) due to matching black list entry.
                  Info: Skipping update kb2841134 (Internet Explorer 11) due to matching black list entry.
                  Info: Skipping update kb890830 (Malicious Software Removal Tool) due to matching black list entry.
                  Installing updates...
                  Installing update 1 of 1...
                  Installing ..\w61-x64\glb\windows6.1-kb2532531-x64_4625e47e04e8708b66895de5439ec7221cccd41b.cab...
                  Checking Microsoft Security Essentials installation state...

                  Installation successful. Please reboot your system now.


                  Ending WSUS Offline Update at 14:37:49,32...

Summary
------------
Succeeded: 1
Failed:    1
------------
Total:     2

Was auffällt:

  • Es meint ein Job wäre gefailed. Irgendein komischer Fehler mit chcp. Danach laufen die Updates trotzdem an.
  • Natürlich laufe ich in die Falle mit den Reboots. Ich muss noch rausfinden ob es nur heißt das er einen Reboot braucht damit die Änderungen in Kraft treten oder ob ich nach dem Reboot nochmal das Script anschmeißen muss.

Es bleibt spannend. Aber es ist ein Anfang...