Ich möchte Git lokal für einen Benutzer auf einem RHEL-Server installieren (ich habe keinen Root-Zugriff). Was wäre Ihre sauberste/organisierteste Methode zum Installieren von Software auf einem lokalen Benutzerkonto?
- Alles im Home-Verzeichnis dieses Benutzers installieren?
- Wie würde das Verzeichnislayout aussehen?
- Möchten Sie aus der Quelle oder von RPM installieren?
- Wenn von RPM, würden Sie YUM oder RPM verwenden?
Antwort1
Es gibt Möglichkeiten, RPMs in einem Benutzerverzeichnis zu installieren rpm
, aber ich glaube nicht, dass das so einfach ist. Ich glaube nicht, dass es eine Möglichkeit mit gibt yum
.
Meine Standardpraxis ist geworden, aus dem Quellcode in ein local
Verzeichnis in meinem Home-
$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include
Ich lade den Quellcode so herunter, wie ich es tun würde, /usr/local
wenn ich Root-Rechte hätte, beispielsweise in ~/local/git
.
Beim Kompilieren setze ich das Präfix auf das local
Verzeichnis
$ configure --prefix=/home/user_name/local
$ make
$ make install
Ich füge dann ~/local/bin
meinen $PATH hinzu .bash_profile
.
Das Problem bei der Installation aus dem Quellcode ist natürlich, dass Sie keine automatische Abhängigkeitsauflösung erhalten. Wenn Sie feststellen, dass Sie Abhängigkeiten installieren müssen, kompilieren und installieren Sie sie wie oben beschrieben. Wenn Sie dann kompilieren git
, müssen Sie die Kompilierflags aktualisieren, damit sie am richtigen Speicherort nach den Bibliotheken und Include-Dateien der Abhängigkeit suchen:
./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'
Antwort2
Eine .rpm-Datei ist eigentlich eine Art cpio
Archiv, das einer einfachen Form von sehr ähnlich ist tar
. Das rpm2cpio
Dienstprogramm ist wahrscheinlich auf dem System installiert und erfordert keine Berechtigungen zur Verwendung. Es schreibt in die Standardausgabe. Um es zu konvertieren, müssen Sie also Folgendes tun:
rpm2cpio whatever.rpm > whatever.cpio
Es gibt eins, man cpio
das Sie sich selbst ansehen können, aber was Sie jetzt tun möchten, ist, das Archiv im „Kopieren in“-Modus an cpio weiterzuleiten:
cat whatever.cpio | cpio -i
Sehr wahrscheinlich ist das Material in einem Verzeichnisbaum organisiert, sodass die Dateien an die entsprechenden Stellen (bin usw.) gelangen. Wenn diese in Ihrem pwd nicht vorhanden sind, erhalten Sie eine Fehlermeldung, aber die Dateien im Archiv werden aufgelistet (dasselbe erreichen Sie mit dem Schalter -t
/ --list
). Wenn Sie die Verzeichnisse automatisch erstellen möchten, verwenden Sie -d
. So können Sie ein RPM schnell entpacken:
rpm2cpio whatever.rpm | cpio -i -d
Sie können dies verwenden, um in $HOME zu installieren. Das einzige Problem entsteht, wenn das Programm erwartet, Dinge in /etc
usw. zu finden, da bei vielen Dingen der Installationsort aus irgendeinem Grund beim Kompilieren fest codiert ist.
Das Erstellen aus dem Quellcode ist wahrscheinlich die bessere Option (da Sie den richtigen Speicherort angeben können), aber wenn Sie es auf jeden Fall zum Laufen bringen können, ist es schnell und einfach.
Darüber hinaus können Sie mit dem Dateibrowser Midnight Commander ( mc
) und wahrscheinlich auch mit anderen Dateibrowsern in einer RPM- oder CPIO-Hierarchie (oder komprimierten TAR- oder ZIP-Datei) navigieren und einzelne Dateien so kopieren, als wäre das Archiv entpackt (es wird ein temporäres Dateisystem mit dem Archivinhalt erstellt, das Sie durchsuchen können).
Antwort3
Dies ist eine Alternative (ohne Yum) und die Berechtigung wird verrückt sein, aber Sie können chown
sie dem Zielbenutzer anschließend erteilen: – außerdem ist es Glückssache :-(
#-## Download all dependency for the RPM --
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash
#-## Install all downloaded to an alternate root
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*
Fügen Sie Ihrem Pfad dann entsprechende Orte hinzu.