Bachelorthesis Eigenschaften und Anwendungen von funktionalem Paketmanagement am Beispiel von Nix Betreuer : Prof. Dr. Christoph Reich Zweitbetreuer : Msc. Florian Kemmer Eingereicht am : 29.08.2016 Matthias Beyer Immatrikulationsnummer: 244532 Robert-Gerwig-Platz 1, 78120 Furtwangen Abstract i Abstract This paper examines the approach to functional management of software packages and deployments on unix-like operating systems. Terms from the fields of software installation, software deployment as well as the different methods of package mana- gement are defined. Properties of functional package management and deployment are cited. As implementation of functional package management mechanisms, the „Nix“ package management software is introduced and its properties are cited. By re- ference to „Nix“, properties of functional mechanisms are shown as well as their effect on package management at all. Conventional imperative mechanisms are compared to functional ones by use of three scenarios; advantages and disadvantages of both approaches are described. Diese Arbeit untersucht den Ansatz des funktionalen Managements von Softwa- repaketen und Deployments auf unixoiden Betriebssystemen. Es werden die Begriffe der Software-Installation, des Software-Deployments sowie verschiedener Methoden des Paketmanagements definiert, die Eigenschaften des funktionalen Paketmanage- ments und Deployments aufgeführt und mit imperativen Mechanismen verglichen. In der Arbeit wird ausserdem der „Nix“ Paketmanager als Implementierung von funk- tionalen Paketmanagementmechanismen vorgestellt und dessen Eigenschaften auf- geführt. Anhand von „Nix“ wird aufgezeigt, wie sich die Eigenschaften funktionaler Mechanismen auf das Paketmanagement auswirken. Mittels drei Szenarien werden die herkömmlichen, imperativen Mechanismen sowie die funktionalen Mechanismen des Paketmanagements verglichen; es werden Vorteile und Nachteile der beiden Ansätze beschrieben. Für meine Eltern Inhaltsverzeichnis v Inhaltsverzeichnis Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Inhaltsverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Abbildungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix Tabellenverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Quellcodeverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Abkürzungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv 1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1 Software-Installation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 Installation von Softwarepaketen . . . . . . . . . . . . . . . . . . . . 5 2.1.2 Paketmanager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.3 Abhängigkeiten und Konflikte . . . . . . . . . . . . . . . . . . . . . . 7 2.1.4 Paketmanagement unter Debian . . . . . . . . . . . . . . . . . . . . 9 2.1.5 Paketmanagement unter CentOS . . . . . . . . . . . . . . . . . . . . 9 2.2 Software-Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2 Chef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.3 Puppet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.4 Ansible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 Cloud Computing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Paketmanagement-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1 Anforderungsanalyse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 vi Inhaltsverzeichnis 3.2 Eigenschaften des imperativen Paketmanagement Modells . . . . . . . . 21 3.3 Erweiterung des imperativen Paketmanagements . . . . . . . . . . . . . . . 23 3.3.1 Inspektion des Prozesses . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.3 „virtualenv“ unter Python . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4 Funktionales Paketmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4.1 Gleichzeitige Installation von mehreren Versionen und Varian- ten des selben Paketes . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4.2 Sichere Abhängigkeiten. . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4.3 Garbage Collection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4 Nix als Implementierung von funktionalem Paketmanagement . . . . . . . . 29 4.1 Nix Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 Der Nix Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3 Nutzerumgebungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.4 Pakete zwischen Hosts verschieben oder kopieren . . . . . . . . . . . . . . 32 4.5 Substitute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.6 Channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.7 Atomares Aktualisieren und Zurückrollen von Installationen. . . . . . . . 35 4.8 Multi-Level Paketmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.9 Portabilität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.10 NixOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5 Paketmanagement- und Deployment-Szenarien . . . . . . . . . . . . . . . . . . 39 5.1 Verwaltete Instanzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.1 Evaluation mit Nix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.1.2 Unterschiede bei einer Umsetzung mit Ansible . . . . . . . . . . . 42 5.2 Selbstaktualisierende VMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.2.1 Evaluation mit Nix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Inhaltsverzeichnis vii 5.2.2 Evaluation mit APT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3 Dedizierte Paketerstellung und -Caching . . . . . . . . . . . . . . . . . . . . 47 5.3.1 Evaluation mit Nix. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.3.2 Unterschiede bei einer Umsetzung mit APT/Ansible . . . . . . . 53 6 Ergebnisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 8 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Eidesstattliche Erklärung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 B Quellcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 C Monatsberichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Description: