Ein neues System aufsetzen ist nicht mit der Installation des Betriebssystems abgeschlossen. Ganz im Gegenteil. Neben Treibern muss auch ein ganzer Schwung Anwendungen installiert werden. Von kleineren Helfern und nützlichen Tools über Versionsverwaltungssysteme, bis hin zu komplexen Softwarepaketen wie zum Beispiel Entwicklungsumgebungen.
Aber wie laufen diese Installationen ab? Meistens in Form einer wahren Installations-Orgie. Manuell wohl gesagt. Zumindest bei mir. Am Ende vergesse ich dann meistens doch irgendetwas. Teure Systeme lohnen dafür nicht und mir fehlte bisher die Motivation etwas eigenes zu schreiben. Bei VMs kann das Problem noch durch vorgefertigte Installationen beziehungsweise Snapshots abgemildert werden. So richtig glücklich macht das aber alles nicht.
Chocolatey & MyGet
Chocolatey habe ich schon einmal im Artikel „Glückshormone ausschütten“ in der Ausgabe 01/2014 der dotnetpro vorgestellt. Dabei handelt es sich um eine Paketverwaltung für Softwarepakete auf Basis von NuGet. Es ist stellenweise mit apt-get vergleichbar, wurde aber mit Windows als Plattform im Hinterkopf konzipiert.
Bei MyGet handelt es sich um einen Anbieter, der NuGet-Feeds zur Verfügung stellt. Also im Grunde so etwas wie ein NuGet-as-a-Service. Nach der Registrierung können eigene Feeds angelegt werden, zu denen NuGet-Pakete hinzugefügt werden können. Welche genau, bleibt jedem selbst überlassen. Über diesen Feed können dann alle hinzugefügten Pakete von überall aus installiert werden, ohne das die Pakete lokal vorliegen müssen und ohne eine genaue Vorstellung davon haben zu müssen, welche Pakete sich hinter dem Feed verbergen. Zusammengefasst also eine Art online NuGet-Server.
In der Basisversion ist MyGet frei. Es fallen keinerlei Kosten an. Einige Einschränkungen hat das aber zur Folge. Beispielsweise sind keine privaten Feeds möglich, es stehen lediglich 500 Megabyte zur Verfügung und einzelne Pakete dürfen 10 Megabyte nicht überschreiten. Das diese Einschränkungen für einen einfachen Entwickler-Feed aber keine Hürde darstellen, zeigt sich gleich.
Das Team
Aber wie können Chocolatey und MyGet zusammen die Installation von Softwarepaketen vereinfachen? Im Grunde ist das ganz einfach. Bei Chocolatey besteht die Möglichkeit, über den Parameter -src
, NuGet-Pakete zu installieren, die über eine Quelle angegeben werden. Das folgende Kommando installiert also alle Pakete der angegebenen Quelle:
cinst all -src https://www.myget.org/F/devpackages/
Und bei dieser Quelle handelt es sich um meinen MyGet-Feed der, wie der Name vielleicht vermuten lässt, viele Pakete enthält, die ich für eine Entwickler-Maschine brauche. Dazu gehören im Moment zu Testzwecken 20 Pakete, zu denen etwa 7zip, Dropbox, Git, Notepad++, Paint.NET und Sublime Text 2 gehören. Diese Zusammenstellung bezieht sich, wie sicherlich unschwer zu erkennen ist, auf einen Entwicklungsrechner. In meinem Fall für C# genutzt. Für andere Anwendungsfälle, insbesondere für Systeme die nur zum Konsumieren genutzt werden, müssen natürlich andere Anwendungen installiert werden. Aber auch das ist auch kein Problem. Es müssen lediglich andere Pakete zum Feed hinzugefügt werden.
Und die Größenbeschränkung?
Aber was ist mit der schon angesprochenen Größenbeschränkung? 20 Pakete sind immerhin nicht wenig und die aufgelisteten Pakete sind nicht sonderlich klein. Der Trick ist, dass diese Pakete gar nicht lokal zum Feed hinzugefügt wurden. Ein lokal hinzugefügtes Paket bedeutet, dass das NuGet-Paket direkt bei MyGet gehostet wird, so dass es von überall aus zur Verfügung steht. Für private Feeds, die beispielsweise eigene Bibliotheken enthalten, kann das Sinn ergeben. Sofern diese auf einem Drittanbieter-Server gelagert werden können. In meinem Fall handelt es sich bei den hinzugefügten Paketen aber lediglich um Verweise, vergleichbar mit Links in einem Dateisystem. Sie verweisen auf die original NuGet-Quellen. Das bedeutet, dass die 20 Pakete in meinem Feed keine 900 Kilobyte Speicherplatz verbrauchen. Mit den 500 Megabyte komme ich somit sehr lange aus.
Installationen
Über das oben vorgestellte Kommando cinst
mit dem Parameter -src
werden alle Pakete des Feeds installiert. Leider sind diese Installationen nicht unbeaufsichtigt. Das bedeutet, dass Installer durchaus Fragen stellen können, die manuell vom Anwender beantwortet werden müssen. Darauf hat Chocolatey auch leider keinen Einfluss, denn es kommt darauf an, wie das NuGet-Paket konfiguriert ist.
Hier könnte in Zukunft BoxStarter Abhilfe schaffen. Damit sind deutlich mehr Optionen möglich. Mir war das bisher zu umständlich, da ich aktuell lediglich an einer Möglichkeit interessiert war, Softwarepakete zusammenzufassen und immer die aktuellste Version zu bekommen. Das ist über den MyGet-Feed und Chocolatey möglich. Letztendlich erspart mir das die ständige Suche nach den Installationspaketen auf Herstellerseiten etc. pp.
Sicherheitsfragen
Chocolatey ist nicht ganz unumstritten, was ich an dieser Stelle noch mal erwähnen möchte. Die Pakete können von jedem eingestellt werden und damit potentiell gefährlich sein. Für meinen aktuellen Anwendungszweck ist das nicht ganz so essentiell, da ich die Installation über den MyGet-Feed zunächst in VMs teste.
Wie sich die Sicherheit von Chocolatey in Zukunft entwickelt muss sich zeigen. Scott Hanselman hat das in seinem Blogpost „Is the Windows user ready for apt-get?“ schön zusammengefasst. Auch in der Google Group zu Chocolatey wird das Thema diskutiert.
Fazit
Ich finde die aktuelle Lösung für meine Zwecke mehr als ausreichend. Es muss sich noch beweisen, wie gut das Updaten der Pakete im Feed funktioniert und ob ich durch die vorgestellte Lösung tatsächlich Zeit spare.
Bisher sieht es gut aus. In den letzten Tagen habe ich einige VMs installiert und über den Feed initial mit Software ausgestattet. Auf Probleme bin ich dabei bisher nicht gestoßen. Ich bin gespannt, ob das so bleibt.
Erfreulich ist, dass Chocolatey in letzter Zeit immer mehr Anhänger gewinnt. So ist auch JetBrains dazu übergegangen, ihre Softwarepakete dort anzubieten. So ist auch die Installation von ReSharper und Co. über Chocolatey möglich.
Hallo Fabian,
chocolatey unterstützt auch die Installation aus (Config-)Dateien. Man kann eine packages.config angeben, die in etwa folgenden Aufbau hat:
Installiert wird das dann mit
cinst packages.config
. In diesem Szenario brauche ich dann MyGet überhaupt nicht.Gruß
Steve
Möglicherweise sieht das so besser aus?
Code:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="apackage" />
<package id="anotherPackage" version="1.1" />
<package id="chocolateytestpackage" version="0.1" source="somelocation" />
</packages>
PS: Eine Vorschau-Option wäre toll 🙂
Hallo Steve,
da hast du recht. Wollte ich eigentlich noch erwähnt haben, ist mir aber durchgegangen.
Was ich bei MyGet so gut finde, ist, dass der Feed von überall erreichbar ist. Ich brauche keine
packages.config
mit mir rumschleppen. Wenn man MyGet nicht nutzen möchte, ist die Variante über die Datei allerdings besser, als die Pakete wieder manuell übercinst
zu installieren.Um eine Vorschaufunktion kümmere ich mich direkt mal 🙂
Viele Grüße,
Fabian
Gibt es über die
packages.config
hinaus die Möglichkeit eines privaten Package-Servers? Habe bei einer Recherche dazu nichts gefunden. Aber genau das wäre ja eine sinnvolle Anwendung innerhalb eines Unternehmens.Bei MyGet kannst du das Starter-Paket für 7$ im Moment nehmen. Da ist ein privater Feed inbegriffen.
Falls es auch um Pakete geht, die nicht in die Cloud wandern sollen, bin ich im Moment überfragt. Über etwas rein lokales bin ich noch nicht gestolpert.
Ich bin mal auf die Quellen der NuGetGallery gestoßen. Die stehen über GitHub zur Verfügung. Damit kannst du das, was auf http://www.nuget.org online ist, selbst hosten. Weiß nicht, ob das zu viel Aufwand ist.
Ansonsten gibt es noch ProGet, Artifactory und Nexus. Sind aber auch alles Cloud-Lösungen, wenn ich mich recht erinnere.
Ja, NuGetGallery kenne ich. Noch schneller zieht man einen NuGet-Server hoch, indem man ein neues Projekt erstellt und sich NuGet.Server reinzieht, dann allerdings ohne schöner Website.
Setzt Chocolatey auf NuGet-Paketen auf? Wenn ja, wäre meine Frage geklärt, wenn nein, schaue ich da noch weiter. Im Endeffekt geht es mir sowohl um öffentliche Pakete (eben z.B. für den Entwicklerrechner), aber auch für die Installation von Tools etc., die firmenintern und nicht öffentlich zugänglich sind.
Ja, Chocolatey setzt auf NuGet-Pakete auf. Im Wiki steht:
Die Paketstruktur ist identisch zu den NuGet-Paketen für Bibliotheken.
Oh, das habe ich wohl übersehen. Dann habe ich eigentlich die notwendige Infrastruktur. Danke für die Infos.
Kein Problem. Freut mich geholfen zu haben.