UpdateID-based Download/Installation

Re: UpdateID-based Download/Installation

Postby aker » 09.01.2021, 11:37

Ich mache einfach folgendes Experiment:
Ich setze eine VM mit Server 2012 auf und versuche die Updates zu installieren.
Sollte es klappen, füge ich einen statischen Link hinzu, wenn nicht, lasse ich es.

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby aker » 09.01.2021, 21:04

Ein kurzes Fazit eines "Schuss ins Blaue"-Tests:

Testumgebung: Windows Server 2012 Standard x64 mit UI; VirtualBox 6.1.16; vanilla; Servicing Stack auf Version 6.2.9200.23084 aus dem Juli 2020 aktualisiert

Ergebnis:
- Installieren lassen sich: KB2967916 und KB3121461
- Fehlschlag ("nicht geeignet") bei: KB2781197-v2, KB2978742, KB3038936, KB3108669 und KB3155178

Die einzige Frage, die sich mir da stellt ist dann aber, warum diese nicht in der wsusscn2.cab enthalten sind.
Fun fact: Im Update-Katalog wird lediglich KB2967916 als "Windows Server 2012"-Update gemeldet.

Öffne ich die "Windows8-RT-KB*-x64-pkgProperties.txt" innerhalb der MSU-Dateien aus dem Update-Katalog, wird auch nur für die beiden erfolgreich installierten KBs eine Anwendbarkeit ("ApplicabilityInfo") für "Windows 8.0 Server" oder "Windows 8.0 Server Core" gelistet.

Kann es möglich sein, dass die beiden KBs zwar unter Windows Server 2012 anwendbar sind, jedoch keinen Sicherheitsinhalt besitzen und darum nicht in der wsusscn2.cab auftauchen?

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby hbuhrmester » 09.01.2021, 22:50

