Installation von der Quelle. Auflösen von Abhängigkeiten, ohne den Paketmanager zu zerstören

19

Das Kompilieren und Installieren von Software ist ein Problem, das ich nicht überwinden kann. Ich möchte nur mein Verständnis dieses Prozesses mit jemandem durchgehen, der besser informiert ist, um meinen Geist zu klären und zum nächsten Level zu gelangen.

Viele wissenschaftliche Software, die ich benötige, werden nicht als Pakete verteilt. Ich verstehe, dass "./configure" die Kompilierungsvariablen einrichtet und nach Abhängigkeiten sucht. "Make" führt die Kompilierung aus. "Sudo make install" setzt alle Bibliotheken und Bins an ihre Plätze. Es funktioniert jedoch nie. Ich komme selten aus der a) "./configure" -Stufe heraus, ohne die Abhängigkeitshölle zu betreten, und wenn ich das tue, wird "sudo make install" wahrscheinlich meine Box beschädigen.

a) Die Abhängigkeitshölle ist sehr frustrierend. Manchmal habe ich die Bibliothek, aber sie gefällt mir nicht. Oder die Bibliothek möchte nicht installiert werden. Oder "configure" kann es nicht finden. Oder meine Distribution hat es irgendwo platziert, wo es nicht sein sollte. Oder es gibt zwei Versionen in meinem System. Das Problem ist, ich kann nicht verstehen, wie man diese Probleme diagnostiziert und daher behebt. Was sind einige gute Referenzen für jemanden, der kein Programmierer werden muss?

b) Nach meinem Verständnis wird "make install" einige Bibliotheken ersetzen und Einstellungen ändern, ohne dass sich mein Paketmanager dessen bewusst ist. Daher können einige Programme nicht ausgeführt werden, andere können nicht aktualisiert werden. Wenn ich also "make install" nicht verwende und die kompilierte Binärdatei in meinem Benutzerverzeichnis mit einem symbolischen Link zum PFAD behalte, bin ich dann im Klaren?

Meine Box ist Single User, hat jede Menge kostenloses HD, daher ist es mir egal, ob ich mehrere (Dutzende) Kopien von Bibliotheken habe, um meine Probleme zu lösen. Platz ist billig.

Lenz
quelle
3
Sie sagen nicht, welche Distribution Sie verwenden, das wäre eine interessante Information. Wenn Sie ein Debian-Derivat ausführen, können Sie apt-get build-dep <package>die erforderlichen Abhängigkeiten automatisch installieren.
Marco
Ich benutze CentOS 6 (um das zu haben, was der Super-Guru in unserem Labor benutzt), aber ich habe Ubuntu benutzt.
Lenz
Willkommen im Leben eines Distributions-Paketierers. Es ist nicht besonders schwierig, all diese Abhängigkeitsverfolgung durchzuführen, aber es ist eine Plackerei.
Gilles 'SO- hör auf böse zu sein'
Siehe Nicht-Root- Paketmanager und möglicherweise andere Fragen zu Nicht-Root-Benutzern , die sich mit Softwareinstallation und Paketverwaltung befassen.
Gilles 'SO- hör auf böse zu sein'

Antworten:

16

Die meisten Pakete werden <package>-dev(für Debian-basierte) oder <package>-devel(für Red Hat-basierte) Bibliotheken enthalten, die zum Erstellen von Links benötigt werden.

Zum Beispiel, wenn die Quelle es erfordert libxml, werden Sie in Debian-basierten Systemen libxml2und finden libxml2-dev(verwenden apt-cache search <dependancy>, um sie zu finden).

Sie benötigen das libxml2-dev, um es zu erstellen und libxml2auszuführen.

Der ./configureSchritt unterstützt normalerweise Flags --with-libxml=/usr/lib/, die auf die richtigen Bibliotheken zeigen ( ./configure --helpsollte alle Optionen auflisten). Es unterstützt normalerweise auch das Ändern des Installationsorts mit --prefix=$HOME/sw. Die Verwendung eines Präfixes außerhalb der Kontrollmöglichkeiten Ihres Paketmanagers ist der beste Weg, um Konflikte mit der installierten Software des Paketmanagers zu vermeiden.

Unter Debian und Derivaten sollte die Verwendung --prefixvon /usr/local/oder /opt/local/sicher sein.

Wenn eine Bibliothek (oder Version), die Sie benötigen, nicht im Paketmanager verfügbar ist, laden Sie einfach die Quelle herunter und kompilieren Sie sie mit ähnlichen Optionen. Verwenden Sie zum --prefixKompilieren der Software, die Sie wirklich verwenden möchten, vor allem eine externe Instanz Ihres Paketmanagers --with-<library>=/<path/to/installed/library>.

Bahamat
quelle
5

Es gibt das Tool, auto-aptdas dafür verwendet werden kann.

Vom Mann Auto-Apt :

auto-apt ist ein Programm, das den Dateizugriff von Programmen überprüft, die in auto-apt-Umgebungen ausgeführt werden. Wenn ein Programm auf eine Datei eines nicht installierten Pakets zugreift, installiert auto-apt das Paket, das die Datei enthält, mithilfe von apt-get.

Es wird wie folgt verwendet:

auto-apt run ./configure

Eine andere Möglichkeit ist die Verwendung apt-get build-dep <package>auf Debian-basierten Distributionen.

Marco
quelle
apt-get build-dep <package>arbeitete für mich. Es war immer wieder frustrierend ./configure, ein weiteres erforderliches Paket zu lernen!
HeatfanJohn
2

Bei RPM-basierten Distributionen können Sie versuchen, geeignete Pakete zu erstellen (es ist nicht so schwer ...).

Die Vorteile eines ordnungsgemäßen Pakets bestehen darin, dass Ihr Paketmanager den Überblick über die Software behält und Sie Ihr Setup problemlos an einer anderen Stelle bzw. auf dem nächsten Computer replizieren können. Mit einer ordnungsgemäßen Portierung des Quellpakets (neue Upstream-Version, Bugfix-Patch, Aktualisierung der zugrunde liegenden Bibliotheken) ist es einfacher, als beim nächsten Mal alles von Grund auf neu zu berechnen.

vonbrand
quelle