# Softwareverteilung

Softwareverteilung (englisch software deployment) nennt man Prozesse zur Installation von Software auf Rechnern.
Viele Anwender verfügen nicht über die Kenntnisse oder Berechtigungen, um Software selbst zu installieren. Daher ist es in Organisationen üblich, dass qualifizierte Mitarbeiter diese Aufgabe für die Anwender erledigen bzw. veranlassen. In größeren Organisationen wird Software unbeaufsichtigt installiert. Beispiel dafür sind die unbeaufsichtigte Installation unter Windows und die unbeaufsichtigte Installation unter Linux.
Die Softwareverteilung ist ein kritischer Prozess, da mit ihr auch Betriebssystemkorrekturen sowie die Installation sicherheitsrelevanter Anwendungen wie Virenscanner, Browser und E-Mailprogramm erfolgen. Fehler bei der Softwareverteilung können Störungen und Ausfälle an einer großen Zahl von Arbeitsplatzrechnern nach sich ziehen. Eine ordentlich umgesetzte Softwareverteilung unterstützt auch dem nachhaltige Betrieb von Systemlandschaften, da die einzelnen Benutzer nicht eigenständig „Irgendwelche“ Software installieren können und immer ein gewisser Updatestand gewährleistet ist.

## Ziel der Softwareverteilung

Ziel einer Softwareverteilung ist die automatische Erstinstallation, Konfiguration und Wartung einer großen Anzahl von Computern mit geringem Aufwand. Weiterhin muss ein störungsarmer und sicherer Betrieb erreicht werden. Häufig strebt man auch an, dass die Rechner möglichst einheitlich mit Software ausgestattet werden. Als Nebeneffekt erhält man oft Informationen über die Anzahl von Installationen lizenzpflichtiger Softwareprodukte.

## Rollen der Softwareverteilung
### Administrator

    Konfiguriert und betreibt das Softwareverteil-System

### Anwender

    Erhält benötigte Anwendungen automatisch installiert und konfiguriert

### Softwarehersteller

    Liefert die Applikationen und das Installationsprogramm

### Produktverantwortlicher

    Legt für eine Applikation die Konfiguration und die Art der Installation fest

### Paketierer

    Verpackt das Setup-Programm der Applikation in ein Paket des Softwareverteilsystems

### Netzwerkbetreiber

    Betreibt das Rechnernetz, auf dem die Softwareverteilung stattfindet. Ist bei kleinen Organisationen oftmals identisch mit dem Administrator. Bei großen Organisationen wird das Netzwerk fast immer unabhängig betrieben.

### Serverbetreiber

    Betreibt die notwendigen Server. Ist bei kleinen Organisationen oftmals identisch mit dem Administrator. Bei großen Organisationen werden Server meist unabhängig betrieben.

### Rollout-Verantwortlicher

    Verteilt neue Produkte oder Releases gemäß einer vorliegenden Einsatzplanung auf die gewünschten Endgeräte.

### Support

    Unterstützt bei Störungen oder Problemen den Anwender und nutzt die Softwareverteilung zur Informationsgewinnung und zur Behebung von Störungen. Arbeitet über zahlreiche Schnittstellen mit vielen anderen Rollen zusammen:
   * erhält vom Administrator Informationen über Status und Konfiguration des Systems
   * erhält vom Softwarehersteller Informationen zum Support der Produkte und leitet (je nach bestehendem Vertrag zur Softwarewartung oder Service-Level-Agreement) schwere Störungen nach Qualifikation zur Lösung an den Hersteller weiter
   * erhält vom Produktverantwortlichen Informationen über die Konfiguration der ausgebrachten Softwareprodukte und die Releaseplanung
   * erhält vom Paketierer Informationen über die technischen Besonderheiten der Pakete
   * erhält vom Netzwerk- und Serverbetreiber Informationen über Störungen
Besonders bei kleineren Firmen und Organisationen können mehrere Rollen durch eine Person ausgefüllt werden.

## Komponenten der Softwareverteilung
### Netzwerk

    Dient zur Übertragung der Pakete und der Konfigurationsdaten. Wird auch verwendet, um die Ist-Situation (Inventar) an Server zurückzusenden.

### Protokolle und Standards

    Standardisierte Verfahren, mit denen Computer Daten austauschen können. Für die Softwareverteilung wichtig sind unter anderem BOOTP, PXE, IP, DHCP, HTTP, FTP, UNC, Multicast und LDAP.