KB2967916 und KB3121461 tauchen schon in der wsusscn2.cab auf:

  • KB2967916

    Code: Select all
    <FileLocation Id="uvjXogYGXS8Ara1P6cIIE4YhU6k=" Url="http://download.windowsupdate.com/d/msdownload/update/software/updt/2014/07/windows8-rt-kb2967916-x64_baf8d7a206065d2f00adad4fe9c20813862153a9.cab"/>


    Suche nach der File-Id "uvjXogYGXS8Ara1P6cIIE4YhU6k="

    Code: Select all
    <Update CreationDate="2017-06-27T00:20:45Z" DefaultLanguage="en" UpdateId="a01e550b-7998-44f4-82e1-8f04c31c0c0
    a" RevisionNumber="201" RevisionId="13526102" IsLeaf="true" DeploymentAction="Bundle">
      <PayloadFiles>
        <File Id="uvjXogYGXS8Ara1P6cIIE4YhU6k="/>
      </PayloadFiles>
      <Prerequisites>
        <UpdateId Id="f8c1d184-7116-498a-903e-25b17eb66bac"/>
        <UpdateId Id="59653007-e2e9-4f71-8525-2ff588527978"/>
        <UpdateId Id="95e0e190-4087-4592-9ea2-052e3166921e"/>
        <UpdateId Id="982f5c0d-ccc5-402a-ab11-9c2654334962"/>
        <UpdateId Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
      </Prerequisites>
      <BundledBy>
        <Revision Id="13526103"/>
      </BundledBy>
    </Update>


    Suche nach der Revision-ID "13526103"

    Code: Select all
    <Update CreationDate="2017-06-27T00:20:47Z" DefaultLanguage="en" UpdateId="2c478900-5f6a-4c7c-8041-3b940c53ea27" RevisionNumber="201" RevisionId="13526103" IsLeaf="true" IsBundle="true">
      <Prerequisites>
        <UpdateId Id="f8c1d184-7116-498a-903e-25b17eb66bac"/>
        <UpdateId Id="59653007-e2e9-4f71-8525-2ff588527978"/>
        <UpdateId Id="95e0e190-4087-4592-9ea2-052e3166921e"/>
        <UpdateId Id="982f5c0d-ccc5-402a-ab11-9c2654334962"/>
        <UpdateId Id="0fa1201d-4330-4fa8-8ae9-b877473b6441"/>
        <UpdateId Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
      </Prerequisites>
      <Categories>
        <Category Type="UpdateClassification" Id="0fa1201d-4330-4fa8-8ae9-b877473b6441"/>
        <Category Type="Product" Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
        <Category Type="Company" Id="56309036-4c77-4dd9-951a-99ee9c246a94"/>
        <Category Type="ProductFamily" Id="6964aab4-c5b5-43bd-a17d-ffb4346a8e1d"/>
      </Categories>
    </Update>


    Das sind dann die Kategorien:

    ProductFamily: Windows
    Product: Windows 8
    UpdateClassification: Security Update

  • KB3121461

    Code: Select all
    <FileLocation Id="naHePl0QlBe6svIBTVsTlynqxFo=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows6.1-kb3121461-x86_9da1de3e5d109417bab2f2014d5b139729eac45a.cab"/>
    <FileLocation Id="GTIfKkasYRT8Ye8Irydkf45+X+w=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows6.1-kb3121461-x64_19321f2a46ac6114fc61ef08af27647f8e7e5fec.cab"/>
    <FileLocation Id="Z3GaqZXl7wHGrNSqU4m12SQ+gjg=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows8-rt-kb3121461-x86_67719aa995e5ef01c6acd4aa5389b5d9243e8238.cab"/>
    <FileLocation Id="h/swjzdvsZ3Xq+azhrDmwr4XGqc=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows8-rt-kb3121461-x64_87fb308f376fb19dd7abe6b386b0e6c2be171aa7.cab"/>
    <FileLocation Id="b3mEnNk1YfvBmoqwPz/N7kzn1s8=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows8.1-kb3121461-x86_6f79849cd93561fbc19a8ab03f3fcdee4ce7d6cf.cab"/>
    <FileLocation Id="N/YdmvpomMKGG7hUq8s6Itl/7p4=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows8.1-kb3121461-x64_37f61d9afa6898c2861bb854abcb3a22d97fee9e.cab"/>


    Suche nach der File-ID "h/swjzdvsZ3Xq+azhrDmwr4XGqc="

    Code: Select all
    <Update CreationDate="2017-06-27T01:38:31Z" DefaultLanguage="en" UpdateId="1b95bd66-ebd4-4c55-b3ee-ac15acbf259
    1" RevisionNumber="203" RevisionId="19855142" IsLeaf="true" DeploymentAction="Bundle">
      <PayloadFiles>
        <File Id="h/swjzdvsZ3Xq+azhrDmwr4XGqc="/>
      </PayloadFiles>
      <Prerequisites>
        <UpdateId Id="f8c1d184-7116-498a-903e-25b17eb66bac"/>
        <UpdateId Id="59653007-e2e9-4f71-8525-2ff588527978"/>
        <UpdateId Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
      </Prerequisites>
      <BundledBy>
        <Revision Id="19855143"/>
      </BundledBy>
    </Update>


    Suche nach der Revision-ID "19855143"

    Code: Select all
    <Update CreationDate="2017-06-27T01:38:33Z" DefaultLanguage="en" UpdateId="b31ac45b-9f78-490d-b4b1-54d78339bf60" RevisionNumber="203" RevisionId="19855143" IsLeaf="true" IsBundle="true">
      <Prerequisites>
        <UpdateId Id="f8c1d184-7116-498a-903e-25b17eb66bac"/>
        <UpdateId Id="59653007-e2e9-4f71-8525-2ff588527978"/>
        <UpdateId Id="0fa1201d-4330-4fa8-8ae9-b877473b6441"/>
        <UpdateId Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
      </Prerequisites>
      <Categories>
        <Category Type="UpdateClassification" Id="0fa1201d-4330-4fa8-8ae9-b877473b6441"/>
        <Category Type="Product" Id="2ee2ad83-828c-4405-9479-544d767993fc"/>
        <Category Type="Company" Id="56309036-4c77-4dd9-951a-99ee9c246a94"/>
        <Category Type="ProductFamily" Id="6964aab4-c5b5-43bd-a17d-ffb4346a8e1d"/>
      </Categories>
    </Update>


    Dies sind die Kategorien:

    ProductFamily: Windows
    Product: Windows 8
    UpdateClassification: Security Update


Fazit

Für die Updates in wsusscn2.cab ist die UpdateClassification fast immer "Security Update", nur für Windows Vista und 7 werden noch andere Klassifizierungen verwendet.

