Lizenzmanagement

Lizenzmanagement oder Software-Lizenzmanagement sichert den legalen Umgang mit proprietärer Software in Unternehmen und Organisationen ab. Idealerweise unterstützt das Lizenzmanagement unterschiedliche Lizenzmodelle und hilft den Verantwortlichen dabei, den Überblick über die im Unternehmen genutzte Software und die vorhandenen Lizenzen zu behalten. Mit einem guten Lizenzmanagement vermeiden Sie strafrechtliche Risiken und überflüssige Lizenzkosten.

Voraussetzungen

Dieses Modul ist momentan eine kostenpflichtige Erweiterung. Das heißt, dass Sie eine Freischaltdatei benötigen. Sie erhalten diese, nachdem Sie die Erweiterung gekauft haben. Zu Evaluierungszwecken stellen wir Ihnen kostenlos eine zeitlich befristete Freischaltung zur Verfügung. Bitte kontaktieren Sie uns dazu per E-Mail.

Weitere Details hierzu finden Sie im Kapitel opsi-Erweiterungen.

Überblick

Das Lizenzmanagement-Modul erleichtert die aufwändige und komplexe Verwaltung von Lizenzen nicht-freier Software, die auf mit opsi verwalteten Clients installiert ist.

Funktion und Features

Die wesentlichen Features dieser opsi-Erweiterung sind:

  • Die Konfiguration der Lizenzverwaltung findet in derselben Oberfläche statt wie die Softwareverteilung und Betriebssystem-Installation (siehe Kapitel opsi-Management GUI: opsi-configed).

  • Sie können komfortabel Berichte über die installierte lizenzpflichtige Software generieren, auch für nicht über opsi verteilte Software. Letzteres nutzt die Informationen aus der Software-Inventarisierung als Basis.

  • Sie können Installationen und bestehende Lizenzverträge abgleichen.

  • Optional können Sie Lizenzen und Lizenzschlüssel automatisch bereitstellen, zuteilen und reservieren.

Software-Lizenzmodelle

Ein Lizenzmodell legt fest, wer eine Software in welcher Form nutzen darf. Dabei gibt es ganz unterschiedliche Ansätze, wie die Softwarehersteller das regeln.

  • Standard-Einzellizenz: eine Installation auf einem Rechner (mit individuellem Lizenzschlüssel)

  • Volume-Lizenz: maximale Anzahl der Installationen ist festgelegt; als Campus-Lizenz gilt der Schlüssel für eine unbegrenzte Zahl von Installationen

  • an einen Rechner gebundene Lizenz: Schlüssel gilt nur für bestimmte Hardware

  • Concurrent-User-Lizenz: beliebige Installation der Software, ein Lizenzserver regelt die Anzahl der Nutzungen

Wenn der opsi-Server die Zuteilung der Lizenzen steuert, ist sichergestellt, dass die Lizenz und gegebenenfalls der Schlüssel bei der Deinstallation der Software auch wieder freigegeben werden. Die Zuordnung von Lizenzen kann darüber hinaus auch manuell oder sogar skriptgesteuert erfolgen, z.B. wenn eine Lizenz nicht mit opsi verteilt worden ist.

Datenbankmodell zur Lizenzverwaltung

Lizenzverwaltung ist ein komplexes Thema. opsi setzt auf ein relativ komplexes Datenbankmodell, um die Lizenzen und ihre Schlüssel zu verwalten. Zur besseren Übersicht stellt das folgende Diagramm die beteiligten Tabellen dar. Die blaue Linie markiert die Abgrenzung von Tabellen, deren Inhalte automatisiert aus dem Software-Audit kommen, und Tabellen, deren Daten eigens zur Lizenzverwaltung erhoben oder zugeordnet werden.

Für das Lizenzmanagement relevante Datenbanktabellen
Abbildung 1. Für das Lizenzmanagement relevante Datenbanktabellen

Das Diagramm zeigt außerdem die Bedeutung der Lizenzpools (license pools), die der Abschnitt Lizenzpools ausführlich erklärt.

Lizenzmanagement im opsi-configed

Die Management-Oberfläche opsi-configed bietet eine eigene Abteilung für das Lizenzmanagement an. Sie erreichen den Dialog über die Schaltfläche Lizenzen im Hauptfenster. Voraussetzung ist, dass das die Erweiterung installiert und aktiviert ist. Sie überprüfen das über das Menü Hilfe / Module im Hauptfenster.

`opsi-configed`: Das Lizenzmanagement erreichen Sie über das ganz rechte Symbol (_Lizenzen_).
Abbildung 2. opsi-configed: Das Lizenzmanagement erreichen Sie über das ganz rechte Symbol (Lizenzen).

Das Dialogfenster zur Lizenzverwaltung zeigt am oberen Rand sechs Reiter an:

  • Lizenzpools

  • Lizenz anlegen

  • Lizenzen bearbeiten

  • Lizenzenverwendung

  • Abgleich mit Inventarisierung

  • Statistik

Die folgenden Abschnitte erklären die einzelnen Dialoge und ihre Funktionen.

Lizenzpools

Der Dialog Lizenzpools definiert die Verknüpfungen der Lizenzpools mit den Informationen der opsi-Datenbank über installierte Software und Installationspakete.

Was ist ein Lizenzpool?

Für jede Art von Lizenz, die Sie mit dieser Erweiterung verwalten möchten, richten Sie einen eigenen Lizenzpool ein. Dieser beschreibt die Zusammenfassung von Berechtigungen, die benötigt werden, um eine bestimmte Art von Software legal zu installieren. Der Lizenzpool steht im Mittelpunkt aller Aktivitäten des opsi-Lizenzmanagements:

  • Er verweist einerseits auf die zu legitimierende Software.

  • Er fasst andererseits rechtliche und technische "Erlaubniskonstrukte" zu einem Pool zusammen.

Der Reiter _Lizenzpools_
Abbildung 3. Der Reiter Lizenzpools

Verwaltung von Lizenzpools

Ganz oben im Bereich Lizenzpools finden Sie eine zweispaltige Tabelle, die alle verfügbaren Lizenzpools auflistet. Das Feld description können Sie bearbeiten und dort eigene Beschreibungen eintragen.

Weitere Funktionen zum Bearbeiten erreichen Sie über das Kontextmenü der rechten Maustaste. Über die dort angezeigten Einträge legen Sie einen neuen Pool an, löschen einen vorhandenen, speichern oder verwerfen die Änderungen und laden die Daten neu.

