Rechner installieren mit Schokolade?

"Weekly Builds" oder meine "Wöchentliche Frustration" vor dem Wochenende!

Jede Woche den Rechner neu zu installieren ist echt hart, aber ich arbeite derzeit viel mit den Client Tools. Und wie wir alle wissen, ist da nicht viel mit "virtualisierten Umgebungen". Von daher ist jeden Freitag Abend Rechner neuinstallieren angesagt. Wobei gestern meinten es die Script Götter gar nicht gut mit mir, und ich durfte den Prozess 3 mal durchlaufen! Können sie sich was schöneres vorstellen als an einem sonnigen Freitag Abend bis um 9 Uhr im Büro zu sitzen? Um ehrlich zu sein, ich schon.

Was ist ein Package Manager

Nun die Idee von "Paketmanagern" ist mit Sicherheit kein neues Konzept. Ich erinnere mich noch an "RPM" für Novell und "pkgadd" auf Solaris. Ich zitiere einfach mal Wikipedia:

A package manager or package management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing software packages for a computer's operating system in a consistent manner. It typically maintains a database of software dependencies and version information to prevent software mismatches and missing prerequisites.

Wikipedia (c) 2015

Ein Packetmanager kümmer sich also um die Installation von Software Tools. Tatsächlich verwende ich schon die ein odere andere Software. Und das eigentliche Problem ist nicht mein System mit dem aktuellen drop von Windows auszurüsten oder das weekly Buildscript von Visual Studio zu installieren.

Es sind die kleinen Helferlein die ich entweder vergesse oder die ich mühevoll auf 2000 Internetseiten zusammensammeln muss. Und dann kommt noch die installation dazu. Ich komme mir vor wie in den 90igern wo man diese Software Shares hatte oder CD's brante mit der Aufschrift: Tools Herbst '98. Dank Chocolatey gehört dies der Vergangenheit an.

Chocolatey

Chocolatey ist ein auf Nuget basierter Packet Manager der den Einsatz unter Windows im Fokus hat. Auf der Startseite von Chocolatey findet man ein Script.

Als treudoofer user kopiert man natürlich das Script und versucht es auszuführen. Und auch ganz natürlich funktioniert das nicht. Zumindest bei meinem von der IT unter Beobachtung gestellten Rechner. Ich starte die Powershell als Admin. Ich habe vor kurzem einen Blogpost zu dem Thema Execution Policy geschrieben. Genau das brauchen wir jetzt.

Und dann kopieren wir das Script erneut.

iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))

Das Resultat sollte nun wie folgt aussehen.

Und siehe da, Chocolatey ist nun auf meinem System installiert.

Ab jetzt kann ich via der Console über den Befehl choco install beliebige Packete installieren.

Hier zum Beispiel die Installation von Git. Via des Befehls:
choco install git

Chocolatey vereinfacht mir mit seinen Packeten das Leben extrem. Unter dem Bereich Packete findet man eine Liste aller zur Verfügung stehenden Programme.

Hilfe und mehr Informationen

Chocolatey ist ein GitHub Project und die Dokumentation findet man im Wiki Abschnitt auf Github. Hier findet man unter anderem eine erklärung wie man alle installierten Packete anzeigen kann und wie man installierte Packte deinstallieren kann.

Packete deinstallieren

Dabei gehe ich folgt vor:

  • Installieren eines Packetes
  • Anzeigen aller lokal intallierter Packete
  • Deinstallieren des Packetes

Installation

Wie zuvor installiere ich zunächst über den Befehl:

choco install vlc

ein Packet in diesem Fall die aktuelle Version des VLC Media Players.

Liste der installierten Packete anzeigen

Im nächsten Schritt schaue ich mir an welche Packete derzeit auf meiner Maschine installiert sind. Die geschieht via des Befehls:

choco list -l

Die Ausgabe in Powershell zeigt nun eine Liste der installierten Packete an.

