Open Source Package Manager Chocolatey – Paketmanagement unter Windows

Von Mirco Lang

Paketmanager hatten unter Windows lange einen schweren Stand. Mit Chocolatey gibt es aber ein durchaus etabliertes Werkzeug, mit dem sich relativ einfach eigene Software paketieren lässt. Wir sehen uns die Funktionsweise einmal genauer an.

Das paketierte Tool lokal in der Chocolatey-GUI.
Das paketierte Tool lokal in der Chocolatey-GUI.
(Bild: Lang / Chocolatey)

Eine große Neuigkeit im Windows-Universum: Der Windows Package Manager ersetzt den Microsoft Store. Seit dessen Start ist das Angebot auf rund 1.000 Pakete angewachsen und als Store-Nachfolger dürften es künftig rasant mehr werden.

Platzhirsch ist allerdings immer noch das Open-Source-Projekt Chocolatey, das über 8.000 unterschiedliche Pakete anbietet, davon knapp 6.000 verifizierte. In Chocolatey finden sich allerdings nicht nur freie Programme, sondern auch populäre Software wie der Adobe Acrobat Reader. Paketverwalter können über Chocolatey nämlich auch problemlos Produkte von Dritten paketieren – im Grunde genügt die Angabe einer Download-URL samt ein paar Rahmendaten.

Aber auch für die Distribution eigener Programme ist Chocolatey eine gute Wahl. Die Arbeit auf der Kommandozeile ist übersichtlich und die Chocolatey-GUI hilft auch Standardanwendern, sich schnell zurecht zu finden. Praktischerweise funktioniert das Paketieren, Veröffentlichen und Installieren auch komplett lokal, ohne Pakete tatsächlich ins Chocolatey-Repository zu pushen – was allerdings ebenfalls ganz simpel mit zwei Befehlen möglich ist.

Im Folgenden zeigen wir Schritt für Schritt, wie sich ein einfaches eigenes Programm paketieren, installieren und final auch online stellen lässt. Als Beispiel dient ein Tool, das möglichst simpel sein sollte: Eine einzelne EXE-Datei, direkt ausführbar (portable) und unter freier Lizenz. In diesem Fall das Programm „TutoIP“.

Dieses Tool stand gerade schlicht auf dem Testrechner zur Verfügung und zeigt die externe IP-Adresse sowie alle internen IP-Adressen des aktuellen Windows-Rechners in einem kleinen Fenster an. Technisch ist das Mini-Tool ganz einfach als kompiliertes AutoHotkey-Skript realisiert, so dass keinerlei Abhängigkeiten bestehen. Die wunderbare Skriptsprache AutoHotkey hat der Autor ja bereits vorgestellt.

Aufbau des Pakets

Chocolatey nutzt dieselbe Infrastruktur wie der Visual-Studio-Paketmanager NuGet. Daher stehen alle wichtigen Metainformationen zum Paket in einer XML-Manifestdatei im Nuspec-Format, hier die Referenz der Microsoft-Dokumentation.

Die Nuspec-Datei ist die einzige zwangsläufig benötigte Datei für ein Paket, sofern das zu installierende Programm von einer entfernten Quelle gezogen wird. Neben der Manifestdatei sind eigene Projekte noch drei weitere Dateien relevant: Die Software selbst, ein Skript zur Deinstallation und ein Skript zur Installation – und nur damit müssen wir uns für unser Beispiel beschäftigen.

Letztlich sieht der Prozess also wie folgt aus:

  • Neues Paket-Projekt erstellen
  • Nuspec-Manifest editieren
  • Installationsskript editieren
  • Paket erstellen
  • Paket installieren/testen
  • Paket pushen

Wer das einmal nachspielen möchte, kann freilich auf das Pushen verzichten. Lokale Installationen werden in der Chocolatey-GUI separat angezeigt, verhalten sich aber ansonsten genauso wie Pakete im Online-Repo.

Paket erstellen

Zunächst einmal muss natürlich Chocolatey selbst auf dem System installiert werden, das neben der grafischen Anwendung auch das Kommandozeilenwerkzeug „choco“ erstellt. Für einen lokalen Test genügt dabei natürlich eine Dummy-EXE. Sofern gepusht werden soll, empfiehlt sich aber eine echte Anwendung, da Chocolatey vor der Veröffentlichung Tests durchführt.

