Test: Alpine Linux wurde für Docker entwickelt

Alpine Linux ist eine minimale Linux-Distribution, die ursprünglich mit Gentoo erstellt wurde, jetzt aber unabhängig und selbsthostend ist. In mancher Hinsicht ähnelt Alpine Linux konzeptionell NanoBSD, da technische Benutzer mit Alpine Linux beginnen können, um ein Linux-System mit genau dem zu erstellen, was zur Erfüllung der Mission erforderlich ist, und nicht mehr.

Alpine Linux wurde normalerweise in Geräte oder Appliances eingebettet und erhielt einen großen Schub, als es ausgewählt wurde, Ubuntu als Basis-Image für Docker zu ersetzen. Sicherheit, Zuverlässigkeit und solide Entwicklungspraktiken waren die Hauptgründe.

Alpine Linux ist anders als jede Linux-Distribution, auf die ein typischer Linux-Desktop-Benutzer gestoßen ist. Schauen wir uns zunächst das Verzeichnis / bin an, in dem die Systemdienstprogramme gespeichert sind: 

Beachten Sie, dass fast alle Binärdateien Links zu / bin / busybox sind. Busybox ist eine Reihe gängiger Benutzer- und Systemdienstprogramme, die in einer einzigen Binärdatei zusammengefasst sind, um einen schnelleren Start, geringeren Platzbedarf und im Allgemeinen eine bessere Sicherheit auf Kosten einer reduzierten Funktionalität zu ermöglichen. Viele der selten verwendeten Optionen für die Dienstprogramme wurden entfernt, aber alle häufig verwendeten Optionen bleiben erhalten.

Darüber hinaus verwendet Alpine musl libc, eine minimale Implementierung der Standard-C / POSIX-Bibliothek und -Erweiterungen, die für statische Verknüpfungen und eingebettete Echtzeitanwendungen entwickelt wurde, um das GNU-Aufblähen von glibc zu vermeiden. Statische Verknüpfung bedeutet einen schnelleren Start, benötigt jedoch mehr Platz und ist daher am besten für kleinere Systeme geeignet. Durch die Kombination aller System-Binärdateien in einer einzigen ausführbaren Datei und die Verknüpfung mit musl erhält Alpine einen kleinen und schnellen Satz von System-Binärdateien, was in einem eingebetteten System erforderlich ist.

Schließlich liegt der Schwerpunkt auf der Sicherheit. Das System enthält Grsec / PaX-Kernel-Patches, die dem Linux-Kernel eine Reihe von Sicherheitsfunktionen bieten, darunter Adressraumschutz, verbesserte Überwachung sowie rollenbasierte Zugriffs- und Prozesssteuerung. Bei typischen Linux-Distributionen müssten Benutzer ihren eigenen Kernel kompilieren und ausführen, um diese Patches zu erhalten, was selbst die fortgeschrittensten Benutzer wahrscheinlich vermeiden würden.

Installation und Konfiguration von Alpine Linux

Die Installation von Alpine Linux ist sehr ungewöhnlich. Dies beruht hauptsächlich auf dem ursprünglichen Verwendungszweck in eingebetteten Systemen wie Routern. Aus diesem Grund ist Alpine so konzipiert, dass es vom RAM aus gestartet und ausgeführt werden kann, obwohl Hybridoptionen verfügbar sind. Entsprechend dieser Herkunft verwendet Alpine Linux extlinux, eine Syslinux-Variante, als Bootloader. Syslinux wird normalerweise nicht zum Booten vollständiger Linux-Installationen verwendet, da Linux normalerweise nicht auf FAT-Dateisystemen installiert ist. Stattdessen wird Syslinux häufig zum Booten oder Speichern von Disketten, Live-USBs und anderen leichten Boot-Systemen verwendet. Alpine verwendet Teile des Syslinux-Projekts, um das Booten von CD-ROMs zu ermöglichen, und Extlinux zum Booten von Linux-Dateisystemen oder FAT-Dateisystemen für USB-Geräte. FAT-Dateisysteme weisen einige Einschränkungen auf, z. B. Dateigröße und Länge der Dateinamen.

Alpine unterstützt drei Installationsmodi: plattenlos, "Daten" und "System". Bei einer Dateninstallation wird das Betriebssystem von schreibgeschützten Medien in den Arbeitsspeicher geladen, stellt jedoch Lese- / Schreibpartitionen zum Speichern von Daten bereit. Dies kann beispielsweise verwendet werden, wenn ein auf Alpine basierender Router Intrusion- oder Zugriffsprotokolle auf einer Festplatte speichert. Das Kopieren von Protokollen in den Arbeitsspeicher wäre eine Verschwendung einer wertvollen Ressource. Der plattenlose Modus ist ähnlich, aber die Lese- / Schreibpartition ist normalerweise kleiner und wird zum Speichern von Betriebssystemkonfigurationsdetails verwendet. Sys ist ein traditioneller festplattenbasierter Installationsmodus.

