Für Systemadministratoren und DevOps ergibt es oft sehr viel Sinn, wenn man die Installation von zusätzlicher Software exakt kontrollieren kann. Früher haben wir viel Software als Quelltexte bezogen, und sie lokal auf den Rechnern übersetzt. Das ist heute bisweilen schwierig geworden. Aus der Sicht eines sicheren und kontrollierten Betriebs ist das eine schwierige Entwicklung.
Wenn ich den Betrieb von Computersystemen verantworte, dann weiß ich zum Beispiel gerne sehr genau, was auf einem System installiert ist. Dafür gibt es eine Vielzahl von Gründen.
Continuity Planning
Was mache ich, wenn die Bude brennt, wenn ich den Rechner, so wie er da steht, nicht mehr verwenden kann. Und dabei ist es egal, ob es sich um das physische Blech handelt, das in einem geeigneten Computer-Raum oder gar in einem eigenen Rechenzentrum steht oder ob es sich um ein Wölkchen bei einem Betreiber wie etwa Hetzner handelt. Es ist nicht lange her, da gab es diese Schlagzeile:
Hetzner: Festplattenausfall sorgt für Cloud-Datenverlust von 1500 Snapshots
Ich selbst hatte mal den Fall, daß mir eine defekte Festplatte ein ganzes Disk-Enclosure heruntergerissen hat. Der primäre Schaden war enorm. Wir hatten keinen Hochverfügbarkeits-Cluster. Die Oracle-Datenbank war futsch. Der operative Betrieb in einem medizinischen Call-Center kam unmittelbar zum Erliegen. Aber ich war vorbereitet und konnte die Datenbank innerhalb kurzer Zeit wiederherstellen und der Betrieb ging weiter. Nur ist es nicht immer so leicht.
Security Vulnerabilities und Security Bulletins
Das sind heiße Themen, die ebenso oft sträflich vernachlässigt werden. Sichere Systeme machen wenig Spaß, denn da läuft nicht viel. Jeder Service verlangt umfangreiche Arbeiten vom Systemadministrator und dazu kommt, daß man für den Betrieb solcher Systeme richtig gute Admins braucht und die laufen nur selten frei herum. Die Guten haben alle einen guten Job!
Man muß regelmäßig Security Bulletins durchstöbern. Und dann sollte man freilich noch soviel Überblick über die eigenen Systeme haben, um beurteilen zu können, ob man betroffen ist.
Mich plagt das gerade als Entwicklerin. Im Moment geht's bei mir ums Backend. Linux. Klar! Ich stelle da doch keinen Windows-Server hin. Ein Web-Server. Auf dem wird's richtig krachen. Also Nginx (Engine X) und nicht Apache. Ich sehe also nach und das allerneueste Debian-Release bietet mir Nginx 1.22.1 Die aktuelle Version von Nginx ist aber 1.24.0 - das ist ein Unterschied. Ich kann das zwar nicht genau beurteilen, außer ich knie mich da jetzt auch noch rein, aber als Entwicklerin entscheide ich mich immer für die für das allerneueste Release einer Software und ich zieh' das auch bis zum Release meiner eigenen Software durch. Wenn also während meiner Entwicklung ein neues Release von Nginx oder PostreSQL ....etc kommt, dann wird dieses neue Release in meiner Entwicklungsumgebung sofort installiert. Aber das ist gar nicht mein Problem. Wenn ich jetzt bei Debian mit apt oder bei RedHat mit dnf Software installiere, dann passieren meistens noch ganz schnell ein paar wunderbare Dinge, die schwer nachvollziehbar sind. Beim Installieren einer zusätzlichen Bibliothek, z.B. apt-get install libgd-dev werden so nebenbei, noch 29 weitere Bibliotheken installiert. Will ich das? Außerdem weiß ich nie, was sonst noch alles in dem Installationspaket mit eingepackt ist. Wird mir ein neuer User erzeugt? Wie heißt der? Was für eine UID und was für eine GID hat der gekriegt? Auf meinem System will ich solche Sachen selber entscheiden! Na ja, okay, ich nehm' das bis zu einem gewissen Grad hin, aber ich hätte gerne ein Manifest, das es mir erlaubt, dafür zu sorgen, daß mir beim Recovery von einem sog. "Incident" nichts durch die Lappen geht, und das hätte ich freilich auch gerne mit Bezug auf Security Bulletins. Wenn ich das nicht selber entwickle, so wie ich das gerne hätte, dann wird's das nicht geben und letzteres als gesichert gelten, denn ich hab' dafür keine Zeit.
Umgekehrt wird ein Schuh draus. Ich kann versuchen das alles selber zu übersetzen und das ist auch kein größeres Problem für mich, aber dann, irgendwann in einem schönen Moment, zerlegt's zum Beispiel bei Perl den DynaLoader, weil der ein Problem mit den Versionen der vorinstallierten Bibliotheken auf meinem System hat.
Das macht alles keinen Spaß und es zwingt die Admins und Softwareentwickler zu pragmatischen Vorgehensweisen. Wer da achtsam ist, weiß genau, daß da Sachen hinten runterfallen und daß man Kompromisse macht, die man früher oder später ausbaden muß, obwohl man diese Kompromisse nie gerne gemacht hat. Und es ist gut, wenn man sich dessen bewußt ist. Ich weiß nicht, wie viele so denken wie ich. Ich habe das Gefühl, daß es nicht so viele sind und daß die meisten einfach mit ein paar Kommandos das Zeug, das sie brauchen, installieren lassen.
Noch schlimmer ist es in der Cloud. Da weißt Du nie ganz genau, was Du kriegst. Was mir hier fehlt, sind Peer-Reviewed Installations- und Konfigurationsstandards für die Freunde von Amazon, Microsoft....etc, die man günstigstenfalls auch einsehen kann. Das werden die natürlich nie zulassen, denn die verbuddeln da ihre Geschäftsgeheimnisse, mit denen sie ihre Betriebe hasadeurhaft hochrentabel machen. Dabei darf nichts schiefgehen (siehe Hetzner).
Ich für meinen Teil mache von Anfang an Kompromisse, auch wenn ich sie nicht mag. Nein, ich gehe nicht so direkt in die Cloud. Ich habe mir einen Betreiber für einen Dedicated Server ausgesucht und das ist keiner von irgendeiner willkürlichen Top-Ten Liste, sondern ich habe mir wirklich einen ausgesucht, bei dem ich weiß, das sind absolute Profis. Da zahle ich für den kleinsten Server vielleicht 10 Franken mehr im Monat, aber es ist ein gutes Ruhekissen und ich kriege Ansprechpartner, die topfit sind und die sich nie herausreden müssen, denn die wissen was. Und wenn es denen mal die Sprache verschlagen sollte, hat dieser Betreiber noch weltweit Abteilungen für Professional Services. Jetzt bietet der eine Liste von unterstützten Betriebssystemen und da gibt's auch einen Eintrag "Betriebssystem nach freier Wahl". Das gefällt mir. Mache ich das mit FreeBSD? Ich werde mal einen Server mit FreeBSD machen, aber für dieses Projekt kann ich das nicht. Es wird wohl Devuan – wegen des Init Prozesses. Nein, wird es nicht, denn da hatte ich das Problem mit DynaLoad und keine Lösung und dann bin ich halt zu Debian gewechselt.
Warum nicht RedHat? Die Brüder haben der OpenSource-Community gerade den Stecker gezogen und ich weiß noch nicht, wie sich das auswächst. Erst hat RedHat CentOS geschlossen. Das gibt's nur noch als Rolling Release und sowas ist für einen stabilen und kontrollierten Betrieb absolutes Gift und jetzt platziert RedHat seinen Code auch noch hinter einer PayWall. Technisch gesehen ist das wahrscheinlich sogar legal, aber die Community ist entgeistert. Ich arbeite seit einiger Zeit eben mit RockyLinux, einem Build, der auf den RedHad-Sourcen basiert. RedHat nimmt die Sourcen von Linux, macht seine eigene Distribution und gibt seit neuestem der Community nichts mehr zurück. So ist nicht sicher, ob ich jemals ein Release 10 von RockyLinux, Alma oder Oracle Linux kriegen werde. Also: Debian (Ich würde nie auf die Idee kommen, Ubuntu zu verwenden. Meine Erfahrungen mit dem Workstation-OS haben mir völlig gereicht). Und so führt eines zum anderen. Die Auswahl der wirklich geeigneten Produkte im GNU/Linux Umfeld ist durchaus begrenzt.
Ich denke zurück an die späten 1990er Jahre, als wir unsere Arbeitgeber genötigt haben, sie sollen uns doch bitte erlauben, Server mit Linux zu betreiben und die haben stoisch “Nein” gesagt. Aus heutiger Sicht kann ich sie sogar verstehen und aus derselben Sicht kann ich ihr heutiges Handeln nicht mehr verstehen. Da ist wohl Profitstreben b.z.w. Sparen, koste es was es wolle, eine wichtige Triebfeder.
Quellen:
https://www.heise.de/news/Hetzner-Festplattenausfall-sorgt-fuer-Cloud-Datenverlust-von-1500-Snapshots-6693181.html
https://www.jeffgeerling.com/blog/2023/im-done-red-hat-enterprise-linux
Bildquelle: https://www.deviantart.com/gothicdarkshine/art/Very-Fat-Tux-208818283 (free download, Image size 647x602px 99.6 KB, © 2011 - 2023 GothicDarkShine)
Betriebsysteme sind schon lange nicht mehr durchschaubar, viele zu viele unterschiedliche Schichten & Abhängigkeiten. Dependencies von zu viel zu vielen unterschiedlichen Bibliotheken, die schon bei kleinsten (Ver)Änderungen die ganze Landschaft beschädigen oder im schlimmsten Fall sogar zerstören können. Das macht wirklich keinen Spass mehr und Komplexität ist der Feind.
Vielleicht ist deshalb Containerisierung (AppImage/Flatpak etc.) der einzige rationale Ausweg. Ist zwar keine Problemlösung, aber macht das ganze zumindest beherrschbar, Mit dem "immutable"-Ansatz - unveränderliches Betriebssystem - gehen einige Distros selbst ja bereits auch in eine ähnliche Richtung.
Absolut korrekt. Und leider ist das nicht nur bei den Betriebssystemen so sondern praktisch überall. Gesetze, Vorschriften etc. alles wird immer komplizierter und mühsamer (Papierkrieg). Langsam geht alles irgendwie den Bach runter. 🙄
Das alles irgendwie den Bach runter gehe wird seit Jahrtausenden immer wieder behauptet, das Gegenteil aber ist der Fall. Einfach mal in einer beliebigen Suchmaschine "Alles wird immer schlimmer" eingeben und staunen: Ach uns geht es ja immer besser.
Ich weiss nicht genau wo du lebst, aber hier bei mir in der Schweiz geht es definitiv den Bach runter. In den letzten paar Jahren konnte man z.B. eine drastische Zunahme von Kriminalität feststellen. Mir wurde nun schon zweimal das Auto ausgeraubt. Wann hast du das letzte mal etwas gebaut? Die Auflagen und Vorschriften sind schon fast "belustigend". Das gleiche gilt für vieles andere (z.B. Drohne fliegen, Schlauchboot fahren...). Kein Wunder wenn man anfängt die Krümmung von Bananen zu normen. Ich kenne so viele Leute die keinen Bock mehr haben ihren Job zu machen. Verständlich, denn ein Waldarbeiter will im Wald arbeiten und keine Excel-Listen ausfüllen. Und ja, noch geht es uns gut. Wenn wir jedoch so weiter machen wird sich das vermutlich bald ändern. Die Zeit wird es zeigen... Schlussendlich ist noch jede Hochkultur (Maya, Römer, Ägypter, Inkas...) unter gegangen. Der grösste "Schwachpunkt" des Menschen ist, dass er nichts aus seinen Fehlern lernt. Sieht man ja nun auch wieder am Ukraine-Krieg, äh tschuldigung, am Ukraine-Konflikt.
Es hat ja durchaus einen Grund, warum einige Distributionen, allen voran Debian, nicht immer die aktuellsten Versionen hat, beispielsweise wegen Abhängigkeiten die im Konflikt miteinander stehen. Genau diese Arbeit nimmt einem eine Distribution ja ab. Wer immer das neueste möchte, kann zu anderen Distributionen wie Arch Linux wechseln, die dann ihre eigenen Vor- und Nachteile haben
Ich gehe genauso vor, bei einem Projekt min. bis zum Release die neusten Anhänglichkeiten zu nutzen, oder wenn ich etwas in einem bestehenden Projekt ergänze, dies direkt auf den aktuellsten Stand zu bringen. Aber ich gehe nicht soweit, dass bis auf den Webserver runterzubrechen.
Letztendlich kann aber auch da Containernisierung helfen, innerhalb deines Containers kannst du die neusten Versionen nutzen. Ob Docker, Flatpak oder Snap.
Slackware wäre dann wohl eine Distro, die dir entgegenkommen könnte. Überschaubares init-System und config weitgehend in einer Datei. Paketmanagement, auch mit Selberbau, ohne Abhängigkeitsauflösung, alles in Admin-Hand
Allerdings kann letzteres auch schnell zum Fluch werden, vor allem wenn es schnell gehen muss.
Aber an z.B. udev und dbus kommt auch Slackware nicht mehr vorbei, Betriebssysteme sind einfach komplex geworden.
Container scheinen eine Lösung zu sein, auf den ersten Blick. Sie sind aber nur ein Workaround des eigentlichen Problems. Schließlich gilt immer noch, dass Perfektion erst erreicht ist, wenn man nichts mehr weglassen kann. Bei betriebssystemen, egal welcher Couleur, ist genau das gegenteil der Fall. Immer mehr features, immer mehr Komplexität. Im Umkehrschluss würde das im Chaos enden. Der Trend jedenfalls ist deutlich erkennbar.
Tut mir leid falls man das mittlerweile schon zu häufig gehört hat aber unter anderem wegen solcher Gründe bin ich privat von Ubuntu+Ansible zu NixOS umgestiegen. Die Systeme sind viel einfacher reproduzierbar zu halten und gleichzeitig kann ich die neuesten Pakete testen ohne mir das ganze System zu verseuchen.
Gleiches für die Entwicklungsumgebung, experimentiere momentan gerade mit einem Setup welches ohne Container auskommt und trotzdem für sich alleine aus dem Projekt Ordner läuft und keine Root Rechte benötigt.
Mit etwas Glück kann ich dies alles dann auch auf der Arbeit nachbauen.