Das Bauen aus Quellcode kann eine Version oder Funktion bereitstellen, die in den konfigurierten Paketquellen nicht verfügbar ist, verlagert jedoch Integrations-, Aktualisierungs- und Vertrauensarbeit von der Distribution auf dich. Bevorzuge ein unterstütztes Distributionspaket, wenn es die Anforderung erfüllt.
Pakete · Lektion 7
Quellcode kompilieren
Erfahre, wie du aus Quellcode kompilierte Software überprüfst, konfigurierst, baust, testest, bereitstellst und nachverfolgst.
Vor dem Bauen überprüfen und lesen
Beziehe Quellcode über einen authentifizierten Veröffentlichungskanal des Upstream-Projekts. Überprüfe seine Signatur oder Prüfsumme über einen vertrauenswürdigen Weg und prüfe anschließend das Archiv, bevor du es in ein unprivilegiertes Staging-Verzeichnis extrahierst. Lies Dateien wie README, INSTALL, SECURITY und die Build-Dokumentation des Projekts.
Build-Anweisungen sind ausführbarer Code. Ein configure-Skript, eine Build-Definition, ein Test oder ein Compiler-Plug-in kann beliebige Befehle als dein Benutzer ausführen. Baue keinen nicht vertrauenswürdigen Quellcode und führe den Build selbst nicht mit sudo aus.
Warum sollte der Kompilierungsschritt gewöhnlich ohne sudo ausgeführt werden?
Build-Anforderungen installieren
Auf einem Entwicklungssystem der Debian-Familie ist ein verbreiteter Ausgangspunkt:
$ sudo apt install build-essential
Dies installiert einen grundlegenden Compiler und Build-Werkzeuge, aber nicht jede für jedes Projekt erforderliche Abhängigkeit. Projekte können außerdem Sprachlaufzeiten, Generatoren, Build-Systemwerkzeuge, Entwicklungsheader oder genaue Bibliotheksversionen benötigen. Installiere Anforderungen aus vertrauenswürdigen Paketquellen und trenne Build-Abhängigkeiten von Laufzeitabhängigkeiten.
Was stellt build-essential auf einem System der Debian-Familie bereit?
Konfigurieren und bauen
Ein traditionelles Projekt im Autoconf-Stil verwendet:
$ ./configure --prefix=/usr/local
$ make
configure prüft die Umgebung und erzeugt Build-Dateien gemäß den ausgewählten Optionen. make liest Abhängigkeits- und Befehlsregeln, gewöhnlich aus einem Makefile, und erstellt die angeforderten Ziele.
Diese Reihenfolge ist nicht universell. Projekte können CMake, Meson, Ninja, sprachspezifische Werkzeuge oder eigene Skripte verwenden. Folge der Dokumentation der genauen Veröffentlichung, statt ./configure nur deshalb auszuführen, weil es vertraut ist. Ein Build-Verzeichnis außerhalb des Quellbaums kann erzeugte Dateien getrennt halten, sofern das Build-System dies unterstützt.
Was tut make im traditionellen Arbeitsablauf?
Vor der Installation testen
Führe das dokumentierte Testziel des Projekts aus, zum Beispiel:
$ make check
Das tatsächliche Ziel kann test, check oder ein getrennter Befehl sein. Untersuche Fehlschläge, statt ungetestete Ausgaben zu installieren. Tests können Netzwerkzugriff, Dienste, besondere Hardware oder Isolation erfordern. Prüfe sie vor der Ausführung genauso wie anderen Build-Code.
Was solltest du tun, wenn die dokumentierte Testsuite fehlschlägt?
Installation bereitstellen und nachverfolgen
sudo make install kann Dateien direkt in Systempräfixe kopieren, ohne sie in der nativen Paketdatenbank zu erfassen. Ziele zur Deinstallation sind optional und können unvollständig sein, während spätere Upgrades Dateien überschreiben oder verwaisen lassen können.
Bevorzuge einen dieser kontrollierten Ansätze:
- ein offizielles natives Paket mit den Paketierungswerkzeugen der Distribution bauen
- unter einem klar getrennten Präfix wie
/usr/localinstallieren, wenn die Richtlinie dies erlaubt - Dateien mit einem unterstützten Mechanismus wie
DESTDIRin einem temporären Paketierungsstamm bereitstellen - gegebenenfalls ein unprivilegiertes Benutzerpräfix, eine isolierte Umgebung oder einen Container verwenden
checkinstall kann für einige make install-Arbeitsabläufe ein einfaches Paket erzeugen, ist aber weder universell noch ein Ersatz für ein geprüftes Paketierungsrezept in Distributionsqualität. Behandle es niemals als eine „immer gültige“ Regel. Prüfe vor jedem privilegierten Kopieren die bereitgestellte Dateiliste, Eigentumsverhältnisse, Berechtigungen, Pfade und den Plan zur Deinstallation oder Aktualisierung.
Welchen Zweck erfüllt eine unterstützte Staging-Installation mit DESTDIR?
Nutze Software unter Linux aus Quellcode bauen in einer entbehrlichen Umgebung, um den Arbeitsablauf zu üben, ohne experimentelle Dateien in ein Produktivsystem zu mischen.
Lektion abgeschlossen
Sie haben Quellcode kompilieren abgeschlossen
Du kannst Quellcode-Builds nun als kontrollierten Arbeitsablauf der Softwarelieferkette angehen.
Authentifiziere den Quellcode und prüfe seine Anweisungen als ausführbaren Code.
Installiere ausdrückliche Build-Anforderungen aus vertrauenswürdigen Paketquellen.
Konfiguriere, baue und teste ohne unnötige Privilegien.
Stelle Ausgaben bereit und prüfe sie vor der Systeminstallation.
Verfolge installierte Dateien mit nativer Paketierung oder einem bewusst gewählten isolierten Präfix.
Lernfortschritt speichern
Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.
Kostenloses Konto erstellen