Beim Erzeugen eines neuen Pools, also beim Anlegen einer neuen Zeile in der Tabelle, tragen Sie eine (eindeutige) licensePoolId in das entsprechende Feld ein, beispielsweise pool_fuer_x o. Ä.

Achten Sie darauf, keine Umlaute für die IDs zu verwenden. Großbuchstaben werden automatisch in Kleinbuchstaben konvertiert!

Anders als die Beschreibung, können Sie die Pool-ID nur bis zum ersten Speichervorgang bearbeiten. Danach ist sie als Schlüssel des Datensatzes unveränderlich. Das Löschen eines Eintrags ist nur dann möglich, wenn es keine Referenz auf diesen Schlüssel in anderen Tabelle gibt. Die rekursive Suche nach solchen Referenzen wird derzeit nicht unterstützt.

Jeder Bearbeitungsvorgang verändert die Statusanzeige der beiden Buttons OK (grünes Häkchen) und Cancel () ## hier bin ich

In der Maske aktiviert jeder Bearbeitungsvorgang die Statusanzeige in der Art, dass die Farbe des Ok-Buttons (Häkchen) von grün nach rot wechselt und der Cancel-Button seinen aktiven Modus annimmt. Durch Betätigen des betreffenden Buttons (oder mittels Kontextmenü) kann die Veränderung permanent gespeichert bzw. widerrufen werden.

Lizenzpools und opsi-Produkte

Im Standardfall gehört zu einem opsi-Produkt, das eine lizenzpflichtige Software installiert und dabei das Lizenzmanagement nutzen soll, genau ein Lizenzpool, aus dem die benötigten Lizenzen geschöpft werden. Es ist realistisch, dass dabei mehrere Produkte auf denselben Lizenzpool verweisen, da es sich um Varianten desselben Produktes handelt (z.B. die Produkte 'win10-x64' und 'opsi-local-image-win10-x64' nutzen denselben Lizenzpool 'p_win10-x64').

Weniger übersichtlich ist die Situation, wenn ein opsi-Produkt mehrere lizenzpflichtige Software-Produkte installiert, etwa wenn zu einem Paket "Designerprogramme" sowohl 'Adobe Photoshop' wie auch 'Acrobat Writer' gehören würden. Das opsi-Produkt muss dann Lizenzen aus mehreren Pools anfordern. Im Prinzip liegt daher diesen Zuordnungen ein n:m-Schema zugrunde

Bei lizenzpflichtiger Software packen Sie zwecks größerer Klarheit nur ein Software-Produkt in ein opsi-Produkt. Binden Sie dieses (und nur dieses) opsi-Produkt an den entsprechenden Lizenzpool. Technisch zwingend ist diese Beschränkung, wenn Sie das Lizenzmanagement zusammen mit der 'opsi-WAN-Erweiterung' verwenden; siehe Kapitel opsi WAN/VPN-Erweiterung.

Dargestellt wird die Tabelle aller Zuordnungen zwischen Lizenzpools und den productIds von opsi-Produkten im zweiten Abschnitt der Lizenzpool-Seite.

Wie sonst wird die Tabelle durch einen Klick auf einen Spaltentitel nach dem Wert in der betreffenden Spalte (um)sortiert; nochmaliges Klicken ändert die Sortierungsrichtung. Die Sortierung kann genutzt werden, um alle Zuordnungen von opsi-Produkten zu einem Lizenzpool zusammenhängend darzustellen; oder umgekehrt alle einem opsi-Produkt zugeordneten Lizenzpools.

Über das Kontextmenü ist die Funktion aufrufbar, mit der eine neue Tabellenzeile erstellt werden kann, das heißt in diesem Fall, eine neue Zuordnung Lizenzpool-ProduktID. Zur Eingabe wird bei Klick in das Tabellenfeld die Liste der verfügbaren Werte angezeigt,

Lizenzpools und installierte Software

Der dritte Abschnitt der Lizenzpool-Seite behandelt die Beziehungen zwischen Lizenzpools und der im opsi-Netz auf den Rechnern vorfindbaren Software, sei sie mit opsi-Mitteln installiert oder anderweitig vorhanden.

Im Defaultmodus enthält die in diesem Abschnitt enthaltene Tabelle die identifizierenden Merkmale aller erfassten Software-Items. Die aus den Merkmalen kombinierte ID fungiert als eindeutiger Schlüsselwert für eine auf irgendeinem Rechner installierte Software-Instanz. Die Werte werden im Rahmen des opsi-Software-Audits (Produkt 'swaudit') auf den Rechnern ermittelt und an den Server übertragen. Clientspezifisch werden sie in der Tabelle SOFTWARE_CONFIG der opsi-Datenbank gespeichert und dabei, sofern dort noch nicht vorhanden, in die Gesamttabelle SOFTWARE aufgenommen. Die Gesamttabelle bildet die Grundlage für die im Lizenzmanagement angezeigte Tabelle; sie ist auch unabhängig von der Lizenzverwaltung von Interesse.

Die Darstellung der Softwaretabelle wird konfiguriert durch zwei Optionslisten. Die eine gestattet die Beschränkung der Anzeige auf bestimmte Daten:

  • Alle anzeigen

  • Ausblenden von Software, die anderen Pools zugeordnet ist

  • Nur die keinem Pool zugeordnete Software zeigen

Die andere beschreibt, was die Markierung von Zeilen bedeuten soll:

  • Auswahl = Gesamte Liste der zugewiesenen/zuzuweisenden SW-Einträge

  • Auswahl = SW-Einträge, die (neu) zugewiesen werden

Konfiguration Softwaretabelle
Abbildung 4. Softwaretabelle, Konfiguration der Anzeige

In der Defaulteinstellung ist jeweils die erste Option aktiv.

Das heißt, es werden jeweils alle Zuweisungen von Software-Items (aus der Datenbanktabelle SOFTWARE) zu einem Lizenzpool (aus der Tabelle LICENSE_POOL) dargestellt, indem sämtliche Software-Items, die zum in der oberen Tabelle ausgewählten Lizenzpool gehören, als farblich hinterlegte, markierte Zeilen erscheinen. Die Gesamtheit dieser Zuordnungen Lizenzpool - Software-Item ist datenbanktechnisch gesehen genau die Datenbanktabelle AUDIT_SOFTWARE_TO_LICENSE_POOL.

Und dann kann man durch Änderungen der Markierung die Zuordnung von Software-Items zu dem Lizenzpool editieren.:

Die Zuordnung von Software-Einheiten zu Lizenzpools wird bearbeitet, indem die Mehrfachauswahl in der Software-Tabelle verändert wird, wie üblich durch 'Strg-Mausklick' bzw. 'Shift-Mausklick'. Und: Ein 'einfacher Klick' in eine Zeile startet die Auswahl neu.

Wenn in der Datenbank noch Zuordnungen von einem Lizenzpool zu Software-Items gespeichert sind, die Software aber laut Datenbank nicht mehr existiert, wird der 'fehlend'-Button aktiv. Betätigen des Buttons ruft ein Fenster auf. Es listet die referenzierte, aber anscheinend nicht mehr vorhandene Software und bietet an, aufzuräumen und, Zuordnungen (aus der Tabelle 'AUDIT_SOFTWARE_TO_LICENSE_POOL') zu entfernen,

Navigieren in der Software-Tabelle

Weil eine Veränderung der Liste der blau unterlegten Zeilen eine Datenänderung bedeutet, verhalten sich die Navigationsfunktionen in der Tabelle anders als sonst. Der Ort, an dem der Zeilencursor steht, wird nicht wie sonst durch eine als ganze markierte Zeile angezeigt, sondern durch die rote Sternchenmarke am Zeilenanfang.

Zeilencursor SW-Tabelle
Abbildung 5. Zeilencursor in der Softwaretabelle

Das Sternchen - das heißt, der Zeilencursor - wird neu platziert

  • mittels impliziter Suche nach einem Tabellenwert (zum Beispiel automatisch bei der Anzeige der zugeordneten Software-Einträge beim Wechsel der Lizenzpoolzeile),

  • durch eine über das Suchfeld der Tabelle angestoßene manuelle Suche,

  • mithilfe der roten Pfeil-Buttons in der Navigationsleiste der Tabelle.

  • durch Klicken in die Sternchenspalte der gewünschten Zeile (während ein Klick in dem Datenteil der Zeile die Zeilenauswahl neu setzt!)

Die Zuordnung von Software-Items zu Lizenzpools als Grundlage eines Compliance-Checks

Das Grundprinzip ist einfach: Wenn ein Software-Pool eingerichtet ist, werden mit ein paar Mausklicks die Software-Items markiert, für die dieser Pool in Anspruch genommen wird. Damit ist dann schon die Datengrundlage erstellt, um zum Beispiel für den von Microsoft geforderten Compliance-Check für Microsoft-Software die Gesamtzahl der einem Pool zuzurechnenden Installationen zu ermitteln. Das Resultat entsprechender Auswertungen findet sich im Tab 'Statistik' (Statistik).

Damit die angezeigten Ergebnisse korrekt sind, müssen die Zuordnungen von Software-Items zum Pool sorgfältig gepflegt werden. Insbesondere müssen sie vollständig sein in dem Sinn, dass, wenn eine dem Pool zuzurechnende Software installiert ist, auch tatsächlich die Zuordnung der Software-Variante zum Pool eingetragen wird.

Die Konfigurationsvarianten der Anzeige und Zusatzanzeigen dienen dazu, Funktionen bereitzustellen, um verschiedene Policies und Best-Practices bei der Datenpflege zu unterstützen.

Funktion: Filtern der zugeordneten Software-Items

Das Kontextmenü der Tabelle bietet die Option, zwischen der Anzeige aller Einträge (inklusive der mittels Hintergründ markierten) oder nur der markierten umzuschalten. Damit erhält man bei Bedarf - in der Standardkonfiguration der Anzeige - eine Liste der zugeordneten Software-Items. Dies ist u. a. hilfreich, weil die Zeilen der zugeordneten Software-Items nicht unbedingt in der Gesamtsoftwareliste direkt aufeinander folgen.

Kontextmenü Softwaretabelle
Abbildung 6. Softwaretabelle, Gesamtliste, mit Kontextmenü

Nach Betätigen der Auswahlfunktion:

Kontextmenü Softwaretabelle
Abbildung 7. Softwaretabelle, reduziert auf die Zuordnungen zum ausgewählten Lizenzpool

Statt das Kontextmenü zu verwenden, kann man auch auch auf das Filter-Icon neben dem Suchfeld klicken. Im Zustand "gefiltert", erscheint, so wie sonst auch, anstelle des Symbole 'offener Filter' das Symbol 'Filter geschlossen'; und umgekehrt.

Auch im gefilterten Zustand sind die Zuordnungen bearbeitbar - genauer, in diesem Zustand können naturgemäß Zuordnungen nur entfernt werden.

Funktion: Vervollständigung der Zuordnungen zu einem Softwarenamen

Wenn der Hersteller einer Software eine neue Unterversion oder einen Reparaturpatch verteilt, wird die neue Variante eine neue Windows-Software-ID erhalten und erscheint demzufolge mit einem neuen Eintrag in der Softwaretabelle, mit einer neuen ID. In der Regel wird die neue Software allerdings lizenztechnisch genauso zu behandeln sein wie die alte. Für sie gilt, wenn ein Lizenzvertrag für die alte Version erforderlich war, so wahrscheinlich auch für die neue. Das heißt, der Bedarf für eine Lizenzierung muss bei beiden Varianten mittels desselben Lizenzpools angemeldet werden, eine Abdeckung des Bedarfs wird dann über den gemeinsamen Lizenzpool organisiert.

Wenn die neue Variante ausgerollt wird, muss man daher darauf achten, dass zum betreffenden Lizenzpool eine Zuordnung hinzugefügt wird. Das kann man beim Paketausrollen leicht vergessen. Außerdem gibt es Software, die sich ohne aktives Zutun updatet. Dann fehlt nach dem Update die korrekte Zuordnung vielleicht sogar unbemerkt. Daher sind im configed - ab Version 4.1.9.8 - Hilfsfunktionen eingebaut, die die Vervollständigung der Zuordnungen erleichtern.

Hierbei wird die Hypothese zugrunde gelegt, dass das Datenfeld 'name' häufig für die Identfikation des benötigten Lizenzpools hinreichend ist und (oft) Unterschiede in anderen Bestandteilen der Software-ID in dieser Hinsicht ignoriert werden können.

Für die Arbeit mit dieser Hypothese dienen die Funktionen und Optionen im grau abgesetzten Kasten mit dem Label 'Alternativansicht'. Der Button 'Name → Pool' öffnet ein Zusatzfenster.

Inverse Zuordnungen
Abbildung 8. Inverse Zuordnungen Name - Software-ID(s) - Pool

Das Zusatzfenster enthält zwei Hilfstabellen.

