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.
apt-get build-dep <package>
die erforderlichen Abhängigkeiten automatisch installieren.Antworten:
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 Systemenlibxml2
und findenlibxml2-dev
(verwendenapt-cache search <dependancy>
, um sie zu finden).Sie benötigen das
libxml2-dev
, um es zu erstellen undlibxml2
auszuführen.Der
./configure
Schritt unterstützt normalerweise Flags--with-libxml=/usr/lib/
, die auf die richtigen Bibliotheken zeigen (./configure --help
sollte 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
--prefix
von/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
--prefix
Kompilieren der Software, die Sie wirklich verwenden möchten, vor allem eine externe Instanz Ihres Paketmanagers--with-<library>=/<path/to/installed/library>
.quelle
Es gibt das Tool,
auto-apt
das dafür verwendet werden kann.Vom Mann Auto-Apt :
Es wird wie folgt verwendet:
Eine andere Möglichkeit ist die Verwendung
apt-get build-dep <package>
auf Debian-basierten Distributionen.quelle
apt-get build-dep <package>
arbeitete für mich. Es war immer wieder frustrierend./configure
, ein weiteres erforderliches Paket zu lernen!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.
quelle