### Computer

    Erhält durch die Softwareverteilung das Betriebssystem und die Anwendungen installiert.

### Paket

    Sammlung von Dateien, welche eine Applikation automatisiert installiert und konfiguriert. Dabei kann ein Paket mehrere Applikationen inklusive der nötigen Hardware-Treiber enthalten. In der Regel werden alle notwendigen Dateien in ein komprimiertes Archiv zusammengepackt.

### Paketierungs-Software

    Spezielles Programm zur Erstellung eines Pakets.

### Konfigurations-Datenbank

    Speichert zentral alle Konfigurationsdaten des Systems ab.

### Konfigurations-Server

    Ablageort der Konfigurationsdatenbank. Stellt Dienste zur Verfügung, mit denen die Konfigurationsdaten den Computern zugänglich gemacht werden.

### Konfigurations-Software

    Software zur Speicherung und Pflege der Konfigurationsdaten, das heißt des Anwender- und Rechnerverzeichnisses sowie der Verzeichnisse der Pakete, der installierten Programme und ihrer Parameter.

### Paket-Server

    Stellt die Pakete über das Netzwerk zur Verfügung. Braucht eine leistungsfähige Netzwerkanbindung. Der Paketserver und der Konfigurationsserver sind unter Umständen derselbe physische Computer.

## Installationsphasen
### Installation des Betriebssystems

Bevor Anwendungen installiert werden können, muss zunächst das Betriebssystem installiert werden. Dazu kann entweder eine CD/DVD verwendet werden oder ein Protokoll zum Netzwerkboot von Computern (BOOTP, PXE). Im ersten Fall bootet der Computer von der CD/DVD, auf der alle notwendigen Dateien gespeichert sind. Das Programm zur Installation des Betriebssystems (auch auf dem Datenträger) wird automatisch gestartet. Dieses kann oft so vorkonfiguriert werden, dass keine Eingaben durch den Anwender mehr notwendig sind.
Bei der Netzwerkinstallation lädt das BIOS des Computers zunächst vom Netzwerk die notwendigen Programme (meist über das TFTP Protokoll) und führt diese dann aus. In der Regel lädt dieses Programm dann das Betriebssystem-Installationsprogramm von einem Server im Netzwerk.

### Verfahren zur Installation des Betriebssystems

Bei der Installation des Betriebssystems werden zwei verschiedene Verfahren verwendet:
* Installationsprogramm mit spezieller Konfiguration
* Imaging-Verfahren
Im ersten Fall wird das Programm aufgerufen, das auch der Anwender verwendet, um das Betriebssystem zu installieren. Alle notwendigen Eingaben erhält das Programm aber nicht vom Anwender, sondern aus einer Konfigurationsdatei (unattended, also unbeaufsichtigte Installation). Das Betriebssystem-Installationsprogramm führt dann analog zur manuellen Installation des Betriebssystems alle notwendigen Schritte aus, z. B. die Erkennung der vorhandenen Hardware, Festlegen der Systemsprache, Setzen der Zeitzone, Einrichtung von Benutzerkonten. Im zweiten Fall wird das Betriebssystem einmal auf einem Computer installiert, dann davon ein Speicherabbild (englisch image) erstellt. Dieses wird dann auf der CD/DVD oder dem Netzwerk abgelegt und anschließend einfach sektorweise auf die Festplatte kopiert.
Das erste Verfahren hat den Vorteil, dass es weitgehend unabhängig von der verwendeten Hardware ist. Notwendige zusätzliche Treiber können dem Betriebssystem-Installationsprogramm in einem Ordner bereitgestellt werden. Nachteilig sind die hohe Dauer der Ausführung und dass alle Anwendungsprogramme nachträglich installiert werden müssen. Das zweite Verfahren ist äußerst schnell und erlaubt eine Integration zusätzlicher Standardanwendungen in das eigentliche Betriebssystem-Image. Nachteilig wirkt sich jedoch die Abhängigkeit der Installation von der jeweils verwendeten Hardware aus. Folglich muss für jeden Hardware-Typ ein eigenes Image erstellt, gepflegt und verteilt werden. Letztlich wird durch dieses Verfahren eine bessere Performanz auf Kosten des Verwaltungsaufwands und des Speicherbedarfs erreicht.
Für Windows Vista und Windows 7 hat Microsoft selbst ein dateibasiertes Imaging-Verfahren entwickelt. Auf einem Rechner werden Windows Vista und die gewünschten Anwendungen installiert. Dann wird hieraus mit Hilfe des Programms sysprep ein Image erzeugt. Dabei werden bestimmte Teile des Betriebssystems (Security-IDs und Treiberdateien) beim Erstellen des Images entfernt. Auf dem Zielsystem wird Windows PE (Preinstallation Environment) gebootet, eine minimale Version von Windows Vista, die ohne Installation gestartet werden kann. Das Image wird dann auf dem Zielsystem mit dem Windows-Vista-Setup-Programm installiert. Dies ist technisch gesehen ein Kopieren von Dateien. Das Setup-Programm führt dann die Standard-Hardware-Erkennung durch und installiert die notwendigen Treiber. Dieses Verfahren ist deutlich schneller als das bisherige Setup, aber erheblich langsamer als die echten, sektorbasierten Verfahren.