Wenn vor dem Aufruf des Fensters die Default-Einstellung 'Alle Software-Namenseinträge anzeigen' belassen wurde, sind in der ersten Spalte der ersten Tabelle alphabetisch die Softwarenamen aufgelistet. Die zweite Spalte listet alle IDs auf, die mit dem jeweiligen Namen verbunden sind (wobei der Name als eigentlich erster ID-Bestandteil nicht wiederholt ist).

Die abhängige zweite Tabelle listet zum in der ersten Tabelle ausgewählten Namen die IDs einzeln auf und zeigt je ID an, ob eine Zuordnung zu einem Lizenzpool besteht bzw. zu welchem Pool. Die Lizenzpool-Zuordnungen können auf drei Arten über alle Zeilen der Tabelle vereinheitlicht werden:

  • Alle Zuordnungen entfernen

  • Den gerade (im Hauptfenster des Lizenzmanagements) ausgewählten Pool allen ID-Varianten zuweisen (das ist vermutlich der Standardfall)

  • Wenn die Varianten derzeit verschiedenen Pools zugeordnet sind, die Zuweisung einheitlich auf den Pool der ausgewählten Zeile festsetzen.

Optionen für alternative Zuordnung
Abbildung 9. Optionen für Zuordnungen Name - Software-ID(s) - Pool

Will man systematisch seine Lizenzpool-Zuordnungen überprüfen will, ist zu empfehlen, vor dem Aufruf des Zusatzfensters die Option zu wählen, 'Nur Namen mit varianter Zuordnung zu Lizenzpool anzeigen'. Ist diese Option aktiviert, wird die obere Tabelle im Zusatzfenster reduziert auf die Liste derjenigen Softwarenamen, zu denen mehrere IDs vorhanden sind 'und' für die dabei unterschiedliche Lizenzpoolzuweisungen existieren.

Sofern solche unaufgelösten Zuweisungsunterschiede existieren, wird dezent, durch ein "i" im kleinen Kästchen innerhalb des grauen Rahmens des Lizenzmanagementfensters hingewiesen. Die Information ist unauffällig designt, weil es je nach Lizenzsituation auch korrekt und erforderlich sein kann, dass die Varianten einer Software unterschiedlich lizenziert sind.

Schließlich kann, zwecks Suche nach eventuell vergessenen Lizenzzuordnungen, das Zusatzfenster noch mit der Option 'Nur Namen ganz ohne Lizenzzuweisung' aufgerufen werden.

Funktion: Noch nicht zugeordnete Software erkennen

Statt auf das zuvor beschriebene Verfahren zu setzen, kann eine sorgfältige Verwaltung der Lizenzierungen auch die Strategie verfolgen, möglichst jede erfasste Software einem Lizenzpool zuzuweisen. Installiert man dann eine neue Software bzw. eine Variante einer schon vorhandenen, ist das bisher nicht zugeordnete Software-Item gut identifizierbar.

Damit dies in der Praxis funktioniert, benötigt man Pseudolizenzpools wie "freie Software" oder "Betriebssystemkomponenten", denen man Software-Items zuordnen kann und für die gar keine gesonderte Lizenzierung existiert und erforderlich ist.

Zur Erleichterung der Umsetzung dieser Strategie bietet der configed die zusätzlichen Anzeigeoptionen an (vgl. auch Abbildung 4, “Softwaretabelle, Konfiguration der Anzeige”):

Optionen der Anzeige der von Software-Items
Abbildung 10. Optionen, welche Software-Items angezeigt werden

Angenommen, die Ausgangslage ist, dass die bisher erfasste Software bereits durchgängig Lizenzpools zugeordnet wurde. Dann ist folgende Schrittfolge sinnvoll:

  1. Eine (neue) Software auf einem Rechner installieren.

  2. 'swaudit' auf dem Rechner laufen lassen.

  3. Wenn die Software tatsächlich neu ist, erscheint ein neuer Eintrag in der Softwaretabelle; es können, wenn zum Beispiel Bibliotheken mitinstalliert werden, auch mehrere Einträge sein.

  4. Bei Vorauswahl eines unterstellten passenden Lizenzpools, und Aktivierung der Option 'Ausblenden von Software, die anderen Pools zugordnet ist' sind die neuen Tabellenzeilen die einzigen nicht markierten.

  5. Wenn der vorausgewählte Lizenzpool passt, kann mit Strg-Klick ein neuer Eintrag zu den vorher für den Lizenzpool registrierten hinzugefügt werden.

Für die Verteilung beliebiger. zunächst nicht bestimmter Software-Items auf Lizenzpools kann folgendermaßen verfahren werden:

  1. Option 'Nur die keinem Pool zugeordnete Software zeigen' aktivieren

  2. In der zweiten Optionsliste, Bearbeitungsmodus, anwählen 'Auswahl = SW-Einträge, die (neu) zugewiesen werden'

  3. Jetzt mit Strg-Klick, ggfs. unter Zuhilfenahme der Suchfunktion, Zeilen markieren

  4. Den Lizenzpool auswählen, dem die markierten Software-Items zugeordnet werden soll. Jetzt wird der Speicher-Button aktiv.

  5. Speichern

  6. Den Bearbeitungsmodus wieder zurücksetzen auf 'Auswahl = Gesamte Liste …​'

Bitte beachten, dass bei eingeschaltetem Tabellenfilter die hier beschriebenen Funktionen sich (scheinbar) abweichend verhalten.

Lizenz anlegen

Das Einrichten einer Lizenz bzw. die Bereitstellung einer Lizenz in einem Lizenzpool, erfordert mehrere Schritte. Sie können, mit vorgegebenen Optionen vorstrukturiert, auf der zweiten Tab-Seite des Lizenzmanagement-Fensters (Titel "Lizenz anlegen") durchgeführt werden.

Die Seite startet mit einer (hier nicht editierbaren) Tabelle der verfügbaren Lizenzpools. Dort ist zunächst der Pool auszuwählen, für den eine Lizenz eingerichtet werden soll.

Lizenzmanagement:Tab 'Lizenz anlegen'
Abbildung 11. Lizenzmanagement:Tab "Lizenz anlegen"

Bevor die weitere Schritte beschrieben werden, empfiehlt es sich, einige Begrifflichkeiten zu klären:

Aspekte des Lizenzkonzepts

Unter Lizenzierung (licensing) soll die faktische Zuweisung der Erlaubnis zur Nutzung einer Software (durch Installation einer Software) verstanden werden. Sie schließt oft, aber nicht notwendig die Nutzung eines hierfür bestimmten Lizenzschlüssels (license key) ein.

