Ich benutze Ubuntu 12.04. Angenommen, ich habe package x
in Version 1.7 aus dem Repository (mit all seinen Abhängigkeiten) installiert , benötige jedoch einige Funktionen, die nur in Version 1.8 verfügbar sind. Daher lade ich den Quell-Tar herunter und kompiliere ihn:
./configure
make
make install
- Überschreibt dies die vorhandenen 1.7-Binärdateien?
- Wenn die vorhandenen Binärdateien überschrieben werden, spiegelt der Paketmanager die neue Version (1.8) wider und kann
package x
in Zukunft vom Paketmanager aktualisiert werden? - Wenn
package y
eine Abhängigkeit vonpackage x 1.8
- besteht, wird sie erfüllt?
Ich habe versucht, online eine gute Quelle zu finden, die dies erklärt. Wenn Sie Empfehlungen haben, lassen Sie es mich bitte wissen.
ubuntu
package-management
compiling
software-installation
Philip D'Rozario
quelle
quelle
make install
. Ich denke, aus den Antworten geht hervor, dass im Wesentlichen nur Dateien in Verzeichnisse innerhalb des Installationspräfixes kopiert werden (obwohl sich herausstellt, dass möglicherweise einige Konfigurationsdateien eingegeben werden/etc
und einige dynamisch veränderbare Daten eine Initiale darstellen Zustand von etwas kann eingegeben werden/var
). Wenn Sie jedoch der Meinung sind, dass dies nicht klar ist, würde ich meine Antwort gerne bearbeiten, um sie zu erklären.Antworten:
Die überwiegende Mehrheit der
.deb
Pakete, unabhängig davon, ob sie von offiziellen Repositorys bereitgestellt werden oder nicht, wird mit dem Präfix installiert/usr
.Dies bedeutet, dass ausführbare Dateien, die vom Benutzer ausgeführt werden sollen,
/usr/bin
oder/usr/sbin
(oder/usr/games
wenn es sich um ein Spiel handelt), gemeinsam genutzte Bibliotheken/usr/lib
, plattformunabhängige gemeinsam genutzte Daten/usr/share
, Header-Dateien/usr/include
und automatisch installierter Quellcode eingegeben werden/usr/src
.Ein kleiner Prozentsatz der Pakete wird
/
als Präfix verwendet. Zum Beispielbash
fügt das Paket diebash
ausführbare Datei ein/bin
, nicht/usr/bin
. Dies gilt für Pakete, die das Nötigste bieten, um im Einzelbenutzermodus (z. B. im Wiederherstellungsmodus) ausgeführt und im Mehrbenutzermodus gestartet zu werden (denken Sie jedoch daran, dass dies häufig Funktionen zum Mounten einiger Arten von Netzwerkfreigaben enthält ... falls dies der Fall/usr
ist ein entferntes Dateisystem).Ein kleiner Prozentsatz der
.deb
Pakete, hauptsächlich der mit Quickly erstellten , erstellt einen paketspezifischen Ordner/opt
und legt alle ihre Dateien dort ab. Abgesehen davon wird meistens/opt
der Speicherort von Software verwendet, die von einem ausführbaren Installationsprogramm installiert wird, das den Paketmanager des Systems nicht verwendet, jedoch kein Kompilieren aus dem Quellcode umfasst. (Wenn Sie beispielsweise ein proprietäres Programm wie MATLAB installieren, werden Sie es wahrscheinlich einfügen/opt
.)Wenn Sie im Gegensatz dazu ein Quellarchiv herunterladen (oder Quellcode von einem Revisionskontrollsystem wie Bazaar oder git abrufen), erstellen und installieren, wird es normalerweise mit dem Präfix installiert
/usr/local
(es sei denn, Sie weisen es an, dies zu tun) Andernfalls). Dies bedeutet , dass Ihre ausführbaren Dateien gehen in/usr/local/bin
,/usr/local/lib
oder/usr/local/games
, Ihre Bibliotheken in/usr/local/lib
und so weiter.Hiervon gibt es einige Ausnahmen - einige Programme werden standardmäßig mit dem
/usr
Präfix installiert und überschreiben daher Installationen derselben Programme aus.deb
Paketen. In der Regel können Sie dies verhindern, indem Sie sie ausführen,./configure --prefix=/usr/local
anstatt./configure
sie zu erstellen. Ich betone noch einmal, dass dies normalerweise nicht notwendig ist.(Aus diesem Grund ist es für Sie sehr sinnvoll, den von Ihnen erstellten Quellcode einzufügen
/usr/local/src
, der für die systemweite Verwendung in dem zu diesem Zweck vorhandenen Code installiert wird .)Angenommen, die gepackte Version ist installiert in
/usr
und die Version, die Sie von der Quelle installiert haben, ist in/usr/local
:Dateien aus dem installierten Paket werden nicht überschrieben.
In der Regel wird die neuere Version ausgeführt, wenn Sie das Programm manuell über die Befehlszeile aufrufen (vorausgesetzt,
/usr/local/bin
oder wo immer die ausführbaren Dateien installiert sind, befindet sie sich in IhrerPATH
Umgebungsvariablen und wird vor dem entsprechenden/usr
Verzeichnis mit Präfix angezeigt, z/usr/bin
.Es kann jedoch einige Probleme geben, welche Starter durch Menüs oder Suchen erstellt und zugänglich gemacht werden. Wenn Sie mehr als eine Version einer Bibliothek an verschiedenen Orten installiert haben, kann es außerdem etwas komplizierter werden, zu bestimmen, welche von welcher Software verwendet wird.
Wenn Sie sich eigentlich nicht verwenden beide Versionen des Programms oder der Bibliothek, dann oft sollten Sie die man entfernen , dass Sie nicht verwenden, obwohl in bestimmten Situationen , die Sie möglicherweise eine Paketabhängigkeiten erfüllen installiert bleiben soll.
Wenn jedoch aus irgendeinem Grund Dateien überschrieben werden (z. B. wenn der Quellcode nicht installiert ist,
/usr
sondern/usr/local
):sudo make uninstall
im Verzeichnis) deinstallieren und dann das Paket oder die Pakete deinstallieren, die die überschriebenen Dateien enthalten (da sie durch Deinstallation der installierten Version nicht wiederhergestellt werden) von der Quelle). Installieren Sie dann die gewünschte Version neu./usr/local/src/program-or-library-name
Wie zur Erfüllung von Abhängigkeiten:
Wenn es ein
.deb
Paket gibt, das von der von der Quelle installierten Software abhängt und die von der Quelle (oder höher) installierte Version erfordert, wird dieses Paket nicht erfolgreich installiert. (Genauer gesagt, Sie können es möglicherweise "installieren", es wird jedoch nie "konfiguriert", sodass Sie es nicht verwenden können.) Abhängigkeiten werden durch die installierten Paketversionen gelöst, nicht durch Welche Software hast du eigentlich?Ebenso wird die Software zumindest versuchen, vollständig zu installieren, selbst wenn Sie die von Paketen bereitgestellten Dateien, von denen die zu installierende Software abhängt, manuell gelöscht haben. (Sie sollten im Allgemeinen nicht versuchen, dies für irgendeinen Zweck zu nutzen. Der auf falschen Informationen basierende Paketmanager ist fast immer eine schlechte Sache.)
Wenn Sie daher kein Paket finden, das die Version der benötigten Software enthält, müssen Sie möglicherweise
.deb
aus der von Ihnen kompilierten Software ein eigenes Paket erstellen und aus diesem Paket installieren. Dann weiß der Paketmanager, was los ist. Das Erstellen eines Pakets für den eigenen Gebrauch, das auf den Computern anderer Benutzer nicht gut funktioniert, ist eigentlich nicht sehr schwierig. (Aber ich bin der Meinung, dass dies möglicherweise außerhalb des Rahmens Ihrer Frage liegt, wie sie derzeit formuliert ist.)quelle
Was Sie vom Software Center oder mit einem APT-Befehl (
apt-get
,aptitude
) oder mit installieren ,dpkg
ist dem Paketverwaltungssystem bekannt.dpkg
ist das Tool zur Manipulation von Paketen auf niedriger Ebene. APT und Freunde sind Tools auf höherer Ebene, die aufgerufen werdendpkg
, um die eigentliche Installation durchzuführen und auch Abhängigkeiten und Paketdownloads zu verarbeiten.Wenn Sie ein Programm aus dem Quellcode kompilieren, ist es dem Paketmanager nicht bekannt. Die Konvention unter Linux, die Sie befolgen sollten, wenn Sie Schwierigkeiten haben, den Überblick zu behalten und Ihre Installationen überschreiben zu lassen, lautet:
/bin
,/lib
,/sbin
,/usr
Sind reserviert zum Paket - Manager;/usr/local
für den Systemadministrator gilt - beachten Sie die dortige Verzeichnishierarchie, aber Sie müssen die Dateien selbst verwalten.Siehe Bester Weg, um vim / gvim auf 7.3 in Ubuntu 10.04 zu aktualisieren? Hier finden Sie eine Liste der Möglichkeiten, um neuere Softwareversionen zu erhalten. Der einfachste Weg ist, eine PPA zu bekommen , falls es eine gibt. Wenn Sie ein Binärpaket erhalten oder aus dem Quellcode kompilieren, empfehle ich die Verwendung von stow , um Ihre manuell installierte Software zu verwalten. Alternativ können Sie Ihr eigenes
.deb
Paket erstellen - es ist mehr Arbeit, aber es zahlt sich aus, wenn Sie häufig aktualisieren (normalerweise ist das Wiederherstellen des Pakets für die nächste Nebenversion sehr schnell) oder wenn Sie es auf vielen Computern bereitstellen, auf denen dieselbe Distribution ausgeführt wird.Wenn Sie mit den meisten Programmen ausgeführt werden
./configure && make && sudo make install
, wird das Programm unter installiert/usr/local
. Überprüfen Sie die mit der Quelle gelieferte Dokumentation (normalerweise in einer Datei mit dem NamenREADME
oderINSTALL
) oder führen Sie sie aus./configure --help
, um zu überprüfen, ob dies der Fall ist. Wenn das Programm unter installiert ist/usr/local
, wird die vom Paketmanager bereitgestellte Version nicht beeinträchtigt./usr/local/bin
kommt zuerst auf dem SystemPATH
. Beachten Sie, dass Siemake install
als Administrator (root) ausgeführt werden müssen. nicht als root kompilieren. Wie oben erwähnt, empfehle ich die Verwendung von stow anstelle der direkten Installation in/usr/local
.quelle
Dies hängt vom Paket und vielen anderen Dingen ab
Lange Rede, kurzer Sinn:
Es gibt keine generische Antwort. Es ist stark paketabhängig. Sie sollten nach Möglichkeit offizielle +1 PPAs verwenden, anstatt aus dem Quellcode zu kompilieren.
quelle
/opt
./usr/local
ist das Standardpräfix und sogar/usr
ein häufigeres Standardpräfix als/opt
./opt
wird am häufigsten für Software verwendet, die in einem dedizierten Verzeichnis installiert wird, das für die jeweilige Anwendung benannt ist (so kann beispielsweise eine Anwendung namens Foo mit allen darin enthaltenen Dateien installiert werden/opt/foo
).