Deinstallieren

Nun möchte ich gerne ein installiertes Packet wieder von der Maschine entfernen. Dies geschieht via des Befehls:

choco uninstall vlc

Damit haben wir den kompletten Prozess von Installation Anzeigen der installierten Packete und das deinstallieren von Packeten einmal durchlaufen.

Automatische Installation

Meine ursprüngliche Motivation war es eine Liste von Applikationen automatisiert zu installieren. Nun auch das kann Chocolatey. Dazu lege ich eine neue XML Datei an. Im Prinzip geht das mit jedem herkömmlichen Texteditor. Ich nenne die Datei "packages.config".

Das Schema der Datei besteht aus dem XML Header und einer Liste von "packages" mit "package" Elementen mit dem Attribut "id".

Abbildung als Quelltext:
<packages>
    <package id="filezilla" />
    <package id="putty" />
    <package id="nodejs" />
    <package id="fiddler" />
</packages>

Über den Befehl:

cinst .\packages.config

"cinst" ist die kurzform für "choco install" und der zweite Teil des Befehls ist der Pfad zu meiner Konfigurationsdatei. Bei mir ist die Powershell im richitgen Verzeichnis. Allerdings könnte diese Datei auch auf Github oder irgendwo in "www" liegen. Es empfiehlt sich die Datei an einem Ort zu speichern der von der Powershell erreicht werden und an den man sich leicht erinnern kann.

Nach und nach installiert Chocolatey nun alle Packete. Geht eine Installation schief so wie hier bei Filezilla bekommt man eine Warnung in der Powershell Konsole angezeigt und Chocolatey versucht die restlichen Packete zu installieren.

Eigener Packetserver

Chocolatey bietet aber nicht nur die Möglichkeit Packete zu installieren oder dem Entwickler eigene Packete zu erzeugen. Sondern auch der IT oder den Entwicklungsteams einen eigenen Packetserver zu hosten. Auf den Wiki Seiten findet man eine Anleitung zum erstellen eines eigenen Servers.

Zusammenfassung:

Für mich ist Chocolatey eine echte alternative auf Windows. Klar können Administratoren das Selbe über "Microsoft System Center" erreichen. Aber aus irgendeinem Grund geben die Admin Jungs den Entwicklern nie Zugriff auf Ihr Spielzeug!? Ich weiß auch nicht woran das wohl liegen mag?
Scherz bei Seite Chocolatey ist insbesondere zur installation auf Virtuellen Maschinen eine echt große Hilfe. Denkt man an die 15 Minuten die man bei einem Cloud Service auf Azure hat um eine Maschine zu provisionieren. Ich hoffe das es nicht zum alltag des Entwicklers gehört jeden Freitag seine Maschine zu installieren. Und auch bei mir ist das nur temporär. Aber wer Entwicklungsumgebungen regelmäßig aufsetzen muss, oder einen Install Job bei temporären Systemen benötigt wird dieses Tool wirklich lieben lernen. Windows 10 bringt übrigens einen eigenen Packet Manager Namens OneGet. Für alle die sich bisher noch nicht mit Windows 10 auseinandergesetzt haben oder auf älteren Systemen unterwegs sind, beitet Chocolatey eine ähnlichen Funktionsumfang.

Microsoft ermöglicht einen frühzeitigen Zugriff auf Windows 10 über das Windows Insider Program für alle die sich lieber OneGet als Chocolatey anschauen möchten.

Quellen

Mehr Informatioenn zu OneGet:

Mehr Informationen zu Chocolatey:

Sourcecode und Wiki findet man auf der Chocolatey Seite auf Github

Interessante Artikel rund um Chocolatey:

Artikel Serie von Bob Reynolds auf Developer Fusion:

Scott Hanselman hat einen sehr schönen Artikel über Chocolatey auf seinem Blog veröffentlicht:

Is the Windows User ready for Aptget? - Scott Hanselman