Das Lizenzierungsrecht ist die in ihrem Geltungsumfang definierte Erlaubnis, solche Zuweisungen durchführen zu dürfen. In der opsi-Datenbank wird das Lizenzierungsrecht als software license bezeichnet, ein entsprechender Datensatz ist demgemäß identifiziert durch eine 'softwareLicenseId'. Verschiedene Varianten der konkreten Ausgestaltung des Lizenzierungsrechts (z.B. für wie viele PCs, mit welcher Gültigkeitsdauer etc.) werden als Lizenzmodelle bezeichnet. Ein Lizenzierungsrecht gründet in einem Lizenzvertrag (license contract), der es im juristischen Sinn feststellt und dokumentiert.

Eine Lizenzierungsoption definiert die Anwendungsmöglichkeit eines Lizenzierungsrechts für einen bestimmten Lizenzpool. In opsi ist die Lizenzierungsoption festgelegt durch die Kombination einer 'softwareLicenseId' und einer 'licensePoolId'. Zur Lizenzierungsoption gehört auch der Wert eines spezifischen Lizenzschlüssels ('licenseKey', sofern er für eine Installation erforderlich ist).

Schließlich dokumentiert eine Lizenznutzung die "gezogene" Lizenzierungsoption, d.h. die erfolgte Anwendung einer Lizenzierungsoption für einen Client. Sie ist die vollzogene und berechtigte Lizenzierung einer Softwareinstallation. Beschrieben wird sie durch die Kombination 'softwareLicenseId', 'licensePoolId' und dem eindeutigen Namen des betreffenden Clients, 'hostId'. Der verwendete Lizenzschlüssel ('licenseKey') wird ergänzend notiert.

Lizenzvertrag erfassen

Nach der Auswahl des Lizenzpools, für den eine Lizenzierungsoption angelegt werden soll, ist im zweiten Schritt der Lizenzvertrag zu bestimmen, auf den die Lizenzierung letztlich gründen soll. Im Seitenabschnitt "Lizenzvertrag auswählen oder erfassen" auf der Tab-Seite "Lizenz anlegen" kann ein vorhandener spezifischer Vertrag in der Tabelle ausgewählt oder ein neuer Vertrags-Datensatz angelegt werden.

In einem Lizenzvertrags-Datensatz werden wichtige Ordnungsgesichtspunkte für einen Vertrag in den Feldern (Vertrags-) 'partner', Abschlussdatum ('conclusion date'), Benachrichtigungsdatum ('notification date') und Auslaufdatum ('expiration date') dokumentiert. Hinzu kommt ein freies Notizfeld ('notes'), um z.B. den Aufbewahrungsort für das Realdokument eines Vertrages aufzunehmen. Die Vertrags-ID ('licenseContractId') dient zur Identifizierung des Lizenzvertrags in der Datenbank.

Die Erfassung eines neuen Datensatzes wird über das Kontextmenü gestartet. Es werden automatisch Standard-Einträge generiert, insbesondere eine aus der aktuellen Zeit generierte Vertrags-ID und als Vertragsabschlussdatum der aktuelle Tag. Wenn die Vertragsbedingungen sich z.B. aus einem Software-Kauf implizit ergeben bzw. anderweitig dokumentiert und verfolgt werden können, können die Standard-Einträge belassen werden. Andernfalls sind hier Werte einzugeben, die eine geordnete Verfolgung des zugrundeliegenden Vertrags z.B. durch Verweis auf ein Aktenzeichen im Feld 'notes' erlauben.

Die Vertrags-ID kann nur bearbeitet werden, solange der Datensatz nicht gespeichert ist.

Lizenzmodell konfigurieren

Der dritte Seitenabschnitt der Tab-Seite "Lizenz anlegen" dient dazu, die Ausgestaltung des einzurichtenden Lizenzierungsrechts festzulegen.

Es werden verschiedene Varianten angeboten:

  • Standardlizenz

  • Volumen-Lizenz

  • OEM-Lizenz

  • Concurrent-Lizenz

Jede Option ist durch einen Button repräsentiert, bei dessen Betätigung die Felder im folgenden Formularbereich vor ausgefüllt werden.

Standardlizenz soll bedeuten, dass die Lizenz zu einer Einzel-Installation der Software berechtigt und diese auf einem beliebigen PC erfolgen kann. Ein ggf. erfasster Lizenzschlüssel wird nur für eine Installation verwendet.

Eine Volumen-Lizenz legitimiert n Installationen, ggf. mit ein- und demselben Lizenzschlüssel. n = 0 soll dabei bedeuten, dass innerhalb des Netzes der Schlüssel beliebig oft zu Installationen verwendet werden darf (Campus-Lizenz).

Als OEM-Lizenz wird die Situation bezeichnet, dass eine Lizenz nur für einen, festzulegenden PC genutzt werden darf. Dies ist häufig die intendierte Lizenzart, wenn ein PC mit vorinstalliertem Betriebssystem gekauft wird.

Die Concurrent-Lizenz ist aus opsi-interner Sicht eine Volumenlizenz, die beliebig häufig genutzt werden darf. Mit der Auszeichnung des Lizenzmodells als Concurrent-Lizenz ist nach außen jedoch die Aussage verbunden, dass die Anzahl der faktisch in Anspruch genommenen Lizenzierungen auf andere Weise kontrolliert wird, z.B. durch einen Lizenzserver.

Wenn einer der Buttons betätigt wird, erhält auch das ID-Feld eine Vorschlagsbelegung mit einem auf der Basis von Datum und Zeit generierten String, der bearbeitet werden kann.

Je nach Lizenztyp können die anderen Felder editiert werden oder sind unveränderlich.

Das Feld "Ablaufdatum" definiert die technische Gültigkeitsgrenze des Lizenzierungsrechts (während das inhaltlich gleichbedeutende Feld 'expirationDate' der Lizenzvertragstabelle Dokumentationszwecken dient). Es ist allerdings nur für einen künftigen Gebrauch vorgesehen, eine Verwendung ist derzeit nicht implementiert.

Abschicken der Daten

Der Button "Abschicken" veranlasst, dass die erfassten Daten an den opsi-Service gesendet und - sofern kein Fehler auftritt - permanent in die opsi-Datenhaltung überführt werden.

Dabei werden Datensätze für ein Lizenzierungsrecht (software license) basierend auf dem ausgewählten Vertrag und eine darauf bezogene Lizenzierungsoption erzeugt.

