Linux vielfÀltig: So arbeiten Sie mit jeder Distribution

Linux vielfÀltig: So arbeiten Sie mit jeder Distribution

Eine Anwendung fĂŒr die Datensicherung zu erstellen, die auf jeder Distribution funktioniert, ist eine komplexe Aufgabe. Um sicherzustellen, dass Veeam Agent for Linux auf Distributionen von Red Hat 6 und Debian 6 bis hin zu OpenSUSE 15.1 und Ubuntu 19.04 funktioniert, mĂŒssen eine Reihe von Problemen gelöst werden, insbesondere wenn man bedenkt, dass das Softwareprodukt ein Kernelmodul umfasst.

Der Artikel wurde auf Grundlage eines Vortrags auf der Konferenz LinuxPiter 2019.

Linux ist nicht einfach nur eines der beliebtesten Betriebssysteme. Im Grunde genommen ist es eine Plattform, auf der man etwas Einzigartiges, etwas Eigenes schaffen kann. Daher gibt es von Linux zahlreiche Distributionen, die sich in ihrer Sammlung von Softwarekomponenten unterscheiden. Und hier entsteht ein Problem: Damit das Softwareprodukt auf jeder Distribution funktioniert, mĂŒssen die Besonderheiten jeder einzelnen beachtet werden.

Paketmanager. .deb vs .rpm

Beginnen wir mit dem offensichtlichen Problem der Verbreitung des Produkts fĂŒr verschiedene Distributionen.
Die typischste Methode, Softwareprodukte zu verteilen, besteht darin, ein Paket in ein Repository hochzuladen, damit der im System integrierte Paketmanager es von dort installieren kann.
Es gibt jedoch zwei beliebte Paketformate: rpm und deb. Das bedeutet, dass wir jedes unterstĂŒtzen mĂŒssen.

In der Welt der deb-Pakete ist das KompatibilitĂ€tsniveau erstaunlich. Dasselbe Paket lĂ€sst sich sowohl unter Debian 6 als auch unter Ubuntu 19.04 gleich gut installieren und verwenden. Die Standards fĂŒr den Aufbau von Paketen und deren Handhabung, die in alten Debian-Distributionen festgelegt wurden, sind auch in den modernen Distributionen wie Linux Mint und elementary OS weiterhin relevant. Daher genĂŒgt fĂŒr Veeam Agent for Linux ein deb-Paket fĂŒr jede Hardwareplattform.

In der Welt der rpm-Pakete hingegen gibt es große Unterschiede. Erstens, weil es zwei völlig unabhĂ€ngige Distributor wie Red Hat und SUSE gibt, bei denen KompatibilitĂ€t keine Rolle spielt. Zweitens haben diese Distributoren Distributionen mit technischer UnterstĂŒtzung und experimentellen Versionen. Auch zwischen diesen besteht keine Notwendigkeit zur KompatibilitĂ€t. So haben wir separate Pakete fĂŒr el6, el7 und el8. Ein separates Paket fĂŒr Fedora. Pakete fĂŒr SLES11 und 12 sowie ein separates fĂŒr openSUSE. Das Hauptproblem liegt in den AbhĂ€ngigkeiten und den Paketnamen.

Das Problem der AbhÀngigkeiten

Leider erscheinen die gleichen Pakete hÀufig unter unterschiedlichen Namen in verschiedenen Distributionen. Nachfolgend eine unvollstÀndige Liste der AbhÀngigkeiten des Pakets veeam.

FĂŒr EL7:
FĂŒr SLES 12:

  • libblkid
  • libgcc
  • libstdc++
  • ncurses-libs
  • fuse-libs
  • file-libs
  • veeamsnap = 3.0.2.1185
  • libblkid1
  • libgcc_s1
  • libstdc++6
  • libmagic1
  • libfuse2
  • veeamsnap-kmp = 3.0.2.1185

Infolgedessen ist die Liste der AbhĂ€ngigkeiten einzigartig fĂŒr die Distribution.

Es wird problematisch, wenn sich unter dem alten Paketnamen eine neue Version verbirgt.

Beispiel:

In Fedora 24 wurde das Paket ncurses von Version 5 auf Version 6 aktualisiert. Unser Produkt wurde speziell mit Version 5 entwickelt, um die KompatibilitÀt mit Àlteren Distributionen zu gewÀhrleisten. Um die alte Version 5 der Bibliothek unter Fedora 24 zu verwenden, musste das Paket ncurses-compat-libs.

Infolgedessen gibt es fĂŒr Fedora zwei Pakete mit unterschiedlichen AbhĂ€ngigkeiten.

Es wird interessanter. Nach einem weiteren Update der Distribution ist das Paket ncurses-compat-libs mit der Version 5 der Bibliothek nicht mehr verfĂŒgbar. FĂŒr den Distributor ist es aufwendig, alte Bibliotheken in die neue Version der Distribution zu integrieren. Nach einer gewissen Zeit trat das Problem auch in den SUSE-Distributionen auf.

Infolgedessen mussten einige Distributionen auf eine explizite AbhÀngigkeit von ncurses-libs, verzichten, und das Produkt wurde so angepasst, dass es mit jeder Version der Bibliothek arbeiten kann.

Übrigens gibt es in der 8. Version von Red Hat kein Metapakets mehr, python, das auf das alte Gute verlinkte. python 2.7. Es gibt python2 und python3.

Alternative zu Paketmanagern

Das Problem mit AbhÀngigkeiten ist alt und schon lange offensichtlich. Man denke nur an das Dependency-Hell.
Verschiedene Bibliotheken und Anwendungen so zu kombinieren, dass sie stabil funktionieren und nicht in Konflikt geraten, ist genau die Aufgabe, die jeder Linux-Distributor versucht zu lösen.

Ein ganz anderes Problem versucht der Paketmanager Snappy von Canonical zu lösen. Die Grundidee ist: Die Anwendung lĂ€uft in einer isolierten und vor dem Hauptsystem geschĂŒtzten Sandbox. Wenn die Anwendung Bibliotheken benötigt, werden diese zusammen mit der Anwendung bereitgestellt.

Flatpak lÀsst ebenfalls Anwendungen in einer Sandbox laufen, die Linux-Container verwendet. Die Idee der Sandbox wird auch genutzt von AppImage.

Diese Lösungen ermöglichen es, ein Paket fĂŒr jede Distribution zu erstellen. Im Fall von Flatpak ist die Installation und AusfĂŒhrung der Anwendung sogar ohne Wissen des Administrators möglich.

Das Hauptproblem dabei ist, dass nicht alle Anwendungen in einer Sandbox funktionieren können. Einige benötigen direkten Zugriff auf die Plattform. Ich spreche erst gar nicht von Kernelmodulen, die stark vom Kernel abhĂ€ngen und sich nicht in das Konzept der Sandbox einfĂŒgen.

Ein zweites Problem ist, dass die in der Enterprise-Umgebung beliebten Distributionen von Red Hat und SUSE noch keine UnterstĂŒtzung fĂŒr Snappy und Flatpak enthalten.

Daher gibt es Veeam Agent for Linux nicht auf snapcraft.io noch auf flathub.org.

Abschließend möchte ich zum Thema Paketmanager anmerken, dass es die Möglichkeit gibt, ganz auf Paketmanager zu verzichten, indem binĂ€re Dateien und ein Installationsskript in ein Einzelpaket gebĂŒndelt werden.

Ein solches Bundle ermöglicht die Erstellung eines gemeinsamen Pakets fĂŒr verschiedene Distributionen und Plattformen, fĂŒhrt einen interaktiven Installationsprozess durch und ermöglicht die notwendige Anpassung. Ich habe solche Pakete fĂŒr Linux nur von VMware gesehen.

Das Problem der Updates

Linux vielfÀltig: So arbeiten Sie mit jeder Distribution
Selbst wenn alle AbhÀngigkeitsprobleme gelöst sind, kann das Programm auf derselben Distribution unterschiedlich funktionieren. Das liegt an den Updates.

Es gibt 3 Update-Strategien:

  • Die einfachste ist, niemals zu aktualisieren. Den Server eingerichtet und vergessen. Warum Updates, wenn alles funktioniert? Die Probleme beginnen beim ersten Anruf beim Support. Der Ersteller der Distribution unterstĂŒtzt nur die aktualisierte Version.
  • Man kann dem Distributor vertrauen und die automatische Aktualisierung aktivieren. In diesem Fall ist ein Anruf beim Support wahrscheinlich direkt nach einem misslungenen Update.
  • Die Variante, manuell erst nach Testlauf auf einer Testinfrastruktur zu aktualisieren, ist die sicherste, aber auch die teuerste und aufwendigste. Nicht jeder kann sich das leisten.

