Kompilieren und Installieren von Programmen aus dem Quellcode

39

Dies ist ein Problem, das meine Freude an Linux wirklich einschränkt. Wenn sich die Anwendung nicht in einem Repository befindet oder wenn es kein Installationsskript gibt, habe ich wirklich Schwierigkeiten, wo und wie ich eine Anwendung von der Quelle installieren kann.

Im Vergleich zu Windows ist es einfach. Sie müssen (so ziemlich) eine Installationsanwendung verwenden, die die gesamte Arbeit in einem Assistenten erledigt. Mit Linux ... nicht so sehr.

Haben Sie Tipps oder Anweisungen dazu oder gibt es Websites, auf denen explizit erläutert wird, wie, warum und wo Linux-Programme aus dem Quellcode installiert werden?

Nitrodist
quelle
7
"Im Vergleich zu Windows ist es einfach. Sie müssen (so ziemlich) eine Installationsanwendung verwenden, die die gesamte Arbeit in einem Assistenten erledigt. Mit Linux ... nicht so sehr." Da ist die Schwachstelle in der Frage. Unter Windows erhalten Sie selten den Quellcode, sodass Sie demjenigen ausgeliefert sind, der das Paket erstellt hat. Wenn Sie darüber nachdenken, ist es nicht viel anders als zu sagen "Es gab kein Linux-Paket, also muss ich aus dem Quellcode bauen", d. H. es gab keine Möglichkeit, es anfangs zu verstehen. In * nix-land ist das Bauen von der Quelle normalerweise das letzte Mittel, in Windows-ville jedoch selten eine Option.
Avery Payne
2
Davon abgesehen ... +1 für das Stellen einer gemeinsamen Frage, die für alle Neulinge in * nix-Systemen beantwortet werden sollte. :) Das Bauen aus dem Quellcode bedeutet manchmal den Unterschied zwischen dem Beheben eines bösen Fehlers und dem Leiden bis zur nächsten Softwareversion. Es ist wirklich nicht so schlimm, und wie viele hier darauf hingewiesen haben, ist es ziemlich schmerzlos, wenn Sie wissen, wonach Sie suchen und wie Sie es tun müssen.
Avery Payne

Antworten:

22

Normalerweise verfügt das Projekt über eine Website mit Anweisungen zum Erstellen und Installieren. Google dafür zuerst.

Zum größten Teil werden Sie entweder:

  1. Laden Sie einen Tarball (tar.gz oder tar.bz2) herunter, bei dem es sich um eine Veröffentlichung einer bestimmten Version des Quellcodes handelt
  2. Extrahieren Sie den Tarball mit einem Befehl wie tar zxvf myapp.tar.gzfür einen gzippten Tarball oder tar jxvf myapp.tar.bz2einen bzippten Tarball
  3. CD in das oben erstellte Verzeichnis
  4. Lauf ./configure && make && sudo make install

Oder:

  1. Verwenden Sie git oder svn oder was auch immer, um den neuesten Quellcode aus dem offiziellen Quellrepository abzurufen
  2. CD in das oben erstellte Verzeichnis
  3. Lauf ./autogen.sh && make && sudo make install

Sowohl configure als auch autogen.sh akzeptieren ein --prefix-Argument, um anzugeben, wo die Software installiert ist. Ich empfehle zu prüfen, wo ich selbst kompilierte Software ablegen soll. Hier erhalten Sie Ratschläge zum besten Installationsort für maßgeschneiderte Software.