Die Liste der verfügbaren Lizenz(ierungs)optionen, die im unteren Seitenabschnitt dargestellt ist, wird automatisch neu geladen und die Markierung auf die neu erzeugte Option gesetzt.

An dieser Stelle kann, falls erforderlich, der erfasste Lizenzschlüssel korrigiert werden.

Lizenzen bearbeiten

In neunzig Prozent der Anwendungsfälle werden die Eingabe- und Editiermöglichkeiten der Tab-Seiten "Lizenzpools" und "Lizenz anlegen" genügen, um Lizenzoptionen zu erfassen und zu editieren.

Weitere Details der Lizenzkonfiguration macht die Tab-Seite "Lizenzen bearbeiten" zugänglich. Sie präsentiert die Interna der Lizenzierungsoptionen in drei Tabellen und erlaubt ggf. deren Anpassung an spezifische Erfordernisse.

Lizenzmanagement:Tab 'Lizenzierungen bearbeiten'
Abbildung 12. Lizenzmanagement:Tab "Lizenzierungen bearbeiten"

Im folgenden Abschnitt wird gezeigt, wie eine Lizenz mit Downgrade-Option konfiguriert werden kann, wie sie z.B. von Microsoft beim Kauf einer Windows-7-Professionallizenz angeboten wird.

Beispiel Downgrade-Option

Die Downgrade-Option bedeutet, dass anstelle der gekauften Software auch die entsprechende Vorgängerversion, z.B. Windows XP anstelle von Windows Vista, installiert werden darf. Bei diesem Microsoft-Modell darf irgendein für die Vorgängerversion vorhandener Lizenzschlüssel für eine zusätzliche Installation verwendet werden, für die er ursprünglich nicht legitimiert war.

Im opsi-Modell kann diese Konstruktion folgendermaßen abgebildet werden:

Auf der Tab-Seite "Lizenz anlegen" wird die Vista-Lizenz regulär erfasst. Das Ergebnis der Prozedur ist eine neue Lizenzierungsoption (angezeigt in der entsprechenden Tabelle am Seitenende), die auf einem gleichfalls neu angelegten Lizenzierungsrecht beruht. Letzterer ist identifizierbar durch den Wert von 'softwareLicenseId'.

Lizenzmanagement:Kopieren der License-ID
Abbildung 13. Lizenzmanagement:Lizenzmanagement:Kopieren der License-ID in die Lizenzoptionen über das Kontext-Menü

Für das weitere Vorgehen wird dieser Wert benötigt. Man kann ihn sich merken oder kann einen Editor als Zwischenablage nutzen und ihn dorthin mit Drag & Drop übertragen. Oder man sucht ihn auf der Tab-Seite "Lizenzen bearbeiten" in der dortigen Tabelle der Lizenzierungsrechte wieder heraus (bitte das Kontextmenü der Tabelle beachten: hier findet sich eine Spezialfunktion zum Kopieren der ID).

Der entscheidende Schritt besteht nun darin, eine Verknüpfung des gegebenen Lizenzierungsrechts mit einem zusätzlichen Lizenzpool herzustellen.

Dazu ist auf der Tab-Seite "Lizenzen bearbeiten" in der Tabelle der verfügbaren Lizenzoptionen ein neuer Datensatz anzulegen. In die betreffenden Felder des Datensatzes sind die ID des Lizenzierungsrechts, die 'softwareLicenseId', sowie die ID des zusätzlichen Lizenzpools - im Beispiel die für Windows XP - einzutragen. Für die Installation von Windows XP ist zusätzlich ein hierfür geeigneter Schlüssel, z.B. ein bei einem anderen Client bereits verwendeter, hinzuzufügen.

Nach dem Speichern sind zwei Lizenzierungsoptionen registriert, die auf das gleiche Lizenzierungsrecht verweisen! Der opsi-Service rechnet jede Anwendung einer der beiden Optionen auf die maximale Zahl von Installationen an, die das Lizenzierungsrecht einräumt. Deshalb liefert er in dem Fall einer Downgrade-Option für eine Einzel-PC-Lizenz (mit 'maxInstallations' = 1) nur entweder für eine Installation von 'Windows Vista' _oder für eine Installation von 'Windows XP' einen Schlüssel.

Lizenzenverwendung

Zuteilungen und Freigabe von Lizenzen

Die Anwendung einer Lizenzierungsoption für die Installation der Software auf einem Rechner führt zu einer Lizenznutzung.

Im opsi-Kontext werden Installationen skriptbasiert automatisch durchgeführt, wobei das auf den Clients abgearbeitete (Winst-) Skript Aufrufe an den zentral laufenden opsi-Service absetzt.

Im Folgenden werden die für die Lizenzverwaltung relevanten Service-Aufrufe und Skript-Befehle kurz dargestellt.

Für weitere Informationen zur Skriptsprache und zu spezifischen opsi-Kommandos s. die entsprechenden Dokumentationen, insbesondere das opsi-Winst-Handbuch.

opsi-Service-Aufrufe zur Anforderung und Freigabe einer Lizenz

Der opsi-Service-Befehl, mit dem z.B. das setup-Skript einer Betriebssystem-Installation eine Lizenzoption "ziehen" und den benötigten Lizenzkey vom Lizenzmanagement anfordern kann, lautet getAndAssignSoftwareLicenseKey.

Parameter sind die ID des Hosts, auf dem installiert wird und die ID des Lizenzpools, für den die Lizenz benötigt wird. Anstelle der Lizenzpool-ID kann auch eine Produkt-ID (oder eine Windows-Software-ID) als Parameter übergeben werden, falls eine entsprechende Zuordnung von Produkt bzw. Windows-Software-ID zum Lizenzpool im Lizenzmanagement registriert ist.

Analog gibt der Befehl deleteSoftwareLicenseUsage (wieder parametrisiert mit hostID und wahlweise Lizenzpool-ID), Product-Id oder Windows-Software-ID - eine Lizenznutzung frei und führt sie in den Pool der nicht verwendeten Lizenzierungsoptionen zurück.

Für die umfassende Dokumentation der opsi-Service-Befehle zum Lizenzmanagement s. unten.

Winst-Skriptbefehle für die Anforderung und Freigabe von Lizenzen

In den Winst sind die beiden client-bezogenen Befehle des Service in einen typischen Winst-Aufruf-Syntax integriert.

Ein Winst-Skript kann mit der Funktion DemandLicenseKey einen Schlüssel anfordern und damit die entsprechende Lizenzierungsoption 'ziehen'. Die Syntaxbeschreibung ist