Das ganze Setup beginnt in der besagten Kommandozeile mit …

choco new tutoip

Damit werden der Ordner „tutoip“, einige Dateien sowie der Unterordner „tools“ erstellt. Die Readme- und ToDo-Dateien können Sie freilich löschen, ebenso wie die Datei „chocolateybeforemodify.ps1“ im tools-Ordner, die in diesem Setup nicht benötigt wird und etwaige Vorarbeiten leisten würde.

In den tools-Ordner kommt dann auch die nackte EXE-Datei der portablen Anwendung. Nun gilt es, zwei Dateien zu bearbeiten: „tutoip.nuspec“ und „tools/chocolateyinstall.ps1“. Beide Dateien sind standardmäßig mit umfangreichen Vorgaben und Kommentaren befüllt, hier mal eine deutlich schlankere Variante mit den wichtigsten Infos – notwendig wären sogar noch weniger:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2015/06/nuspec.xsd">
   <metadata>
      <id>tutoip</id>
      <version>1.0</version>
      <title>TutoIP</title>
      <authors>Mirco Lang</authors>
      <projectUrl>https://www.tutonaut.de/externe-und-interne-ip-adresse-per-doppelklick</projectUrl>
      <licenseUrl>https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html</licenseUrl>
      <tags>tutoip windows ip</tags>
      <summary>Zeigt interne und externe IPs an.</summary>
      <description>
         Kompiliertes AutoHotkey-Skript, das die aktuelle externe IP sowie alle internen IPs des Windows-Rechners ausgibt. Der kleine Helfer läuft unter Windows 10 standardmäßig, Windows 7, sofern PowerShell in einer aktuellen Version läuft.
      </description>
   <releaseNotes>Chocolatey Testing - no more Updates.</releaseNotes>
   </metadata>
   <files>
      <file src="tools\**" target="tools" />
   </files>
</package>

Die meisten Einträge wie id, Title, description und releaseNotes innerhalb der Metadaten-Tags dürften selbsterklärend sein. Wichtig sind die beiden URLs unter projectUrl und licenseUrl: Beide Links tauchen später in der Chocolatey-GUI auf.

Der Lizenzlink muss für den Community Stream, also die Veröffentlichung im Chocolatey-Repository, zwangsläufig angegeben werden, wenn die Software direkt im Paket liegt. Neben den Metadaten wird lediglich der Ordner der EXE-Datei angegeben. Sofern notwendig, muss der Lizenztext auch noch in die vorgegebene Datei „tools/LICENSE.txt“ kopiert werden.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Das Installationsskript

Weiter geht es im Ordner tools mit der Datei „chocolateybeforemodify.ps1“:

$ErrorActionPreference = 'Stop';
$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
$fileLocation = Join-Path $toolsDir 'tutoip.exe'
$packageArgs = @{
   packageName = $env:ChocolateyPackageName
   unzipLocation = $toolsDir
   fileType = 'exe'
   url = $url
   url64bit = $url64
   file = $fileLocation
   softwareName = 'tutoip*'
}
Install-ChocolateyPackage @packageArgs

Standardmäßig geht das Skript davon aus, dass Software über eine URL bezogen wird. Daher müssen Sie einige Zeilen auskommentieren beziehungsweise verändert werden: Zum einen die Zeilen „file =$fileLocation“, die auf das tools-Verzeichnis verweist, sowie die Angabe „fileType ='exe'“.

Die oben eingerückten Zeilen im Bereich $packageArgs sind hier nur zur Veranschaulichung enthalten und würden eben für ZIP-Dateien beziehungsweise per Download bezogene Software genutzt. Zu guter Letzt muss die Funktion „Install-ChocolateyPackage @packageArgs“ für portable Tools gewählt werden – standardmäßig ist hier „Install-ChocolateyInstallPackage“ aktiv, das für zu installierende Tools gilt.

Paket bauen