Aber Du hattest ja im zweiten Post geschrieben:

Nach ein paar Tests scheint diese Auswahl an ProductIds am ehesten zuzutreffen:
w60 -> ba0ae9cc-5f01-40b4-ac3f-50192b5d6aaf (Windows Server 2008)
w61 -> bfe5b177-a086-47a0-b102-097e4fa1f807 (Windows 7), fdfe8200-9d98-44ba-a12a-772282bf60ef (Windows Server 2008 R2)
w62 -> a105a108-7c9b-4518-bbbe-73f0fe30012b (Windows Server 2012)
w63 -> 6407468e-edc7-4ecd-8c32-521f64cee65e (Windows 8.1), Windows Server 2012 R2 (d31bd4c3-d872-41c9-a2e7-231f372588cb)
w100 -> a3c2375d-0c8a-42f9-bce0-28333e198407 (Windows 10), d2085b71-5f1f-43a9-880d-ed159016d5c6 (Windows 10 LTSB), b3c75dc1-155f-4be4-b015-3f1a91758e52 (Windows 10, version 1903 and later), 569e8e8f-c6cd-42c8-92a3-efbb20a0f6f5 (Windows Server 2016), f702a48c-919b-45d6-9aef-ca4248d50397 (Windows Server 2019), 21210d67-50bc-4254-a695-281765e10665 (Windows Server, version 1903 and later)


Windows 8 fehlt hier, obwohl es sicherlich Überschneidungen zwischen Windows 8 und Windows Server 2012 geben kann. Deshalb findest Du diese Updates jetzt nicht.

Viele Grüße
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59

Re: UpdateID-based Download/Installation

Postby aker » 09.01.2021, 23:31

Ich muss ein wenig präzisieren:
Eventuell sind die Updates nur unter Windows 8, aber nicht unter Server 2012 sicherheitsrelevant und besitzen deshalb nur für Windows 8 eine Referenz über die ProductId.

Das würde zumindest zum Update-Katalog passen.
- KB2967916:
Unter Windows 8 x64 -> Klassifikation: Sicherheitsupdates
Unter Windows 8 x86 und Server 2012 -> Klassifikation: Wichtige Updates
- KB3121461:
Unter Windows 8 -> Klassifikation: Sicherheitsupdates
Unter Windows Server 2012 -> nicht gelistet

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby aker » 10.01.2021, 12:06

Den Download-Anteil würde ich jetzt mal soweit als "abgeschlossen" markieren. Eine Suche mittels WUMT sowie WuMgr und Einbezug von "superseded updates" mittels wsusscn2.cab hat keines der Updates zutage gefördert.

Auffällig war jedoch noch eine Sache:
Im client-Verzeichnis fehlen teilweise Updates, welche in mehreren Rollups verwendet wurden.
Ein Beispiel: Das Update KB4019990 (d3dcompiler_47.dll) ist in nahezu jedem .NET-Rollup enthalten. Das bedeutet, dass diese Datei in aktuellen wie auch in supersedeten Rollups enthalten ist. Der Link zu der Datei tauch dementsprechend auch in der "ExcludeList-superseded(-seconly).txt" auf. Dieser Ausschluss ist jedoch in dem Sinne fehlerhaft, da sie auch in einem aktuellen Rollup enthalten ist.
Mein Vorschlag wäre eher eine "ExcludeList-superseded(-seconly).txt" anhand von UpdateIds und nicht der Dateinamen/-URLs.
Da werde ich mich als übernächsten Punkt dransetzen. Erst muss ich jetzt den Installationsanteil so umbauen, dass die neu einfeführten CSVs verwendet werden.

Viele Grüße
Last edited by aker on 10.01.2021, 12:23, edited 1 time in total.
Reason: Vorschlag hinzugefügt
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby aker » 10.01.2021, 12:56

Beispiel 1 (bislang ungetestet):