DemandLicenseKey (poolId [, productId [, windowsSoftwareId]])

Die Funktion gibt den Lizenzschlüssel (kann auch leer sein) als String-Wert zurück.

set $mykey$ = DemandLicenseKey ("pool_office2007")

Der Wert kann dann für die weiteren Skriptbefehle zur Installation der Software verwendet werden.

Für die Freigabe einer Lizenzoption bzw. des Schlüssels - typischerweise in einem Winst-Deinstallationsskript benötigt - existiert der Befehl FreeLicense mit der analogen Syntax:

FreeLicense (poolId [, productId [, windowsSoftwareId]])

Die Boolesche Funktion opsiLicenseManagementEnabled prüft, ob das Lizenzmanagement freigeschaltet ist und kann für Skriptvariationen verwendet werden:

if opsiLicenseManagementEnabled
	set $mykey$ = DemandLicenseKey ("pool_office2007")
else
	set $mykey$ = getProductProperty("productkey","")
endif

Die Service-Methoden können zum Beispiel über das Kommandozeilen-Werkzeug opsi-admin aufgerufen werden.

Mit einem '*' gekennzeichete Parameter sind optional.

Lizenzverträge

method createLicenseContract(*licenseContractId, *partner, *conclusionDate, *notificationDate, *expirationDate, *notes)

Die Methode erstellt einen neuen Lizenzvertragsdatensatz mit der ID 'licenseContractId'. Wird keine 'licenseContractId' übergeben, wird diese automatisch generiert. Bei Angabe der 'licenseContractId' eines bestehenden Vertrages wird dieser Vertrag entsprechend bearbeitet.

Die Parameter 'partner' (Vertragspartner) und 'notes' (Notizen zum Vertrag) sind frei wählbare Strings. 'conclusionDate' (Datum des Vertragsabschlusses), 'notificationDate' (Erinnerungs-Datum) und 'expirationDate' (Ablauf-Datum des Vertrags) sind im Format JJJJ-MM-TT zu übergeben (z.B. 2009-05-18). Die Methode gibt die 'licenseContractId' des angelegten oder bearbeiteten Vertrags zurück.

Mit den String-Funktionen getLastServiceErrorClass sowie getLastServiceErrorMessage kann auf einen Fehler reagiert werden, wenn z.B. keine freie Lizenz mehr verfügbar ist:

if getLastServiceErrorClass = "None"
	comment "kein Fehler aufgetreten"
endif

Die Fehlerklasse LicenseMissingError wird zurückgegeben, falls eine Lizenz angefordert wird, aber nicht verfügbar ist.
Die Fehlerklasse LicenseConfigurationError wird zurückgegeben, für die Fälle in welchen die Konfiguration keine eindeutige Zuordnung eines Lizenzpools zu einer Software zulässt. Das kann der Fall sein, wenn keine Zuweisung existiert oder keine eindeutige Zuordung möglich ist.

Manuelle Administration der Lizenznutzung

Der opsi-Konfigurationseditor dokumentiert die über den opsi-Service registrierten Lizenzierungen auf der Tab-Seite "Lizenzenverwendung":

Lizenzmanagement:Tab Lizenzenverwendung
Abbildung 14. Lizenzmanagement:Tab "Lizenzenverwendung"

Die Tab-Seite ermöglicht, die Verwendung der Lizenzen auch manuell zu verwalten. Dies kann interessant sein, wenn eine Software nur vereinzelt installiert werden soll und nicht in die opsi-Verteilung eingebunden ist.

Im Einzelnen:

  • Mit der Funktion "Zeilen löschen" in der Lizenzverwendungstabelle wird eine Lizenzoption wieder freigegeben.

  • Der Abschnitt "Lizenz reservieren" unten auf der Seite dient dazu, eine Lizenzoption anzufordern und zu belegen.

  • Durch Bearbeiten des Lizenzschlüsselfeldes in der Lizenzverwendungstabelle kann der tatsächlich für eine Lizenzierung verwendete Schlüssel (neu) bestimmt werden.

Erhaltung und Löschung der Lizenzenverwendungen

Wenn eine Software erneut installiert wird und der Winst mit 'DemandLicenseKey' eine Lizenz anfordert, wird die vorher zugeordnete Lizenzoption weiter verwendet. Insbesondere liefert die Winst-Funktion denselben Schlüssel wie vorher.

Falls dies nicht gewünscht ist, muss die Verwendung der Lizenzierung durch den Winst mit FreeLicense, mit dem opsi-service-Aufruf deleteSoftwareLicenseUsage oder manuell aufgehoben werden.

Entsprechend bleiben bei der Reinstallation eines PCs die Lizenzverwendungen erhalten, sofern sie nicht ausdrücklich gelöscht werden. Um sie freizugeben, können auf der Tab-Seite "Lizenzenverwendung" die entsprechenden Lizenzen herausgesucht und gelöscht werden oder es kann der Serviceaufruf deleteAllSoftwareLicenseUsages (mit der Host-ID des betreffenden PCs als Parameter) verwendet werden.

Abgleich mit Inventarisierung

Die Tab-Seite "Abgleich mit der Inventarisierung" verzeichnet für jeden PC und jeden Lizenzpool, ob eine Lizenzpool-Verwendung mit dem opsi-Lizenzmanagement registriert ist ('used_by_opsi') und ob auf dem PC laut Software-Inventarisierung (mittels 'swaudit') eine Windows-Software, die eine Lizenz aus dem Pool benötigen würde, installiert ist ('SWinventory_used').

Damit die Ergebnisse von 'swaudit' die faktischen Lizenzverwendungen beschreiben können, müssen die relevanten Software-IDs den jeweiligen Lizenzpools zugeordnet worden sein (Tab-Seite "Lizenzpools").

Das Lizenzmanagement zählt beim Abgleich mit der Softwareinventarisierung nur maximal 1 Vorkommen pro Client und Lizenzpool. Wenn also ein Lizenzpool 'office2010' mit 10 verschiedenen Mustern aus der Softwareinventarisierung verknüpft ist, welche alle ein Hinweis darauf sind das hier 'MS Office 2010' installiert ist, so wird das nur als eine Installation gezählt auch wenn alle 10 Muster auf einem Client gefunden werden.

"Lizenzmanagement:Tab Abgleich mit Inventarisierung
Abbildung 15. Lizenzmanagement:Tab "Abgleich mit Inventarisierung"

