Comment installer le programme localement sans privilèges sudo?


73

Supposons que j’ai un accès ssh à certains serveurs Ubuntu en tant qu’utilisateur et que j’ai besoin d’installer des outils non système pour plus de commodité (mc, rtorrent, mcedit). Je ne veux pas déranger les administrateurs pour ces petits programmes.

Y at-il un moyen de les installer (les faire fonctionner) sans utiliser quelque chose comme sudo apt-get install?



Voir aussi Où placer un exécutable local? pour une discussion pertinente.
George M



Réponses:


33
  1. Compilez et installez dans ~/bin(et éditez votre .bashrcpour le définir PATHafin de l’inclure). Les bibliothèques peuvent également être compilées et installées dans ~/lib(définir LD_LIBRARY_PATHpour y pointer), et les en-têtes de développement peuvent être installés dans, par exemple ~/includes.

  2. Selon les détails spécifiques des programmes que vous souhaitez installer et des bibliothèques dont ils dépendent, vous pouvez télécharger les fichiers .deb et utiliser " dpkg-deb -x" pour les extraire sous votre répertoire personnel. Vous aurez alors beaucoup de « fun » la mise PATH, LD_LIBRARY_PATHet d' autres variables. Plus le programme ou l'application que vous installez est complexe, plus vous serez amusant :)

    Bien sûr, vous ne pourrez pas installer les setuidfichiers binaires de cette façon - ils installeront, mais (étant donné que vous n’avez pas l’autorisation de les chown pour qu’ils soient root ou paramétrés setuiddessus), ils ne seront que des binaires normaux appartenant à vous. .

    De même, les démons et les services système qui s’attendent à être exécutés avec une certaine UIDcapacité ou qui ont la capacité de modifier l’aide, ou s’attendent à ce que les fichiers soient /etcstockés plutôt, ~/etcet ainsi de suite, risquent de ne pas bien fonctionner, voire pas du tout.

  3. La plupart des administrateurs système considéreraient mcet mceditseraient "pour la plupart inoffensifs", des programmes inoffensifs.

    Cependant, rares sont ceux qui considèrent que l’installation d’un client torrent est inoffensive, en particulier s’ils doivent payer pour la bande passante ou s’avérer juridiquement responsables. La plupart des administrateurs système ne seraient probablement pas entièrement satisfaits que les utilisateurs finaux installent ce logiciel sans autorisation. Ils peuvent dire «bien sûr, allez-y, assommez-vous» ou ils ne le peuvent pas… mais vous devriez poser des questions sur tout ce qui pourrait causer des problèmes aux propriétaires / administrateurs de la machine.


J'ai entendu dire que ce paramètre LD_LIBRARY_PATHest un hack diabolique . Est-ce que cela s'applique aussi ici ou ai-je mal compris?
Will Vousden

1
Tous les problèmes liés à la définition de LD_LIBRARY_PATH s'appliquent. oui, c'est, ou peut être, un hack diabolique. Parfois, des hacks diaboliques sont nécessaires pour atteindre des objectifs particuliers… L'essentiel pour enfreindre les «règles» est de les connaître suffisamment pour savoir de quoi elles sont conçues pour vous protéger et pourquoi vous devez les enfreindre dans ce cas particulier. , et quels sont les risques ou pourraient être.
cas

Il me suffisait d'installer un programme indépendant (zoom), alors j'ai d'abord essayé la 2e option ( dpkg-deb -xvers un répertoire local). Travaillé comme un charme. Je n'ai pas eu à faire de LD_LIBRARY_PATHpiratage. Même si je devais le faire, je le ferais dans la même ligne de commande afin de ne pas affecter les paramètres globaux (par exemple $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony

vous devez uniquement définir LD_LIBRARY_PATH si un ou plusieurs packages que vous souhaitez installer fournissent des bibliothèques partagées. S'il ne s'agit que d'exécutables, de données, de documents, de fichiers de configuration, etc., il peut utiliser les bibliothèques système.
cas le

50

Vous devez les compiler à partir des sources. Cela devrait juste être une question de

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

Le binaire serait alors situé dans ~/myapps/bin. Alors, ajoutez export PATH="$HOME/myapps/bin:$PATH"à votre .bashrcfichier et rechargez le .bashrcfichier avec source ~/.bashrc. Bien entendu, cela suppose que gcc est installé sur le système.


6
Qu'en est-il des dépendances? Est-il possible de les gérer automatiquement sans exécuter le même code pour chacun d'eux?
yura

1
@yura non, vous devez le faire vous-même.
Ulrich Dangel

Que faire si vous n'avez pas les privilèges pour le faire? Est-il habituel d'avoir la permission de compiler un logiciel sans accès sudo / root?
Freedo

5

Vous pouvez utiliser JuNest , qui crée un petit conteneur Linux dans le répertoire de l'utilisateur, dans lequel vous pouvez installer tous les packages.


0

J'ai rencontré le même problème, voici comment je l'ai rapidement résolu, en supposant que vous disposiez d'un serveur Linux du même système d'exploitation et de la même architecture.

  1. Installez le logiciel sur le système que vous contrôlez

  2. Trouvez l'exemple exécutable which pythonet copiez-le dans~/

  3. Copiez les bibliothèques avec:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Transférez l'exécutable et les bibliothèques sur l'autre système où vous ne disposez que de privilèges locaux, puis exécutez les opérations suivantes:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Cela créera un dossier ~/libpour stocker les bibliothèques, l'ajoutera à votre chemin et dira à LD de regarder les bibliothèques là-bas. Il suffit donc d'ajouter vos exécutables et les bibliothèques là-bas. Vous pouvez maintenant le lancer comme vous le feriez ailleurs.

Cela peut paraître très compliqué, mais très portable, rapide et je n’ai pas encore trouvé quelque chose que je ne peux pas utiliser de cette façon. Bien sûr, le logiciel ne peut pas essayer de faire des choses qui nécessitent un accès root, comme une liaison à un port inférieur. que 1024, etc.


-1

J'ai le même problème que toi. Je ne l'ai pas encore essayé, mais il semble que Linuxbrew puisse être pratique sur ce problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.