Installer un package localement pour un utilisateur - meilleures pratiques?

18

Je veux installer Git localement à un utilisateur sur un serveur RHEL (je n'ai pas d'accès root) Quelle serait votre façon la plus propre / la plus organisée d'installer un logiciel sur un compte d'utilisateur local?

  • Installer tout dans le répertoire personnel de cet utilisateur?
  • À quoi ressemblerait la disposition du répertoire?
  • Souhaitez-vous installer à partir de la source ou RPM?
  • Si à partir de RPM utiliseriez-vous YUM ou RPM?
câblé
la source

Réponses:

17

Il existe des moyens d'installer rpms dans un répertoire utilisateur à l'aide rpm, mais je ne pense pas que ce soit simple. Je ne crois pas qu'il y ait un moyen yum.

Ma pratique standard est devenue de compiler depuis la source vers un localrépertoire dans ma maison

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

Je télécharge la source comme je le ferais /usr/localquand j'ai root, par exemple dans ~/local/git.

Lors de la compilation, je mets le préfixe dans le localrépertoire

$ configure --prefix=/home/user_name/local
$ make
$ make install

J'ajoute ensuite ~/local/binà mon $ PATH dans .bash_profile.

Bien sûr, la difficulté de l'installation à partir des sources est que vous n'obtenez pas de résolution automatique des dépendances. Si vous trouvez que vous devez installer des dépendances, compilez-les et installez-les comme ci-dessus. Ensuite, lorsque vous compilez git, vous devez mettre à jour les indicateurs de compilation afin qu'ils recherchent l'emplacement correct pour les bibliothèques de la dépendance et incluent les fichiers:

./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'
drs
la source
Cela a parfaitement fonctionné, merci pour les conseils!
filaire le
13

Un fichier .rpm est en fait une forme d' cpioarchive, qui ressemble beaucoup à une forme simple de tar. L' rpm2cpioutilitaire est probablement installé sur le système et ne nécessite pas de privilèges à utiliser; il écrit en sortie standard, donc pour convertir:

rpm2cpio whatever.rpm > whatever.cpio

Il y a un que man cpiovous pouvez regarder vous-même, mais ce que vous voulez maintenant faire est d'alimenter l'archive vers cpio en mode "copier dans":

cat whatever.cpio | cpio -i

Très probablement, le contenu est organisé dans une arborescence de répertoires afin que les fichiers soient placés dans les emplacements appropriés (bin, etc., etc.). Si ceux-ci n'existent pas dans votre pwd, vous obtiendrez une erreur, mais cela répertoriera les fichiers dans l'archive (vous pouvez obtenir la même chose avec le commutateur -t/ --list). Si vous souhaitez créer automatiquement les répertoires, utilisez -d. Donc, un moyen rapide de décompresser un rpm:

rpm2cpio whatever.rpm | cpio -i -d

Vous pouvez l'utiliser pour installer dans $ HOME. Le seul problème sera si le programme s'attend à trouver des éléments /etc, etc., car de nombreuses choses ont leur emplacement d'installation codé en dur pour n'importe quel but lors de leur compilation.

Construire à partir de la source est probablement une meilleure option (puisque vous pouvez fournir l'emplacement correct), mais si vous pouvez le faire fonctionner dans tous les cas, c'est rapide et simple.

De plus, le navigateur de fichiers de midnight commander ( mc), et probablement d'autres navigateurs de fichiers en plus, vous permettra de naviguer dans une hiérarchie rpm ou cpio (ou tar compressé ou zip) et de copier des fichiers individuels comme si l'archive était décompressée (elle crée un système de fichiers temporaire pour parcourir le contenu de l'archive).

boucle d'or
la source
0

Il s'agit d'une alternative (n'utilisant pas yum) et la permission sera farfelue, mais vous pouvez chownpar la suite à l'utilisateur cible: - c'est également un hasard :-(

#-## 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/*

Ajoutez ensuite les emplacements appropriés à votre chemin.

Kalpesh Patel
la source