Mittels einer .\xslt\extract-revision-and-update-ids.xsl sämtliche RevisionId- und UpdateId-Elemente verknüpfen.
Code: Select all
<?xml version="1.0"?>
<!--
     Author: H. Buhrmester, 2020
             aker, 2020
     Filename: extract-revision-and-update-ids.xsl

     It extracts the following fields:
     Field 1: Bundle RevisionId
     Field 2: UpdateId
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:__="http://schemas.microsoft.com/msus/2004/02/OfflineSync" version="1.0">
  <xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
  <xsl:template match="/">
    <xsl:for-each select="__:OfflineSyncPackage/__:Updates/__:Update/__:Categories/__:Category[@Type='Product']">
      <xsl:text>#</xsl:text>
      <xsl:value-of select="../../@RevisionId"/>
      <xsl:text>#,</xsl:text>
      <xsl:value-of select="../../@UpdateId"/>
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>


Sortieren und dann joinen:
Code: Select all
.\bin\join.exe -t "," -o "2.2" "%TEMP%\ValidSupersededRevisionIds-unique.txt" "%TEMP%\revision-and-update-ids-unique.txt" > "%TEMP%\SupersededUpdateIds.txt"


Diese Liste dann als ExcludeList-superseded(-seconly).txt verwenden.

--------------------------------------------------------------------------------

Beispiel 2 (bislang ungetestet):

Eine Liste der FileIds erstellen, die nicht superseded sind, und diese aus den supersededen entfernen, um den fehlerhaften Ausschluss durch Doppelbenutzung von Dateien zu beheben.

--------------------------------------------------------------------------------

Die Frage ist, was sinnvoller ist.
Variante 2 würde einen großen Teil der bestehenden Infrastruktur beibehalten.
Variante 1 wäre in Summe kongruenter (Verwendung der UpdateId anstatt von Teilen des Dateinamens).

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby hbuhrmester » 10.01.2021, 17:08

Ich bin mir nicht sicher, ob es einen Unterschied macht, die RevisionIds extra in UpdateIds umzuwandeln.

Meiner Meinung nach hat jeder Bundle-Record eine eindeutige RevisionId (eine fortlaufende Nummer) und eine eindeutige UpdateId (als UUID). Beide sind eindeutig und können zum Filtern verwendet werden.

Dann könntest Du die Datei ValidSupersededRevisionIds-unique.txt auch direkt verwenden:

  1. Anhand der ProduktID werden die RevisionId und UpdateId der Bundle-Records extrahiert. Die RevisionId wird auf jeden Fall benötigt, da die Verknüpfung zu den untergeordneten Update-Records mit den "Payload Files" über die RevisionId hergestellt wird.

  2. Die superseded RevisionIds werden mit der Datei ValidSupersededRevisionIds-unique.txt entfernt.

  3. Durch die Verknüpfung mit der Datei BundledUpdateRevisionAndFileIds.txt bekommt man die FileIds der Payload-Files.

  4. Durch die Verknüpfung mit der Datei UpdateCabExeIdsAndLocations.txt bekommt man die URLs.


Das wäre eine vereinfachte Variante 1. Wie man am Ende zwischen ExcludeList-superseded.txt und ExcludeList-superseded-seconly.txt unterscheidet, ist mir aber noch nicht klar.


Nebenbei: Die RevisionId wird auch verwendet, um die zahlreichen kleineren XML-Dateien in wsusscn2.cab zu identifizieren: Alle Dateien verwenden die RevisionId als Dateinamen.

Zum Beispiel für RevisionId 30626232 aus package72.cab (Stand Oktober 2020).

Code: Select all
c/30626232
l/ar/30626232
l/bg/30626232
l/cs/30626232
l/da/30626232
l/de/30626232
l/el/30626232
l/en/30626232
l/es/30626232
l/et/30626232
l/fi/30626232
l/fr/30626232
l/he/30626232
l/hr/30626232
l/hu/30626232
l/it/30626232
l/ja/30626232
l/ko/30626232
l/lt/30626232
l/lv/30626232
l/nl/30626232
l/no/30626232
l/pl/30626232
l/pt/30626232
l/pt-br/30626232
l/ro/30626232
l/ru/30626232
l/sk/30626232
l/sl/30626232
l/sr/30626232
l/sv/30626232
l/th/30626232
l/tr/30626232
l/uk/30626232
l/zh-cn/30626232
l/zh-tw/30626232
s/30626232
x/30626232