Sandig
quelle
Warum wird autogen.sh beim Abrufen der neuesten Version verwendet, während configure / make für eine offizielle Version verwendet wird?
Louis Salin
1
In der Regel ziehen Leute, die die "neueste" Software wollen, die Version aus der Versionskontrollsoftware (wie Git, Subversion oder CVS). Dies ist eine "Hochkonjunktur", weil es wahrscheinlich nicht getestet wurde, im Gegensatz zu einem veröffentlichten Tarball, für dessen Funktion (zumindest größtenteils) (wahrscheinlich) ein Beweis erbracht wurde. Sinn ergeben?
Matt Simmons
2
@Matt, sicher, es macht Sinn, aber ich denke, der Kommentar bezog sich mehr auf die Tatsache, dass Sandy ihn jetzt so aussehen ließ, als gäbe es eine autogen.sh in jedem git'd / svn'd-Kofferraum.
Reiche
1
Und ein Huhn in jedem Topf ... oder so ähnlich. Ab und zu stoße ich auch auf Software ohne Konfigurationsskript. Wenn es eine einfache, einheitliche Methode gäbe, bräuchten wir keine Pakete ;-)
Matt Simmons
Matt hat vollkommen recht, deshalb habe ich "größtenteils" gesagt und mich dafür ausgesprochen, zuerst die Website des Projekts aufzurufen. Der Ratschlag autogen.sh/configure gilt für so ziemlich jedes GNOME-Modul und eine Menge anderer Projekte. Einige Projekte verwenden kein automake und haben nur Makefile, und Sie werden nur ausgeführt make && sudo make install. Einige Python-Projekte haben nur eine setup.py, die Sie zur Installation aufrufen (da es keine echte Kompilierung gibt). Es gibt auch viele andere Build / Install-Systeme. Hoffentlich erklären README- oder INSTALL-Dateien genau, was zu tun ist.
Sandy
3

Ich möchte nur hinzufügen, dass es Paketmanager gibt, die Pakete aus dem Quellcode kompilieren und alle Paketabhängigkeiten, Flags usw. behandeln.

In BSD-Systemen ist dies ports: Verwenden der Ports-Sammlung

In Debian kann der apt-getPaketmanager auch von der Quelle aus installieren: APT HOWTO: Arbeiten mit Quellpaketen (Gleiches gilt für Ubuntu, Linux-mint und alles andere, was auf Debian basiert)

Die Gentoo-Distribution verwendet den portagePackage Manager, der das gesamte System nur aus dem Quellcode kompiliert: Portage Introduction .

Slackware kann Pakete kompilieren, aber ich weiß nicht, ob es einen Paketmanager dafür gibt .. =)

Auf jeden Fall können Sie immer Pakete kompilieren manuell wie Sandy oben = erwähnt) Auch muss es möglich sein , zu verwenden apt-getoder portageManager - Pakets in jedem anderen Distro ...

holms
quelle
1
Zu sagen "der apt-get Paketmanager kann von der Quelle installieren" ist falsch. Der zitierte Abschnitt beschreibt, wie man ein Debian-Paket aus Debian- Quellen erstellen kann . Keine willkürlichen Quellen.
Faheem Mitha
2

Ich denke, es ist am besten, die Dokumentation zu dem bestimmten Programm oder der Anwendung zu lesen, die Sie installieren möchten. Normalerweise befinden sich in den Tarballs Readmes / READMEs (das Anwendungsquellarchiv, das Sie normalerweise herunterladen können) oder sogar INSTALL-Dateien, um zu lesen und zu erfahren, wie diese Anwendung am besten installiert werden kann. Kurzum: RTFM;)

Reiche
quelle
Ich bin hierher gekommen, weil die README-Datei alle Voraussetzungen für das Erstellen unter Linux bietet, aber nur Windows-Installationsanweisungen enthält. Die akzeptierte Antwort hat bei mir funktioniert und funktioniert wahrscheinlich die meiste Zeit. Ich denke, es ist fast besser, die Route ./configure auszuprobieren und die README-Datei aufzurufen, wenn dies nicht funktioniert (dh wenn eine Abhängigkeit fehlt und Sie die Compiler-Ausgabe nicht lesen können).
Stephen C
1

Eine Zusammenfassung zur Verwendung der Ports-Sammlung in FreeBSD:

Finden Sie Port

Die Ports sind nach Kategorien geordnet. Wenn Sie also nicht wissen, in welcher Kategorie sich der Port befindet, müssen Sie ihn zuerst suchen:

cd /usr/ports
make search name=myport

Manchmal gibt es so zu viele Einträge. Ich persönlich bevorzuge:

find /usr/ports -name myport* -print -depth 2