Wenn die beiden Konfigurationsdateien fertig sind, löscht man noch alle kommentierten Zeilen aus diesen heraus; ebenso die nicht benötigten per „choco new“ erstellten Vorgabedateien.

Anschließend wird das Paket per …

choco pack

… im per „choco new“ erstellten Paketordner „tutoip“ erstellt. Ergebnis ist die Datei „test.portable.1.0.nupkg“.

Installation und Start eines Pakets.
Installation und Start eines Pakets.
(Bild: Lang / Chocolatey)

Ist das erfolgreich durchgelaufen, folgt die lokale Installation. Chocolatey rät hier dringend zu einem Testsystem, allerdings passiert bei einer portablen Anwendung nicht wirklich viel. Doch zunächst:

choco install tutoip -S .

… installiert tutoip, wobei „-S .“ den aktuellen Ordner angibt. Zudem wird das Tool im Anschluss automatisch gestartet.

Bei der Installation passieren drei Dinge: Erstens wird TutoIP in die lokale Chocolatey-Paketliste aufgenommen. Zweitens wird die EXE-Datei nach „%ChocolateyInstall%\lib\tutoip“ kopiert. Drittens bekommt die EXE einen sogenannten Shim, was nichts weiter heißt, als dass sie im Windows-Pfad landet.

Das paketierte Tool lokal in der Chocolatey-GUI.
Das paketierte Tool lokal in der Chocolatey-GUI.
(Bild: Lang / Chocolatey)

Das Tool lässt sich also ab sofort in jedem Terminal über den Befehl „tutoip“ aufrufen. Und selbstverständlich findet sich das Paket anschließend auch in der Chocolatey-GUI im Bereich „Dieser PC“.

Paket pushen

Wenn alles läuft und alle Regeln für Pakete berücksichtigt wurden, geht es ans Veröffentlichen. Dazu wird ein API-Key benötigt, der sich nach einer Anmeldung bei Chocolatey auf der Startseite des Benutzerkontos findet.

Direkt darunter kann man auch direkt die beiden zum Pushen benötigten Aufrufe kopieren und mit dem Paketnamen vervollständigen:

choco apikey --key 123-456-789-098 --source https://push.chocolatey.org/
choco push tutoip.1.0.nupkg --source https://push.chocolatey.org/

Der Nutzer selbst kann das Paket sofort in der Weboberfläche sehen. Veröffentlicht wird es aber erst nach drei Teststufen: Unter „Validation Testing“ wird eine Art Unit Testing verstanden, also ob die einzelnen Bestandteile korrekt sind.

Das Paket nach den absolvierten automatisierten Tests im Web.
Das Paket nach den absolvierten automatisierten Tests im Web.
(Bild: Lang / Chocolatey)

Dann folgt unter „Verification Testing“ die Chocolatey-Version von Integration Testing, also ob das Paket als Ganzes funktioniert (De-/Installation, Programm selbst). Zuletzt wird noch von einem Menschen getestet – was sich aber scheinbar länger hinziehen kann, TutoIP wartet seit zehn Tagen.

Chocolatey bietet noch allerhand weitere Optionen, Pakete innerhalb einer Organisation zu verwalten, Das Installationsskript erlaubt es, noch weitere individuelle Aufgaben auszuführen, populäre Software von Dritten zu paketieren und so weiter.

Noch hat Chocolatey einen deutlichen Vorsprung vor dem Windows Package Manager, aber auch langfristig ist es eine Empfehlung wert, wenn man sich den aktuellen Windows Store anschaut – in dem zum Beispiel allerlei eigentlich kostenlose Software zum Kauf angeboten wird, Open-Source-Projekte kompiliert von Dritten zu beziehen sind und durchaus damit zu rechnen ist, dass Microsoft mal wieder etwas ändert.

Chocolatey mag noch eher unter Techies bekannt sein, aber Microsofts Paketmanagement-Initiative könnte dem Thema durchaus nochmal unter die Arme greifen. Dank der einfachen GUI wird den Nutzern noch nicht einmal ein Kommandozeilenbefehl abverlangt – selbst wenn sich dieser auf ein sehr simples „choco install tutoip“ beschränkt.

(ID:46967715)