Da verschiedene Benutzer unterschiedliche Update-Strategien anwenden, muss sowohl die neueste Version als auch alle zuvor veröffentlichten unterstĂŒtzt werden. Das kompliziert sowohl den Entwicklungsprozess als auch den Testprozess und bringt den Support in Schwierigkeiten.

Vielfalt der Hardware-Plattformen

Verschiedene Hardware-Plattformen sind ein Problem, das hauptsĂ€chlich spezifisch fĂŒr nativen Code ist. Mindestens mĂŒssen BinĂ€rdateien fĂŒr jede unterstĂŒtzte Plattform erstellt werden.

Im Projekt Veeam Agent for Linux können wir einfach nichts RISC-Ă€hnliches unterstĂŒtzen.

Ich werde nicht ausfĂŒhrlich auf dieses Thema eingehen. Ich möchte nur die Hauptprobleme anreißen: plattformabhĂ€ngige Typen wie size_t, Datenstruktur-Ausrichtung und Byte-Reihenfolge.

Statische und/oder dynamische Verlinkung

Linux vielfÀltig: So arbeiten Sie mit jeder Distribution
Die Frage "Wie soll ich mit Bibliotheken verlinken — dynamisch oder statisch?" sollten wir besprechen.

In der Regel verwenden C/C++-Anwendungen unter Linux dynamisches Linking. Das funktioniert gut, wenn die Anwendung speziell fĂŒr eine bestimmte Distribution erstellt wurde.

Steht jedoch die Aufgabe an, verschiedene Distributionen mit einer einzigen BinĂ€rdatei abzudecken, muss man sich an die Ă€lteste unterstĂŒtzte Distribution orientieren. FĂŒr uns ist das Red Hat 6. Es enthĂ€lt gcc 4.4, das nicht einmal den Standard C++11 vollstĂ€ndig unterstĂŒtzt. vollstĂ€ndig.

Wir bauen unser Projekt mit gcc 6.3, der C++14 vollstĂ€ndig unterstĂŒtzt. In diesem Fall mĂŒssen wir die Bibliotheken libstdc++ und boost fĂŒr Red Hat 6 mitbringen. Am einfachsten ist es, statisch mit diesen zu linken.

Leider kann nicht mit allen Bibliotheken statisch gelinkt werden.

Erstens mĂŒssen Systembibliotheken wie libfuse, libblkid dynamisch gelinkt werden, um sicherzustellen, dass sie mit dem Kernel und seinen Modulen kompatibel sind.

Zweitens gibt es Feinheiten bei den Lizenzen.

Die GPL-Lizenz erlaubt grundsĂ€tzlich das Linken von Bibliotheken nur mit Open-Source-Code. MIT und BSD erlauben statisches Linking und erlauben das EinfĂŒgen von Bibliotheken in Projekte. Die LGPL scheint statisches Linking nicht zu widersprechen, verlangt aber, dass die fĂŒr das Linking benötigten Dateien öffentlich zugĂ€nglich gemacht werden.

Im Allgemeinen schĂŒtzt die Verwendung von dynamischem Linking davor, etwas zur VerfĂŒgung stellen zu mĂŒssen.

Build von C/C++-Anwendungen

Um C/C++-Anwendungen fĂŒr verschiedene Plattformen und Distributionen zu erstellen, reicht es aus, einen geeignetengcc zu wĂ€hlen oder zu bauen und Cross-Compiler fĂŒr spezifische Architekturen zu verwenden sowie das gesamte Set an Bibliotheken zu erstellen. Diese Arbeit ist durchaus umsetzbar, aber recht aufwĂ€ndig. Und es gibt keine Garantie, dass der gewĂ€hlte Compiler und die Bibliotheken eine funktionsfĂ€hige Variante ermöglichen.

Ein offensichtlicher Vorteil: Die Infrastruktur wird erheblich vereinfacht, da der gesamte Build-Prozess auf einem einzigen Rechner durchgefĂŒhrt werden kann. Außerdem ist es ausreichend, ein Set von BinĂ€rdateien fĂŒr eine Architektur zu erstellen, und diese können in Pakete fĂŒr verschiedene Distributionen verpackt werden. So werden die Pakete von Veeam fĂŒr den Veeam Agent fĂŒr Linux erstellt.

Im Gegensatz zu dieser Variante kann man einfach eine Build-Farm einrichten, das heißt mehrere Maschinen fĂŒr den Aufbau. Jede dieser Maschinen sorgt fĂŒr die Kompilierung der Anwendung und den Build eines Pakets fĂŒr eine bestimmte Distribution und Architektur. In diesem Fall erfolgt die Kompilierung mit den Mitteln, die der Distributor vorbereitet hat. Das bedeutet, dass die Phasen der Vorbereitung des Compilers und der Auswahl von Bibliotheken entfallen. DarĂŒber hinaus kann der Build-Prozess leicht parallelisiert werden.

Es gibt jedoch auch einen Nachteil dieses Ansatzes: FĂŒr jede Distribution innerhalb einer Architektur mĂŒssen eigene BinĂ€rdateien erstellt werden. Ein weiterer Nachteil ist, dass eine solche Vielzahl von Maschinen verwaltet werden muss, was viel Speicherplatz und RAM benötigt.

So werden KMOD-Pakete des Kernel-Moduls veeamsnap fĂŒr Red Hat-Distributionen erstellt.

Open Build Service

Die Kollegen von SUSE haben versucht, einen goldenen Mittelweg in Form eines speziellen Dienstes fĂŒr die Kompilierung von Anwendungen und den Build von Paketen zu realisieren — openbuildservice.

Im Grunde genommen handelt es sich um einen Hypervisor, der eine virtuelle Maschine erstellt, in der alle benötigten Pakete installiert werden, die Anwendung kompiliert und das Paket in dieser isolierten Umgebung erstellt wird, bevor die virtuelle Maschine wieder freigegeben wird.

Linux vielfÀltig: So arbeiten Sie mit jeder Distribution

Der im OpenBuildService implementierte Scheduler bestimmt selbst, wie viele virtuelle Maschinen er fĂŒr die optimale Build-Geschwindigkeit starten kann. Der integrierte Signaturmechanismus unterzeichnet die Pakete automatisch und lĂ€dt sie in das integrierte Repository hoch. Das eingebaute Versionsverwaltungssystem speichert die Historie der Änderungen und Builds. Es bleibt nur noch, die eigenen Quellcodes in dieses System einzufĂŒgen. Einen Server muss man nicht unbedingt selbst aufsetzen, man kann auch den Open Service nutzen.

Hier gibt es allerdings ein Problem: Eine solche Lösung lĂ€sst sich schwer in die bestehende Infrastruktur integrieren. Zum Beispiel ist keine Versionskontrolle erforderlich, da wir bereits eine fĂŒr die Quellcodes haben. Der Signaturmechanismus unterscheidet sich: es wird ein spezieller Server verwendet. Ein Repository ist ebenfalls nicht notwendig.

DarĂŒber hinaus ist die UnterstĂŒtzung anderer Distributionen — wie Red Hat — recht spĂ€rlich umgesetzt, was durchaus nachvollziehbar ist.

Ein Vorteil eines solchen Services ist der schnelle Support der nĂ€chsten Version des SUSE-Distributions. Vor der offiziellen AnkĂŒndigung des Releases werden die benötigten Pakete fĂŒr den Build in ein öffentliches Repository hochgeladen. In der Liste der verfĂŒgbaren Distributionen im OpenBuildService erscheint eine neue Version. Wir setzen das HĂ€kchen, und sie wird zum Build-Plan hinzugefĂŒgt. So erfolgt die HinzufĂŒgung einer neuen Version der Distribution praktisch mit einem Klick.

In unserer Infrastruktur wird mit OpenBuildService eine Vielzahl von KMP-Paketen des veeamsnap-Kernelmoduls fĂŒr SUSE-Distributionen erstellt.

Als NÀchstes möchte ich mich mit spezifischen Fragen zu Kernelmodulen befassen.

kernel ABI

Linux-Kernelmodule wurden historisch in Form von Quellcodes verteilt. Der Grund dafĂŒr ist, dass die Kernelentwickler sich nicht darum kĂŒmmern, ein stabiles API fĂŒr Kernelmodule zu unterstĂŒtzen, geschweige denn auf binĂ€rer Ebene, auch kABI genannt.

Um ein Modul fĂŒr den Vanilla-Kernel zu bauen, sind die Header genau dieses Kernels notwendig, und es wird nur auf diesem Kernel funktionieren.

DKMS ermöglicht die Automatisierung des Build-Prozesses von Modulen bei Kernel-Updates. Infolgedessen verwenden Nutzer des Debian-Repositories (und seiner zahlreichen Verwandten) entweder Kernelmodule aus dem Distributionsrepository oder solche, die mit DKMS aus den Quellen erstellt wurden.

Diese Situation entspricht dem Enterprise-Segment jedoch nicht besonders. Anbieter proprietÀrer Software möchten ihre Produkte in Form von kompilierten BinÀrdateien vertreiben.

Administratoren möchten aus SicherheitsgrĂŒnden keine Entwicklungstools auf Produktionsservern behalten. Distributoren von Enterprise Linux – wie Red Hat und SUSE – haben entschieden, dass sie ihren Nutzern eine stabile kABI bieten können. Infolgedessen sind KMOD-Pakete fĂŒr Red Hat und KMP-Pakete fĂŒr SUSE entstanden.

Das Wesen dieser Lösung ist ziemlich einfach. FĂŒr eine bestimmte Version der Distribution wird die API des Kernels eingefroren. Der Distributor erklĂ€rt, dass er z.B. den Kernel 3.10 verwendet und nur Korrekturen und Verbesserungen vornimmt, die die Kernel-Schnittstellen nicht berĂŒhren. Die fĂŒr den allerersten Kernel erstellten Module können ohne Neukompilierung fĂŒr alle nachfolgenden verwendet werden.

Red Hat erklĂ€rt, dass die kABI-KompatibilitĂ€t fĂŒr das Betriebssystem wĂ€hrend des gesamten Lebenszyklus gewĂ€hrleistet ist. Das bedeutet, dass ein fĂŒr RHEL 6.0 (Release November 2010) erstelltes Modul auch auf der Version 6.10 (Release Juni 2018) funktionieren sollte. Das sind fast 8 Jahre. NatĂŒrlich ist diese Aufgabe ziemlich komplex.
Wir haben mehrere FÀlle festgestellt, in denen das Modul veeamsnap aufgrund von Problemen mit der kABI-KompatibilitÀt nicht mehr funktionierte.

Nachdem das fĂŒr RHEL 7.0 erstellte Modul veeamsnap mit dem Kernel von RHEL 7.5 inkompatibel war, aber dennoch geladen wurde und garantiert den Server zum Absturz brachte, haben wir die kABI-KompatibilitĂ€t fĂŒr RHEL 7 vollstĂ€ndig aufgegeben.

Derzeit enthĂ€lt das KMOD-Paket fĂŒr RHEL 7 eine Version fĂŒr jede Release-Version und ein Skript, das das Laden des Moduls sicherstellt.

SUSE ist bei der kABI-KompatibilitÀt vorsichtiger. Sie garantieren die kABI-KompatibilitÀt nur innerhalb eines Service Packs.

Beispielsweise wurde SLES 12 im September 2014 veröffentlicht. SLES 12 SP1 folgte bereits im Dezember 2015, also nach etwas mehr als einem Jahr. Obwohl beide Releases den Kernel 3.12 verwenden, sind sie kABI-inkompatibel. Offensichtlich ist es erheblich einfacher, eine kABI-KompatibilitĂ€t nur ĂŒber ein Jahr aufrechtzuerhalten. Ein jĂ€hrlicher Zyklus fĂŒr Kernel-Updates sollte keine Probleme fĂŒr Modulautoren verursachen.

Dank dieser Politik von SUSE haben wir bei unserem Modul veeamsnap kein einziges Problem mit der kABI-KompatibilitĂ€t festgestellt. Allerdings ist die Anzahl der Pakete fĂŒr SUSE fast um den Faktor zehn höher.

Patches und Backports

Obwohl die Distributorinnen und Distributoren bemĂŒht sind, die kABI-KompatibilitĂ€t und die StabilitĂ€t des Kernels zu gewĂ€hrleisten, arbeiten sie auch daran, die Leistung zu verbessern und Fehler in diesem stabilen Kernel zu beheben.