Inhalt der Dateien. Die Dateien haben keine Dateierweiterung; es sind aber alles XML-Dateien, teilweise in UTF-16 Little-Endian. Die automatische Erkennung des Dateiformats kann damit problematisch werden:

  • l/en/30626232
    l/de/30626232

    Lokalisierte Beschreibungen und Link zur Supportseite:

    Code: Select all
    <Title>2020-01 Security and Quality Rollup for .NET Framework 3.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 for Windows 7 and Server 2008 R2 for x64 (KB4535102)</Title>
    <MoreInfoUrl>http://support.microsoft.com/kb/4535102</MoreInfoUrl>

  • c/30626232

    Zuordnung zur UpdateId und RevisionNumber:

    Code: Select all
    <UpdateIdentity UpdateID="075d4f35-c2bf-4f8f-9b78-ae1b7d1a6aa8" RevisionNumber="200" />

  • s/30626232

    Titel und Beschreibung in allen Sprachen, aber in einer Datei zusammengefasst

  • x/30626232

    Extended Properties, z.B. Default Language


Fazit: Die RevisionId ist ein fortlaufender Index für die Bundle-Records in wsusscn2.cab, der für die Verknüpfungen innerhalb der package.xml, aber auch für die Verknüpfung mit den zusätzlichen, externen Dateien verwendet wird.
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59

Re: UpdateID-based Download/Installation

Postby aker » 10.01.2021, 17:33

Die RevisionId ist aus meiner Sicht aber alles andere als universell.
Für die ExcludeList-superseded(-seconly).txt sowie die dazugehörigen Whitelists sollten meines Erachtens nach ID-Nummern verwendet werden, welche sich auch im Update-Katalog nachvollziehen lassen. Das geht meines Wissens nach, mit der RevisionId nicht.
So ganz sicher bin ich mir auch nicht, wie das sinnvoll zu lösen ist, aber die RevisionId ist meines Erachtens nichts, welche zu etwas anderem als zur internen Berechnung genutzt werden sollte (weil unverständlich).

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby aker » 10.01.2021, 17:58

Fürs erste implementiere ich jetzt erst einmal Variante 2, da sie schneller umzusetzen ist und ich gerne einen sauber funktionierenden Commit in den master übertragen möchte.

Die vereinfachte Variante 1 finde ich aber auch interessant und werde sie mir nächstes Wochenende einmal ansehen.

Viele Grüße
Wer Rechtschreibfehler findet, darf sie behalten oder an den Meistbietenden versteigern. / Everybody finding a misspelling is allowed to keep or sell it.
aker

WSUS Offline Update „Community Edition“
https://gitlab.com/wsusoffline/wsusoffline/-/releases
aker
 
Posts: 3999
Joined: 02.03.2011, 15:32

Re: UpdateID-based Download/Installation

Postby hbuhrmester » 10.01.2021, 18:53

Die FileId enthält aber keine zusätzlichen Informationen. Die FileId ist einfach der SHA-1-Hash in Base64-Kodierung statt der üblichen Hexadezimal-Darstellung.

Unter Linux kann man beides leicht ineinander konvertieren, zum Beispiel:

Code: Select all
<FileLocation Id="naHePl0QlBe6svIBTVsTlynqxFo=" Url="http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/12/windows6.1-kb3121461-x86_9da1de3e5d109417bab2f2014d5b139729eac45a.cab"/>


FileId (Base64): naHePl0QlBe6svIBTVsTlynqxFo=
SHA-1-Hash:      9da1de3e5d109417bab2f2014d5b139729eac45a


hb@debian:~$ echo "naHePl0QlBe6svIBTVsTlynqxFo=" | base64 --decode | xxd -plain
9da1de3e5d109417bab2f2014d5b139729eac45a

hb@debian:~$ echo "9da1de3e5d109417bab2f2014d5b139729eac45a" | xxd -revert -plain | base64
naHePl0QlBe6svIBTVsTlynqxFo=



Insofern enthält die FileId dieselbe Information wie der SHA-1-Hash der Datei oder der Dateiname mit eingebettetem SHA-1-Hash oder die vollständige URL.

Das haben wir doch eigentlich alles?

Viele Grüße
hbuhrmester
 
Posts: 525
Joined: 11.10.2013, 20:59

PreviousNext

Return to Anregungen / Suggestions

Who is online

Users browsing this forum: No registered users and 33 guests

cron