Bei der Installation im plattenlosen oder Datenmodus wird das Alpine Local Backup-System zum Speichern von Konfigurationsdateien verwendet. Dies geschieht mit lbu (lokales Sicherungsprogramm), das Dateien verfolgt, die sich im Verzeichnis / etc geändert haben, und diese Änderungen in .apkovl-Overlay-Dateien (tar-gzip-Archive) speichert. Mit lbu können Administratoren beispielsweise frühere Konfigurationen vergleichen, zusammenführen oder wiederherstellen.

Ich begann mit dem Versuch einer plattenlosen Installation, weil ich Alpine wie ursprünglich vorgesehen als Betriebssystem für Appliances ausführen wollte. Leider ist bei einer VMware-Installation ein langjähriger Fehler (2015) aufgetreten, der weder repariert noch die Dokumentation aktualisiert wurde. Es scheint, dass das virtuelle Disketten-Image beim Booten nicht gemountet wird. Dies bedeutet, dass Konfigurationsänderungen bei jedem Neustart verloren gehen.

Ich habe schließlich auf eine sys-Installation zurückgegriffen, die gut funktioniert hat. Als erstes fällt auf, dass standardmäßig nichts installiert ist , nicht einmal SSH. Wenn Sie eingebettete Systeme erstellen, ist dies wahrscheinlich eine gute Sache. Linux-Neulinge sollten sich auf eine steile Lernkurve vorbereiten. Nachdem ich ein wenig über den Alpine Package Manager (APK) gelesen hatte, installierte ich zunächst eine Reihe von Tools: Sudo, SSH und das webbasierte grafische Systemverwaltungstool ACF.

Alpine Linux Systemadministration

Während die meisten Linux-Systeme über ein grafisches Systemverwaltungstool verfügen, verwendet Alpine Shell-Skripte für die Einrichtung. Ich habe ein Umbrella-Skript, setup-alpine, verwendet, um alle Grundlagen wie Netzwerk, Hostname, Festplatten, Zeitzone usw. zu konfigurieren. Obwohl setup-alpine ausreicht, um ein funktionsfähiges System zu erhalten, müssen für alle fortgeschrittenen Systeme die Systemkonfigurationsdateien bearbeitet werden direkt und mit lbu, um sie auf beschreibbaren Medien zu speichern. Beachten Sie, dass setup-alpine auch das Installationsprogramm ist, sodass ein Datenträgername angegeben werden kann und das Betriebssystem auf das Medium geschrieben wird, wodurch eine beschreibbare Partition für die Verzeichnisse / etc und / var angefordert wird.

Das Entwickeln und Verteilen von Software ist auch bei Alpine anders. Dies liegt zum Teil an der beabsichtigten Verwendung in eingebetteten Systemen oder als Basisimage für Container, aber auch daran, dass die Autoren der Ansicht waren, dass vorhandene Paketverwaltungssysteme in einem System, das normalerweise über RAM ausgeführt wird, nicht gut funktionieren würden. Der Alpine Package Manager (APK) erfüllt alle diese Anforderungen mit geringem Overhead und schnellen Installationszeiten. Ich wünschte jedoch, sie hätten eine API überlagert, die mehr Standard war. Wir haben bereits genügend APIs für die Paketverwaltung, und aus Kompatibilitätsgründen gibt es etwas zu sagen. APK wird zum Konfigurieren von Containern oder eigenständigen Systemen verwendet.

Die Zustellung von Paketen erfolgt über einen Portbaum, der mich an die Ports-Sammlung von FreeBSD erinnert. Anstatt jedoch von einem ausgeklügelten Makefile-System gesteuert zu werden, wird eine andere Erfindung von Alpine Linux verwendet, abuild. Das aports-Repository spiegelt den Ports-Baum auf der ganzen Welt wider und apk add …ist definitiv viel schneller als andere Paketverwaltungssysteme.

Das andere, was bei Alpine zu beachten ist, ist die Verwendung von OpenRC für das Init-System. OpenRC ist eines von rund einem Dutzend Init-Systemen für Linux und wurde in Gentoo gestartet (genau wie Alpine). Funktionell fehlt nichts, aber seien Sie bereit, ein neues System von Run-Levels und Init-Befehlen zu erlernen.

Glücklicherweise kann ein Großteil der täglichen Verwaltung über das webbasierte Alpine Configuration Framework (ACF) erfolgen, obwohl die Arbeit mit ACF nicht vollständig reibungslos verlief. Es wurde beispielsweise nicht der reguläre Benutzer erkannt, über den ich mich hinzugefügt habe adduser. Die ACF-Benutzeroberfläche ähnelt stark der Weboberfläche eines typischen Linux-basierten Routers:

ACF muss auch ein wenig gegraben werden, um es zu finden und zu installieren. Ein gelegentlicher Benutzer hätte das System nur entdeckt, wenn er darauf geachtet hätte, und selbst dann gibt es keine Installationsanweisungen.

Alpine Linux Speicherung und Vernetzung