Dabei verfolgen die Entwickelnden des Enterprise Linux-Kernels neben ihren eigenen „Fehlerbereinigungen“ auch die Änderungen im Vanilla-Kernel und ĂŒbertragen diese in ihre „stabilisierte“ Version.

Manchmal fĂŒhrt das zu neuen Fehlern.

Im letzten Release von Red Hat 6 gab es in einem der kleineren Updates einen Fehler. Dieser fĂŒhrte dazu, dass das Modul veeamsnap das System beim Freigeben eines Snapshots garantiert abstĂŒrzen ließ. Durch den Vergleich der Kernel-Quellcodes vor und nach dem Update haben wir festgestellt, dass das Problem durch einen Backport verursacht wurde. Ein Ă€hnlicher Fix wurde im Vanilla-Kernel der Version 4.19 umgesetzt. Allerdings funktionierte dieser Fix im Vanilla-Kernel einwandfrei, wĂ€hrend bei der Übertragung in das „stabilisierte“ 2.6.32 Probleme mit Spin-Lock auftraten.

NatĂŒrlich kommen Fehler bei jedem vor, aber war es wirklich nötig, den Code von 4.19 auf 2.6.32 zu ziehen und dabei die StabilitĂ€t zu riskieren? Ich bin mir nicht sicher


Am Ă€rgerlichsten ist es, wenn Marketing in das Tauziehen zwischen „StabilitĂ€t“ „Modernisierung“ eingreift. Die Marketingabteilung benötigt ein stabiles Kernsystem des aktualisierten Distributionspakets, andererseits sollte es auch in der Leistung besser sein und neue Funktionen haben. Das fĂŒhrt zu seltsamen Kompromissen.

Als ich versuchte, ein Modul mit dem Kernel 4.4 von SLES 12 SP3 zu kompilierten, stellte ich mit Überraschung fest, dass es Funktionen aus dem Vanilla 4.8 enthĂ€lt. Meiner Meinung nach Ă€hnelt die Implementierung der Block-I/O-FunktionalitĂ€t des Kernels 4.4 von SLES 12 SP3 mehr dem Kernel 4.8 als der vorherigen stabilen Version 4.4 von SLES 12 SP2. Ich kann nicht beurteilen, wie viel Code von Kernel 4.8 in den SLES 4.4 fĂŒr SP3 ĂŒbertragen wurde, allerdings kann ich es mit gutem Gewissen nicht mehr als den stabilen 4.4 betiteln.

Das Unangenehmste daran ist, dass man beim Schreiben eines Moduls, das auf verschiedenen Kernen gleich gut funktioniert, nicht mehr auf die Kernelversion vertrauen kann. Man muss auch die Distribution berĂŒcksichtigen. Gut ist, dass man manchmal auf ein Define zurĂŒckgreifen kann, das mit neuen Funktionen eingefĂŒhrt wird, aber diese Möglichkeit ist nicht immer gegeben.

In der Folge wird der Code mit kuriosen Direktiven fĂŒr die bedingte Kompilierung angereichert.

Es gibt auch Patches, die die dokumentierte API des Kernels Àndern.
Ich stieß auf die Distribution KDE neon 5.16 und war sehr ĂŒberrascht, dass der Aufruf von lookup_bdev in dieser Kernel-Version die Liste der Eingabeparameter geĂ€ndert hat.

Um das Ganze zu kompilieren, musste ich ein Skript in die Makefile einfĂŒgen, das ĂŒberprĂŒft, ob der Parameter mask fĂŒr die Funktion lookup_bdev vorhanden ist.

Signatur der Kernelmodule

Aber kommen wir zurĂŒck zur Frage der Paketverteilung.

Einer der Vorteile des stabilen kABI ist, dass Kernelmodule als BinĂ€rdatei signiert werden können. In diesem Fall kann der Entwickler sicher sein, dass das Modul nicht versehentlich beschĂ€digt oder absichtlich verĂ€ndert wurde. Dies kann mit dem Befehl modinfo ĂŒberprĂŒft werden.