### Installation von Anwendungen

Nachdem das Betriebssystem vollständig installiert ist, können die – meist paketierten – Anwendungsprogramme installiert werden.
Für Microsoft Windows kann dabei die MSI-Technik (Windows Installer) verwendet werden, bei der das Setupprogramm bereits im Betriebssystem integriert ist. Für Installationsprogramme, die nicht als MSI vorliegen, bietet sich eine eigene Paketierung oder ein natives Installationsverfahren an, bei dem das Original-Setup verwendet wird. Auch bei Programmen, die aus Gründen des Supports nicht umpaketiert werden dürfen, kann man alternativ native Installationsverfahren (AutoIt, WinRobots) anwenden.
Unter Linux sind das RPM-Format und Debian-Pakete weit verbreitet. Das Paket erhält nur noch die notwendigen Dateien der Anwendung und eine Steuerungsdatei, die dem Betriebssystem mitteilt, welche Aktionen zur Installation durchzuführen sind.
Die fertigen Pakete können dann entweder von den zuständigen Rollen zentral für die Installation eingeplant werden (Push-Mechanismus) oder vom Anwender selbst zur Installation ausgewählt werden, beispielsweise in einem sogenannten „Software-Kiosk“ (Pull-Mechanismus). Speziell bei der Pull-Variante kommt dem Lizenzmanagement eine große Bedeutung zu.

### Konfiguration von Betriebssystem und Anwendungen

In der Regel sind die Anwender mit der Durchführung der Konfiguration von Anwendungen überfordert. Fehlerhafte Konfiguration von Anwendungen ist eine häufige Ursache für Störungen. Zudem entstehen Sicherheitsrisiken, wenn kritische Komponenten wie der Virenscanner falsch konfiguriert oder gar deaktiviert werden.
Daher werden die Anwendungen nach der Installation durch die Softwareverteilung konfiguriert. Dabei werden die Parameter der Anwendung, beispielsweise Verweise auf andere Computer, Lizenzschlüssel und Verzeichnispfade, festgelegt.
Es kann sich um generelle Parameter handeln, die für alle Anwender den gleichen Wert haben, oder um Parameter, die für unterschiedliche Gruppen von Anwendern unterschiedlich festgelegt sind.
Es ist auch zu unterscheiden, ob die Einstellungen durch den Anwender verändert werden dürfen, oder ob die Softwareverteilung sicherstellen soll, dass die Einstellungen durch den Anwender nicht verändert werden oder dass Änderungen automatisch rückgängig gemacht werden. Systeme zur Softwareverteilung verwalten diese Parameter daher zentral und wenden sie automatisiert auf die Client-Rechner an.
Bei MS Windows kann dies durch die Gruppenrichtlinien erreicht werden, die der Client-PC vom Domänencontroller einer NT-Domäne oder eines Active Directory abruft.

### Inventarisierung

Nach Installation und Konfiguration meldet sich der Client-Rechner beim Softwareverteilsystem zurück und berichtet über Erfolg oder Misserfolg der durchgeführten Aktionen. Der Administrator erhält so die nötigen Informationen zur Beseitigung von Störungen, insbesondere die Nachinstallation fehlgeschlagener Teilinstallationen.
Schließlich werden die Daten an weitere Systeme wie Buchhaltung, Lizenzverwaltung und Anlagenwirtschafts­system weitergeleitet.

## Installationstechniken

Eine Übersicht über das Thema Installation von Anwendungen findet sich unter Installation (Computer).

## Konfigurationsverwaltung

Ein Anwender benötigt für seine Arbeit heutzutage eine große Anzahl von Programmen. Für jeden Anwender oder PC muss daher eine Liste der Pakete hinterlegt werden, die durch die Softwareverteilung installiert werden sollen. Weiterhin müssen die Parameter zur Konfiguration der Anwendungen hinterlegt werden. Es ist sehr hilfreich, die Anwender oder Computer zu gruppieren. Der Administrator hat dann erheblich weniger Aufwand, als wenn er für jeden Rechner oder Anwender einzeln konfigurieren müsste.
Der Administrator muss jederzeit rasch die aktuelle Soll- und Ist-Konfiguration eines Computers feststellen können, um sicherzustellen, dass dieser funktioniert. Da es sich oft um eine große Anzahl von Computern handelt, sind leistungsfähige Abfragewerkzeuge notwendig. Diese liefern auch statistische Informationen, beispielsweise eine Aufstellung, auf wie vielen Computer eine bestimmte Software installiert ist.
Qualitätssicherungs-Maßnahmen wie die Dokumentation der Konfiguration, die Schulung der Administratoren, das Vieraugenprinzip, Betriebsüberwachung und statistische Auswertungen unterstützen die Zuverlässigkeit des Softwareverteilungssystems.

## Softwareverteilungssysteme (Auswahl)

* CETOS Endpoint Manager, Hersteller CETOS Services AG
* DX-Union, Hersteller: Materna
* FAI Open-Source-Software zum Installieren und Konfigurieren von Linux Systemen
* Garibaldi (Software), Hersteller: INOSOFT AG
* HP OpenView, Hersteller: Hewlett-Packard
* LINBO OpenSource-Softwareverteilung für Linux; Software-Implementierung des Verfahrens der Selbstheilenden Arbeitsstation (SheilA)
* M23 OpenSource-Softwareverteilung für Linux
* Novell ZENworks – Zero Effort Networks, Hersteller: Novell
* OCS Inventory NG
* Open Computer Orchestration OpenSource-Softwareverteilung und Inventarisierung für Linux-, macOS- und Windows-Clients
* Open System Integration OpenSource-Softwareverteilung und -Betriebssystem-Installation, Inventarisierung (Windows-Clients), Hauptentwickler: uib GmbH
* Rembo Proprietäre Softwareverteilung für Linux; Alternative Software-Implementierung des Verfahrens der Selbstheilenden Arbeitsstation (SheilA)
* RPM mit YUM und Repositories-Server: OpenSource-Softwareverteilung für Linux
* System Center Configuration Manager (SCCM) Für alle Windows-Versionen inklusive CE und Tablet – Vormals System Management Server (SMS), Hersteller: Microsoft
* Tivoli Provisioning Manager und/oder Tivoli Intelligent Orchestrator, Hersteller: IBM
* Microsoft Windows Intune Für alle Windows-Versionen inklusive CE und Tablet. Auch Mac OS und Linux. Mobile Plattformen: Windows Phone, iOS und Android. Hersteller: Microsoft
* JRebel Für Java Web Applikationen während des Entwicklungsprozesses
Beispiele für Softwareverteilungssysteme für Mobilgeräte (Mobile-Device-Management):
* Intellisync Mobile Suite, Hersteller: Nokia
* MDS Suite, Hersteller: BlackBerry
* Mobile Device Manager 2008, Hersteller: Microsoft
* Microsoft Windows Intune Windows Phone, iOS und Android. Hersteller: Microsoft
* ubi-Suite, Hersteller: ubitexx (Übernommen von Research in Motion, heute Blackberry)

### Alternativen

Java Web Start ermöglicht den Download von Java-Anwendungen und deren automatische Installation im Client-Rechner. Bei jedem erneuten Aufruf einer solchen Java-Anwendung prüft Java Web Start, ob im Server eine neuere Version vorliegt und installiert diese gegebenenfalls. Im Gegensatz zu den anderen genannten Systemen wird es jedoch nicht von zentraler Stelle gesteuert, sondern dezentral vom Client aus angestoßen. Daher handelt es sich nicht um ein Softwareverteilungssystem im engeren Sinn.