Alpine unterstützt mehrere Speicheroptionen, die über das reine RAM hinausgehen, wobei die Konfiguration auf einem Medium gespeichert ist, sowie Flash-Karten. Die Dokumentation bzw. das Fehlen dieser Dokumentation erschwerte jedoch das Verständnis der Speicherung. Zum Beispiel wollte ich eine benutzerdefinierte ISO mit einer Anwendung brennen, die in aports nicht verfügbar ist, was wahrscheinlich häufig genug vorkommt. Die Dokumentation dafür war eine Sackgasse:

Viereinhalb Jahre scheinen eine lange Wartezeit zu sein. Um fair zu sein, war die Speicherung nie ein wichtiger Bestandteil der alpinen Gleichung, da der Schwerpunkt auf eingebetteten Anwendungen liegt. Daher ist es nicht verwunderlich, dass dies ein schwacher Bereich sein sollte. Es gibt laufende Arbeit in den meisten Bereichen von einer Linux - Distribution zu erwarten, wie LVM, iSCSI und RAID, sondern bereitet ein gutes Stück Zeit damit verbringen, Sinn der Dokumentation zu machen , oder den Quellcode lesen, um es zu Figur alles raus. 

Die Vernetzung mit Alpine ist eine ganz andere Geschichte als die Speicherung. Die Dokumentation für das Netzwerk ist besser geschrieben und vollständiger und enthält häufig Best Practices für den Aufbau effizienter Netzwerke. IP4, IP6, Bonding, VLAN, Bridging und so ziemlich jedes gewünschte Netzwerk-Setup werden unterstützt. Sie finden sogar Anweisungen zum Einrichten von Satelliten-Internetverbindungen!

Die Konfiguration kann mit herkömmlichen Tools wie ifconfig und route oder einigen neueren Paketen wie iproute2 erfolgen. Erwähnenswert ist ein interessantes Teilprojekt namens Alpine Wall, ein Linux-Firewall-Konfigurationstool. Sogar PPP über serielle Leitungen wird unterstützt, was heutzutage etwas überraschend ist.

Beim Lesen dieser Dokumentation habe ich viel gelernt und dabei einige Konfigurationshinweise entdeckt, die ich vorher nicht kannte, sowie einige bisher unbekannte Netzwerkdienstprogramme. Dieser Teil der Dokumentation ist als Kurzreferenz für die Netzwerkanleitung mit einem Lesezeichen versehen, auch wenn Sie nicht Alpine Linux verwenden.

Alpine Linux Upgrades und Downgrades

Das Alpine Linux Release Engineering ist bei weitem nicht so streng oder formal wie ausgereifte Systeme wie FreeBSD, deckt jedoch die Grundlagen ab. Und es eignet sich gut für die primären Anwendungsfälle von Docker-Hosting und -Geräten von Alpine.

Es gibt im Wesentlichen zwei Ströme, Rand und stabil. Edge ist ein rollierender Release-Zweig, eine Momentaufnahme der Entwicklung alle sechs Monate. Pakete bewegen sich durch den Rand und werden, wenn sie fertig sind, zu Stall / Community befördert, wo sie sechs Monate lang von der Community unterstützt werden. Pakete, die das überleben und sich weiterentwickeln, schaffen es schließlich zu Stable / Main, wo sie zwei Jahre lang unterstützt werden.

Beim Upgrade vom Zweig 2.x auf 3.x ist aufgrund der Änderung der C-Bibliotheken (von uClibc zu musl) einige Vorsicht geboten. Wenn Sie nicht vorsichtig sind, kann das System nach der Hälfte eines Upgrades ausfallen. Das Aktualisieren von Paketen entlang der 3.x-Linie ist einfacher, obwohl es sich immer noch um einen manuellen Prozess handelt, der größtenteils von Skripten gesteuert wird. Der Trick zum Verständnis des Aktualisierungsprozesses besteht darin, das richtige APK-Repository (Community, Edge oder Main) abzurufen, den Cache zu leeren und dann APK alle Pakete mit aktualisieren zu lassen apk upgrade.

Das Upgrade des Kernels ist ebenfalls unkompliziert und verwendet das Setup-Boot-fähige Skript, um den neuen Kernel und die Busybox auf das Boot-Medium zu schreiben.

Insgesamt gibt es nicht zu viele bewegliche Teile in einem alpinen System. Sobald die Architektur verstanden ist, ist es nicht schwierig, das Upgrade herauszufinden.

Alpine Linux auf einen Blick

Alpine Linux ist eine gute Wahl für jedes System, das netzwerkorientiert und zweckgebunden ist. Intrusion Detection, Netzwerküberwachung und IP-Telefonie sind Beispiele für gute Anwendungen für Alpine Linux. Und es ist eine natürliche Wahl für Container. Anwendungen, bei denen die Festplatte stark beansprucht wird, sollten sorgfältig getestet werden. Benutzer sollten sich darauf vorbereiten, einige Zeit in der Community zu verbringen und die Ärmel hochzukrempeln, um sich die Hände schmutzig zu machen. Versuch und Irrtum sind erforderlich.