Verwenden Sie *bei der Suche, da häufig mehrere Versionen eines Ports verfügbar sind. Das Tiefenargument stellt sicher, dass Ihre Rückgabeergebnisse nicht unnötig mit Übereinstimmungen überfüllt sind, die Sie wahrscheinlich nicht wollen.

Aufbau

Oft möchten Sie eine Konfiguration vornehmen. Software wie Apache und Postgres erfordern dies praktisch. Es gibt drei Hauptoptionen: Befehlszeile, Umgebung und Konfigurationsdateien erstellen. So starten Sie mit der Befehlszeile:

make showconfig

Dadurch werden die Standardkonfigurationsoptionen aufgelistet. Wenn Ihnen die Standardeinstellungen gefallen, können Sie sie kompilieren und installieren. Wenn nicht,

make config

Daraufhin wird ein Dialogfeld angezeigt, in dem Sie die gewünschten Optionen auswählen können. (Verwechseln Sie sich nicht damit und make configurekonfigurieren Sie Ihren Port mit den von Ihnen gewählten Optionen!) Dies ist häufig ausreichend, aber für manche Software wie Apache gibt es häufig komplexe Konfigurationen, die ein einfacher Dialog nicht verarbeiten kann. Zu diesem Zweck sollten Sie sich auch die Makefile (s) ansehen, die Ihnen manchmal einige zusätzliche Ziele für make geben, die Ihnen weitere Informationen liefern. So setzen Sie das Apache-Beispiel fort

make show-modules
make show-options
make show-categories

Hier erhalten Sie Informationen zum Einrichten der von Ihnen ausgewählten Module, Thread-Optionen und dergleichen. Wenn die Standardeinstellungen Ihres Ports größtenteils in Ordnung sind und Sie nur ein paar Dinge ändern möchten, können Sie auch einfach Schlüssel = Wert-Paare wie Umgebungsvariablen übergeben:

make MYVBL1=MYVAL1 ... install clean

Sie können die Optionen auch über die folgenden Optionen festlegen -D:

make -D MYVAR -D MYOTHERVAR ... install clean

Bei komplexen Konfigurationen funktioniert die Befehlszeile jedoch nicht gut und Sie sind besser, wenn keine der beiden ersten Methoden wirksam ist. In diesem Fall können Sie eine Konfigurationsdatei erstellen und diese makemit der Variablen __MAKE_CONF übergeben. FreeBSD verfügt über eine Standardkonfigurationsdatei, /etc/make.confdie normalerweise Informationen zu zuvor installierten Ports und anderen Systemeinstellungen enthält. Erstellen Sie zunächst eine Datei mit Ihren Ports-Optionen, rufen Sie sie auf ~/myport.mkund kombinieren Sie diese Datei mit /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

Sie können dann Ihre Konfiguration überprüfen:

make showconfig __MAKE_CONF=~/make.port.conf

und wenn alles gut aussieht:

make install clean __MAKE_CONF=~/make.myport.conf

IN ACHT NEHMEN! Wenn Sie Ihre Konfigurationseinstellungen nach make configureoder nach einer vollständigen oder teilweisen Installation anpassen müssen, müssen Sie Ihre Konfiguration unbedingt zuerst löschen :

make rmconfig

Andernfalls kommt es zu unerwarteten Interaktionen zwischen dem Ports-Subsystem, den makeStandardeinstellungen Ihres Ports und Ihrer gewünschten Konfiguration.

Das ist eine Menge für eine Zusammenfassung, aber die Komplexität der Konfiguration hängt hauptsächlich von der App ab, nicht vom Port. Bash zum Beispiel hat eigentlich keine Optionen.

Installation

Dies ist der einfache Teil:

make install clean

oder du kannst

make build
make install
make clean

Das ist nur mehr Tippen.

Das wars so ziemlich. Natürlich können Sie noch mehr tun, z. B. Abhängigkeiten und Konfigurationsoptionen rekursiv auflisten, mit Patches aktualisieren und so weiter. Hier verweise ich Sie auf den Abschnitt Ports des Handbuchs , die Manpage des Port-Subsystems (gute Informationen zu zusätzlichen Make-Zielen) und die makeManpage.

gvkv
quelle