In einem temporären Verzeichnis installieren?

In einem temporären Verzeichnis installieren?

Ich möchte Folgendes tun:

Erstellen Sie aus einem Open-Source-Projekt, um es in Bibliotheken usw. zu kompilieren/verlinken. Ich möchte dies jedoch nicht lokal ausführen. Ich möchte es in ein RPM packen, damit es in die richtigen Verzeichnisse auf anderen Maschinen installiert werden kann (die natürlich eine ähnliche Architektur haben). Ich möchte, dass es kompiliert und verknüpft wird und symbolische Links erstellt, als ob es unter /usr/local installiert werden würde, aber ich möchte nicht, dass dies in ein Verzeichnis unter /usr/local/ geht, sondern in ein temporäres Verzeichnis, das gelöscht werden kann, ohne dass dort von anderen Paketen abgelegte Dateien gelöscht werden.

Gibt es einen Parameter für die Installation, der dies ermöglicht – also so erstellt, als ob die Installation unter erfolgen würde, /usr/localdie „Installation“ jedoch ~/tmp/usr/localbeispielsweise tatsächlich unter platziert wird?

Ich habe mir die Möglichkeit angesehen, „make install“ einfach NICHT auszuführen, sondern bei „make“ anzuhalten. Dadurch werden jedoch ausführbare Dateien, Objektcode und Bibliotheken im Quellverzeichnis vermischt.

Antwort1

Die Antwort auf diese Frage hängt davon ab, welches Open-Source-Projekt Sie auf diese Weise installieren möchten. Die allgemeine Antwort ist, dass einige Open-Source-Projekte Makefiles haben, die optionale Variablen für diesen Zweck bereitstellen. Ein konkretes Beispiel hierfür ist gdb, dessen Makefile auf oberster Ebene eine DESTDIRVariable verwendet (aber anscheinend nicht zuweist). Wenn ich diesen Befehl im Build-Verzeichnis von gdb ausführe,

make DESTDIR=/tmp install

Es wird /tmpjedem Zielpfad vorangestellt, bevor die Datei kopiert wird.

Ein anderer, schwierigerer Ansatz besteht darin, den gesamten Build, die Installation usw. in einer Chroot-Umgebung durchzuführen. Verwenden Sie dazu etwas wieOverlayFSkann das erleichtern, aber das ist normalerweise nicht der Weg des geringsten Widerstandes.

Eine andere Möglichkeit, die wahrscheinlich einfacher ist, wenn Sie bereits eine Debian-Variante verwenden (zu der unter anderem Ubuntu gehört), besteht darin, das dem Open-Source-Projekt entsprechende Debian-Quellpaket abzurufen (dieser Ansatz ist wahrscheinlich nicht einfach, wenn es kein solches Quellpaket gibt) und den Anweisungen zum Erstellen des Debian-Pakets aus dieser Quelle zu folgen. Wenn Sie wirklich ein .rpmstatt eines benötigen .deb, können Sie das .debin ein konvertieren .rpm, oder Sie können ein .rpmaus der Verzeichnisstruktur erstellen, die beim Erstellen des übrig geblieben ist .deb.Diese Antwortist eine Informationsquelle zum Erstellen eines Debian-Pakets aus dem Quellcode.

Für die neueste openssl(in einem Kommentar erwähnt, aber noch nicht in der Frage erwähnt) dieINSTALLIERENDie Datei sagt Folgendes:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make DESTDIR=/tmp/package-root install         # Unix
   $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS

 The specified destination directory will be prepended to all
 installation target paths.

Das ist bei verschiedenen Versionen unterschiedlich openssl; für 1.0.2INSTALLIERENsagt dies:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make INSTALL_PREFIX=/tmp/package-root install

 (or specify "--install_prefix=/tmp/package-root" as a configure
 option).  The specified prefix will be prepended to all
 installation target filenames.

Die Idee ist weitgehend dieselbe, nur die Details unterscheiden sich leicht.

verwandte Informationen