Ich erzähle Ihnen von der merkwürdigen Situation, die mir passiert ist, und wie Sie einen Beitrag zu einem berühmten Projekt leisten können.
Vor nicht allzu langer Zeit war ich mit einer Idee beschäftigt: Linux direkt von UEFI booten ...
Die Idee ist nicht neu und es gibt eine Reihe von Handbüchern zu diesem Thema. Einer von ihnen ist hier zu sehen
.Tatsächlich führten meine langjährigen Versuche, dieses Problem zu lösen, zu einer wohlgeformten
Lösung . Die Lösung funktioniert ziemlich gut und ich verwende sie auf Teilen meiner Heimmaschinen. Diese Lösung wird
hier ausführlicher beschrieben.
Das Wesentliche bei UEFI-Boot ist, dass die ESP-Partition (EFI System Partition) mit dem Verzeichnis / boot kombiniert wird. Das heißt, Alle Kernel und Boot-Images (initrd) befinden sich in demselben Abschnitt, in dem UEFI ausführbare Dateien und insbesondere System-Bootloader ausführen kann. Der Linux-Kernel selbst ist jedoch bereits in vielen Distributionen mit der Option UEFISTUB integriert, mit der der Kernel über UEFI gestartet werden kann.
Diese Lösung hat einen unangenehmen Moment: Die ESP-Partition ist in FAT32 formatiert, auf der keine festen Links erstellt werden können (die das System regelmäßig erstellt, wenn initrd aktualisiert wird). Und daran ist nichts besonders Kriminelles, aber es ist nicht sehr schön, Systemwarnungen beim Aktualisieren von Kernelkomponenten zu sehen ...
Es gibt noch einen anderen Weg.
Der UEFI-Boot-Manager (derjenige, bei dem Sie den OS-Loader registrieren müssen) kann neben Linux-Loadern / Kerneln auch Treiber laden. Sie können also den Treiber des Dateisystems laden, in dem Sie / boot haben, und direkt von dort aus den Kernel mithilfe von UEFI laden. Der Treiber muss natürlich in den ESP-Bereich gestellt werden. Dies ist, was GRUB-Lader tun. Das Highlight ist jedoch, dass alle häufig verwendeten GRUB-Funktionen bereits in UEFI enthalten sind. Genauer gesagt in seinem Download-Manager. Und um noch langweiliger zu sein, bietet der UEFI-Bootmanager in einigen Bereichen noch mehr Optionen.
Es scheint eine schöne Lösung zu sein, aber es gibt ein "ABER" (oder besser gesagt, aber dazu später mehr). Tatsache ist, dass das UEFI-Treibersystem ziemlich einfach ist. Es gibt keine Möglichkeit, ein Dateisystem zu mounten oder einen Treiber einem bestimmten Gerät zuzuordnen. Es gibt einen Systemaufruf mit dem bedingten Namen Map (Eng.), Der jeden Treiber der Reihe nach nimmt und versucht, ihn mit allen, zumindest geeigneten Geräten, zu verbinden. Und wenn das Gerät den Treiber abholen könnte, wird eine Zuordnung erstellt - ein verbindlicher Datensatz. Genau so sollte der neu geladene Treiber im gemeinsamen Heap mit allen anderen initialisiert werden. Sie müssen lediglich ein Bit (LOAD_OPTION_FORCE_RECONNECT) in 1 im Startdatensatz des Treibers einfügen, und UEFI führt nach dem Laden dieselbe globale Neuzuordnung durch.
Das ist aber nicht so einfach. Das Standarddienstprogramm efibootmgr (mit dem der UEFI-Entlademanager konfiguriert wird) weiß nicht, wie (oder besser gesagt, wie) dieses Bit gesetzt werden soll. Ich musste es mit meinen Händen durch ein ziemlich kompliziertes und gefährliches Verfahren führen.
Und wieder einmal, nachdem ich versucht hatte, dies mit meinen Händen zu tun, konnte ich es nicht ertragen und schrieb ein
Problem auf GitHub, in dem Entwickler gebeten wurden, diese Funktion hinzuzufügen.
Es vergingen mehrere Tage, aber niemand achtete auf meine Bitte. Und aus Neugier schaute ich auf die Quelle ... gabelte mich und überlegte "auf meinen Knien", wie ich diese Funktion hinzufügen könnte ... "Auf meinen Knien", weil ich so etwas nicht eingestellt und die Quelle direkt im Browser bearbeitet hatte.
C (Programmiersprache) Ich weiß es sehr oberflächlich, aber ich habe eine Lösung herumgeschmissen (hauptsächlich Kopieren und Einfügen) ... nun, dann dachte ich - und zumindest habe ich dort wahrscheinlich viele Fehler (meine früheren Versuche, den C-Code eines anderen zu bearbeiten, wurden ab dem 10. gesammelt). Ich werde eine Pull-Anfrage stellen. Gut
gestaltet .
Und dort wurde Travis CI angeschraubt, um Pull-Anfragen zu überprüfen. Und er gab mir sorgfältig alle meine Fehler. Nun, wenn Fehler bekannt sind - was auch immer korrigiert werden würde: wieder direkt im Browser, und ab dem vierten Versuch wurde der Code gesammelt (ein Erfolg für mich).
Und so habe ich, ohne aus dem Browser herauszukriechen, eine sehr reale Pull-Anfrage für ein Dienstprogramm entworfen, das in fast allen modernen Linux-Distributionen verwendet wird.
Ich war überrascht von der Tatsache, dass ich, ohne die Sprache wirklich zu kennen und selbst nichts einzurichten (abhängig von den Abhängigkeiten, ich benötige ein kleines Bündel von Bibliotheken für die Assemblierung) und selbst ohne den Compiler zu starten, einfach eine funktionierende und nützliche Funktion im Browser "aufgetaucht" habe .
Meine Anfrage hängt jedoch seit dem 19. März 2019 ohne Reaktion, und ich habe bereits begonnen, sie zu vergessen.
Aber gestern wurde diese Anfrage zum Master hinzugefügt.
Worum geht es in meiner Geschichte? Und es geht um die Tatsache, dass sich im Rahmen moderner Technologien herausgestellt hat, dass echter Code bereits in einem Browser geschrieben werden kann, ohne dass Entwicklungstools und Abhängigkeiten lokal bereitgestellt werden müssen.
Außerdem muss ich zugeben, dass dies meine zweite Pull-Anfrage an bekannte (zumindest in engen Kreisen) Versorgungsunternehmen ist. Beim letzten Mal führte meine Anfrage, die Anzeige einiger Felder in der SyncThing-Weboberfläche zu korrigieren, zu meiner buchstäblich einzeiligen Bearbeitung in einer Umgebung, die ich überhaupt nicht kenne.