Die Tabelle kann wie stets per Drag & Drop z. B. in eine Tabellenkalkulation übernommen werden. Falls der 'opsi-configed' über die entsprechenden Rechte verfügt, d.h. standalone (nicht in einer Applet-Sandbox) läuft, kann die Tabelle über eine Option des Kontextmenüs auch ausgedruckt werden.

Mittels des Configs 'configed.license_inventory_extradisplayfields', das in der Host-Parameter-Seite des Servers bearbeitet werden kann, können zusätzliche Informationen zum Client in die Tabelle aufgenommen werden.

Statistik

Übersicht über den globalen Lizenzierungsstand

Die Tab-Seite "Statistik" dient dazu, eine summarische Übersicht über die genutzten und noch freien Lizenzoptionen der verschiedenen Lizenzpools zu erhalten.

Lizenzmanagement:Tab Statistik
Abbildung 16. Lizenzmanagement:Tab "Statistik"

Zusätzlich zur Angabe der registrierten Lizenzverwendungen ('used by opsi') bzw. der hiernach noch freien ('remaining…​') Lizenzen wird in die Übersicht auch die Gesamtzahl tatsächlich vorfindbarer Installationen, die eigentlich eine Lizenz benötigen, einbezogen ('SWinventory_used').

Die Daten der Spalte 'SWinventory_used' beruhen auf den Scans der Registry der Clients, die das opsi-Produkt 'swaudit' durchführt, und den Zuordnungen der hiermit ermittelten Software-IDs zu den jeweiligen Lizenzpools, verwaltet in der Tab-Seite "Lizenzpools" (vgl. Lizenzpools).

Über eine Option des Kontextmenüs kann die Tabelle ausgedruckt werden (aufgrund der spezifischen Security-Restriktionen nicht aus dem Applet), mit Drag & Drop können die Daten z. B. in eine Tabellenkalkulation übernommen werden.

Fall Downgrade-Option

Wenn eine Downgrade-Option konfiguriert wurde (wie in Beispiel Downgrade-Option beschrieben), äußert sich dies in der statistischen Übersicht der Lizenzverwendung wie folgt:

Eine Downgrade-Lizenz räumt je eine Lizenzierungsoption für (mindestens) zwei Lizenzpools ein. Nur eine der beiden kann tatsächlich genutzt werden. Sobald daher eine Lizenzoption gezogen ist, verringert sich in der Spalte 'remaining_opsi` in beiden Zeilen der Wert um je 1. Scheinbar vermindert sich also die Zahl der verfügbaren Lizenzen um 2! Dies spiegelt aber die tatsächliche Berechtigungssituation wider.

Service-Methoden zum Lizenzmanagement

Die Service-Methoden zum Lizenzmanagement können über das Kommandozeilenwerkzeug opsi-admin verwendet werden, um in einem Skript z.B. vorhandene Lizenzen aus einer Datei einzulesen. Hier als Beispiel das script create_license-mixed.sh

#!/bin/bash
# This is a test and example script
# (c) uib gmbh licensed under GPL

PRODUCT_ID=license-test-mixed
# read the license key from a file
# myretailkeys.txt has one licensekey per line
MYRETAILKEYS=`cat myretailkeys.txt`
# myoemkeys.txt has one pair: <licensekey> <hostid.domain.tld> per line
MYOEMKEYS=`cat myoemkeys.txt`
# some output
echo "$PRODUCT_ID"

# this is the function to create the oem licenses
#############
createlic ()
{
while [ -n "$1" ]
do
	#echo $1
	AKTKEY=$1
	shift
	#echo $1
	AKTHOST=$1
	shift
	echo "createSoftwareLicense with oem key: ${PRODUCT_ID}-oem-${AKTKEY} for host ${AKTHOST}"
	MYLIC=`opsi-admin -dS method createSoftwareLicense "" "c_$PRODUCT_ID" "OEM" "1" "${AKTHOST}" ""`
	opsi-admin -d method addSoftwareLicenseToLicensePool "$MYLIC" "p_$PRODUCT_ID" "${PRODUCT_ID}-oem-${AKTKEY}"
done
}
#############

# here the script starts

# delete the existing license pool and all connected licenses
# ATTENTION: never (!) do this on a productive system
echo "deleteLicensePool p_$PRODUCT_ID"
opsi-admin -d method deleteLicensePool "p_$PRODUCT_ID" true

# delete the existing license contract
echo "deleteLicenseContract c_$PRODUCT_ID"
opsi-admin -d method deleteLicenseContract "c_$PRODUCT_ID"

# create the new license pool
# the used method has the following syntax:
# createLicensePool(*licensePoolId, *description, *productIds, *windowsSoftwareIds)
echo "createLicensePool p_$PRODUCT_ID"
opsi-admin -d method createLicensePool "p_$PRODUCT_ID" "opsi license test" \'['"'$PRODUCT_ID'"']\' \'['"'$PRODUCT_ID'"']\'

# create the new license contract
# the used method has the following syntax:
# createLicenseContract(*licenseContractId, *partner, *conclusionDate, *notificationDate, *expirationDate, *notes)
echo "createLicenseContract c_$PRODUCT_ID"
opsi-admin -d method createLicenseContract "c_$PRODUCT_ID" "uib gmbh" "" "" "" "test contract"

# create the new license and add the key(s)
# the used methods have the following syntax:
# createSoftwareLicense(*softwareLicenseId, *licenseContractId, *licenseType, *maxInstallations, *boundToHost, *expirationDate)
# addSoftwareLicenseToLicensePool(softwareLicenseId, licensePoolId, *licenseKey)

# create the retail licenses:
for AKTKEY in $MYRETAILKEYS
do
	echo "createSoftwareLicense with retail key: ${PRODUCT_ID}-retail-${AKTKEY}"
	MYLIC=`opsi-admin -dS method createSoftwareLicense "" "c_$PRODUCT_ID" "RETAIL" "1" "" ""`
	opsi-admin -d method addSoftwareLicenseToLicensePool "$MYLIC" "p_$PRODUCT_ID" "${PRODUCT_ID}-retail-${AKTKEY}"
done

# create the oem licenses
createlic $MYOEMKEYS

# create the volume licenses
echo "createSoftwareLicense with volume key: ${PRODUCT_ID}-vol-key"
MYLIC=`opsi-admin -dS method createSoftwareLicense "" "c_$PRODUCT_ID" "VOLUME" "10" "" ""`
opsi-admin -d method addSoftwareLicenseToLicensePool "$MYLIC" "p_$PRODUCT_ID" "${PRODUCT_ID}-vol-key"#