5 Replies Latest reply on Jul 1, 2014 8:44 AM by derniwi

    Idee für Firmware Paketierung?

    michaels2 Specialist
      Hallo zusammen,

      ich suche eine Idee, wie ich geschickt Firmwares paketieren kann.
      Da wir z.B. auch Tablets einsetzen, wie das DELL Venue 11, ist das Updaten von verschiedenen Firmware Komponenten (BIOS, LCD, Touch, Dockingstation) usw., manchmal notwendig.

      Ich hätte jetzt einfach die FW paketiert, BIOS geht bei DELL auch silent, andere leider nicht, da muss der User selbst noch weiter drücken, dann das Ganze in den Shop und bei Bedarf die User informiert, dass es neue Firmwares gibt und Sie diese bei Bedarf installieren können.

      Was mir jetzt aber im Workflow fehlt, nach Beendigung der Installation, sollte die Policy am besten automatisch wieder gelöscht werden, wenn Sie erfolgreich war. Ansonsten würde bei einer erneuten Installation des PC´s ja alle FW Updates wieder losrennen, da die Policy ja noch offen ist...oder kann ich das so einstellen, dass eine Policy grün bleibt, auch wenn der PC neu installiert wird, also das Paket definitiv nicht erneut ausgerollt wird, bei neu Installation?

      Vielen Dank für eure Ideen.

      VG,

      Michael

      P.S. Die Frage, ob es wirklich eine gute Idee ist, den User quasi selbst eine Firmware installieren zu lassen möchte ich nicht diskutieren, mir ist das Risiko bewusst, aber zu hunderten Maschinen zu laufen und diese manuell zu installieren ist noch weniger eine Lösung
        • 1. Re: Idee für Firmware Paketierung?
          derniwi Master
          Hallo Michael,

          ich habe für die DELL-Notebooks die Firmware auch paketiert, verteile sie aber nur explizit bei einer Neuinstallation, d.h. ich revisioniere die Pakete gelegentlich, aber die Policies werden dann unkritisch aktualisiert.

          Für das DELL Latitude E6320 verwende ich folgendes Paket:
          Set('_RC','0')
          RegReadValue('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS','BIOSVersion','_BIOSVer')
          !
          !A19 is the recent BIOS version
          If %_BIOSVer%>='A19'
          ! nothing to do
          ExitProcEx(Done,'Current BIOS version: %_BIOSVer% => OK')
          !
          !Upgrade to recent version
          If %_BIOSVer%='A08' or %_BIOSVer%='A09' or %_BIOSVer%='A10' or %_BIOSVer%='A11' or %_BIOSVer%='A12' or %_BIOSVer%='A13' or %_BIOSVer%='A14' or %_BIOSVer%='A15' or %_BIOSVer%='A16' or %_BIOSVer%='A17' or %_BIOSVer%='A18'
          ExecuteEx('.\Extern$\E6320A19.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A19')
          !
          !Upgrade to A08
          If %_BIOSVer%='A05' or %_BIOSVer%='A06' or %_BIOSVer%='A07'
          ExecuteEx('.\Extern$\E6320A08.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A08')
          !
          !Upgrade to A05
          If %_BIOSVer%='A01' or %_BIOSVer%='A02' or %_BIOSVer%='A03' or %_BIOSVer%='A04'
          ExecuteEx('.\Extern$\E6320A05.exe /s','_RC','2')/?/TS
          System_Reset/TS
          EndInstallerSession/TS
          ExitProcEx(Undone,'Current BIOS version: %_BIOSVer% => Upgrading to A05')


          Das Modell habe ich bewußt hier als Beispiel genommen, weil hier nicht immer direkt die aktuelle Firmware eingespielt werden kann. Und da ich aus der Registry die Version auslesen lasse, kann das Paket auch bei jeder Installation laufen.

          Hoffe, das hilft dir.

          Gruß
          Nils
          • 2. Re: Idee für Firmware Paketierung?
            michaels2 Specialist
            Hi Nils,

            danke, für das BIOS ist das schon einmal eine ausgezeichnete Idee und werde ich das so verwenden, mit der Abfrage der Version über die Registry.

            Allerdings habe ich gerade bei den neuen DELL Geräten des Öfteren auch andere Firmewares zu installieren. So gibt es für das Venue 11 z.B. für den Bildschirm und für Touch eine neue Firmware. Dort behebt eine der Firmwares auch einen tragischen Fehler mit der DisplayTastatur, so das ich diese gerne installieren würde.

            Da die FW Updates aber auch keine Silen-Install-Methode bieten, würde ich diese gerne in den Shop tun, damit die Leute diese bei Bedarf selbst installieren können.

            Es muss doch eine Möglichkeit geben, dass nach erfolgreicher Ausführung die Policy gelöscht vom Ziel der Policy gelöscht wird?

            Vielen Dank.

            VG,

            Michael
            • 3. Re: Idee für Firmware Paketierung?
              derniwi Master
              Hallo,

              ich fürchte, da musst du etwas basteln. Ich verstehe das so:
              Du kannst nicht feststellen, ob die Firmware zu installieren ist oder nicht. Also soll ein Benutzer dies über den Shop machen können.

              Weiterhin soll das Paket nur einmal installiert werden, eine Deinstallation ist natürlich nicht gewollt und nicht möglich. Hierfür würde ich das Paket dennoch deinstallierbar machen, im Uninstall-Teil dann einfach ein Exit(Done) einbauen. Damit kann das Paket ohne etwas auszuführen deinstalliert und dadurch kann die Policy-Instanz gelöscht werden.

              Der Bastelteil:
              Du musst am Computerobjekt vermerken, ob das Paket schon eingespielt wurde. Hier würde ich eine Schemaerweiterung für den Computer nutzen, die auch über die DSMC geändert werden kann (Eigenschaften-Gruppe mit der Option "Eigenschaftswert wird vom DSM Client ermittelt"). Und darin dann eine Eigenschaft hinterlegen, die du später gut verarbeiten kannst, also z.B. Integer. Die Eigenschaft sollte passend benannt sein, z.B. "DELLVenue11Touch". Vorgabewert wäre 0.

              Jetzt kannst du mit dynamischen Gruppen arbeiten, als Filter wäre das z.B. das Computermodell und als weitere Bedingung, dass der Wert "DELLVenue11Touch"<1 ist. Dieser Gruppe kannst du dann das Paket mit einer Shop-Policy zuordnen.

              Und im Paket sollte nach erfolgreicher Installation der Wert "DELLVenue11Touch" auf 1 gesetzt werden (Befehl ModifyObjectProperty). Damit fällt das Paket aus der Gruppe raus und würde demnach beim nächsten Sync deinstalliert werden. Bei der Deinstallation passiert aber nichts, wenn das wie oben genannt angelegt wurde.

              Warum ein Integer-Wert? Das kommt jetzt: Irgendwann kommt vielleicht ein zweites Firmware-Update. Dann erstellst du eine neue Revision des Paketes und setzt nach Erfolg den Wert "DELLVenue11Touch" auf 2. Den Filter der dyn. Gruppe änderst du ab und prüfst, ob der Wert <2 ist. Damit tauchen dann wieder alle Clients in der Liste auf.

              Mit einer weiteren dyn. Gruppe und einem Filter, der auf >=1 bzw. >=2 prüft, siehst du dann auch alle Rechner, bei denen das Update eingespielt wurde.

              Dadurch, dass du den Wert auch über die DSMC ändern kannst, kannst du neuere Rechner, bei denen du siehst, dass die aktuelle Firmware schon installiert ist, den Wert passend setzen, so dass die Benutzer die Policy nicht bekommen.

              Bevor du das umsetzt:
              Was sagen die anderen Admins zu dieser Idee?

              Gruß
              Nils
              • 4. Re: Idee für Firmware Paketierung?
                NicoS1 Master
                Hallo Michael,

                eine Möglichkeit, dass die Policy nach erfolgreicher Ausführung gelöscht wird gibt es "out of the box" nicht.

                Ich würde persönlich würde folgenden Ansatz verfolgen:
                Per WMI unter ROOT\WMI (mal nicht unter CimV2 )gibt es eine Klasse namens MSDeviceUI_FirmwareRevision

                Schau mal ob du dort eine Instanz mit der Geräte ID deines Touchpads / Displays findest (mit WMIExplorer z.B.) und ob du da deine Firmwarerevision auslesen kannst. Damit kannst du VOR der Installation schonmal prüfen ob die aktuelle FirmwareRevision schon drauf ist oder nicht und die Installation gar nicht erst loslaufen lassen.

                Wenn du es wirklich so haben willst, das die Policy verschwindet, würde ich ggf. Schemaerweiterungen anlegen. Damit kannst du dann Policys über verschiedene Wege beeinflussen.

                Ich persönlich würde ggf. einen Weg über Serverseitige vorraussetzungen im Paket gehen. Dynamische Gruppen wären zwar auch möglich, aber da müsstet du die Filterung ganzen Gruppe jedesmal anpassen beim nächsten Update. Da beim nächsten Update das Paket ja angepackt werden musst, hat man da alles an einer Stelle, wenn man Serverseitige Vorraussetzungen benutzt).

                Ich würde jetzt 2+ Pakete bauen:
                1.: eScript Paket welches dir per WMI die Firmwareversionen deiner Geräte ausliest und in die Schemaerweiterungen rein schreibt. Das als Job Policy auf den Venue11 laufen lassen.

                2.: Updatepakete: Hier baust du dein eigentliches Firmwareupdate rein.
                - Als erstes legst du eine Serverseitige Vorrausetzung fest, dass die Firmwareversion (Schemaerweiterung) NICHT dem Wert entsprechen oder höher sein darf als das was du gerade aktualisieren willst.

                - In den Ausführungseigenschaften erlaubst du die Deinstallation.

                - Danach im eScript packst du als erstes eine if abfrage rein... Installationsmodus prüfen => Deinstallation. Und dann die Bedingung verneinen.
                Das bedeutet, dass im Falle eine Deinstallation des Paketes (was später geschieht, dazu nachher) DSM alles unterhalb dieses IF ignoriert und nicht versucht rückgängig zu machen.

                - Alle weiteren Befehl dann jetzt einrücken, dass die unter diesen IF Fallen.

                - Dann würde ich nochmal eine WMI Prüfung auf die Firmware machen, ob diese Tatsächlich nicht gleich oder höher als das ist, als das war ich gerade einspielen will.

                - Wenn alles korrekt ist => Firmwareupdate ausführen und bei Erfolg die Schemaerweiterung aktualisieren (oder warten, dass das die oben genannte Job Policy macht).

                Jetzt passiert es nämlich, dass die Serverseitigen Vorraussetzungen nicht mehr erfüllt sind da deine Schemaerweiterung jetzt gleich oder höher ist als das was du als Vorrausetzung gesetzt hast und die Policy wird gelöscht. Würdest du die Deinstallation nicht erlauben, hättest du jetzt eine hässliche Rote Policy [korrigiert mich jemand, falls das nicht mehr so sein sollte], die du von Hand löschen musst. Da wir aber eine Deinstallation erlauben (aber im Script verhindern, dass er etwas tut) wird die Policy erst Gelb und verschwindet dann beim nächsten AutoInstaller lauf, der dann versucht das Paket zu deinstallieren, was er auch schafft, und die Policy ist weg. Da die Serverseitigen Vorraussetzungen nicht mehr passen ist auch die ShopPolicy weg.
                • 5. Re: Idee für Firmware Paketierung?
                  michaels2 Specialist
                  Hallo Nils, Hallo Nico,

                  super, vielen Danke für das ausführliche Umschreiben der Möglichkeiten.
                  Ich werde mir dies am Freitag genauer zuführen und schauen, was sich davon am besten umsetzen lässt.
                  Grundsätzlich ist die Idee, mit der WMI Abfrage recht gut, denn irgendwo her muss ja die Software auch wissen, welche FW Version vorliegt...wobei, bei der Display FW habe ich schon gemerkt, dass man diese beliebig oft installieren kann, ohne eine Meldung zu erhalten....mhhh...

                  Ich gebe dann Bescheid, wie ich mit euren Lösungsumsetzen etwas erarbeiten konnte.
                  Vielen Dank.

                  VG,

                  Michael