Die Red Hat- und SUSE-Distributionen ermöglichen die ÜberprĂŒfung der Modulsignatur und laden es nur, wenn das entsprechende Zertifikat im System registriert ist. Das Zertifikat ist der öffentliche SchlĂŒssel, mit dem das Modul signiert wird. Wir verteilen es in Form eines separaten Pakets.

Das Problem hierbei ist, dass die Zertifikate entweder im Kernel integriert sind (die von den Distributionen verwendet werden) oder in den nichtflĂŒchtigen EFI-Speicher mit Hilfe eines Tools geschrieben werden mĂŒssen. mokutil. Das Tool mokutil bei der Installation des Zertifikats erfordert einen Neustart des Systems und bietet dem Administrator noch vor dem Laden des Betriebssystemkernels an, das Laden des neuen Zertifikats zu genehmigen.

Daher erfordert das HinzufĂŒgen eines Zertifikats physischen Zugriff des Administrators auf das System. Wenn sich die Maschine irgendwo in der Cloud oder einfach auf einem Remote-Server befindet und der Zugang nur ĂŒber das Netzwerk (zum Beispiel ĂŒber ssh) möglich ist, wird es unmöglich sein, ein Zertifikat hinzuzufĂŒgen.

EFI auf virtuellen Maschinen

Obwohl EFI schon lange von fast allen Herstellern von Motherboards unterstĂŒtzt wird, kann der Administrator bei der Installation des Systems nicht an die Notwendigkeit von EFI denken, und es könnte deaktiviert sein.

Nicht alle Hypervisoren unterstĂŒtzen EFI. VMWare vSphere unterstĂŒtzt EFI ab Version 5.
Microsoft Hyper-V hat ebenfalls die UnterstĂŒtzung von EFI erhalten, beginnend mit Hyper-V fĂŒr Windows Server 2012R2.

Allerdings ist dieser Funktionsumfang in der Standardkonfiguration fĂŒr Linux-Maschinen deaktiviert, was bedeutet, dass ein Zertifikat nicht installiert werden kann.

In vSphere 6.5 kann die Option Secure Boot nur in der alten Version des Web-Interfaces, die ĂŒber Flash funktioniert, gesetzt werden. Das Web-UI auf HTML-5 hinkt momentan stark hinterher.

Experimentelle Distributionen

Zum Schluss betrachten wir die Frage der experimentellen Distributionen und der Distributionen ohne offizielle UnterstĂŒtzung. Einerseits wird man solche Distributionen wahrscheinlich auf Servern ernsthafter Organisationen nicht antreffen. Solche Distributionen haben keine offizielle UnterstĂŒtzung. Daher kann man auch keinen technischen Support fĂŒr Produkte auf solchen Distributionen bieten.

Jedoch werden solche Distributionen zu einer geeigneten Plattform, um neue experimentelle Lösungen auszuprobieren. Zum Beispiel Fedora, OpenSUSE Tumbleweed oder unstable Versionen von Debian. Sie sind ziemlich stabil. Es gibt immer neue Programmversionen und immer einen neuen Kernel. Nach einem Jahr könnte diese experimentelle FunktionalitÀt in die aktualisierte Version von RHEL, SLES oder Ubuntu integriert werden.

Wenn also etwas auf einer experimentellen Distribution nicht funktioniert, ist das ein Grund, sich mit dem Problem zu befassen und es zu lösen. Man muss darauf vorbereitet sein, dass diese FunktionalitĂ€t bald auf den Produktionsservern der Benutzer verfĂŒgbar sein wird.

Die derzeit offiziell unterstĂŒtzten Distributionen fĂŒr Version 3.0 können Sie einsehen. hierDas tatsĂ€chliche Spektrum der Distributionen, auf denen unser Produkt funktioniert, ist jedoch deutlich breiter.

Persönlich interessierte mich das Experiment mit dem Betriebssystem „Elbrus“. Nach der Optimierung des Veeam-Pakets ließ sich unser Produkt installieren und funktionierte einwandfrei. Über dieses Experiment habe ich auf Habr geschrieben unter Artikel.

Die UnterstĂŒtzung neuer Distributionen wird fortgesetzt. Wir erwarten bald die Veröffentlichung von Version 4.0. Eine Beta sollte bald verfĂŒgbar sein, also bleiben Sie auf dem Laufenden ĂŒber whats-new!

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster