web-dev-qa-db-fra.com

Comment installer des packages sous Linux (CentOS) sans utilisateur root avec une gestion automatique des dépendances?

Est-il possible d'utiliser RPM ou YUM ou tout autre gestionnaire de packages sous Linux, en particulier CentOS, pour installer un package déjà téléchargé ou depuis le dépôt vers un emplacement personnalisé sans accès administrateur/root?

J'ai essayé de construire à partir de sources, en utilisant cmake, configure, make, make install etc, mais, il a fini par avoir tant de dépendances l'une après l'autre.

Ou existe-t-il de meilleures alternatives?

16
user3330840

Il est possible d'utiliser yum et rpm pour installer n'importe quel paquet dans le référentiel de la distribution. Voici la recette:

Trouver le nom du package

Utilisation yum search.

Télécharger

Téléchargez le package et toutes ses dépendances à l'aide de yumdownloader (qui est disponible sur CentOS par défaut). Vous devrez le passer --resolve pour obtenir la résolution des dépendances. yumdownloader télécharge dans le répertoire en cours sauf si vous spécifiez un --destdir.

mkdir -p ~/rpm
yumdownloader --destdir ~/rpm --resolve vim-common

Choisissez un emplacement de préfixe

Ça pourrait être ~, ~/centos, ou ~/y. Si votre domicile est lent car il se trouve sur un système de fichiers réseau, vous pouvez le mettre dans /var/tmp/....

mkdir ~/centos

Extraire tous les packages .rpm

Extrayez tous les packages .rpm à l'emplacement de votre préfixe choisi.

cd ~/centos && rpm2cpio ~/rpm/x.rpm | cpio -id
  • rpm2cpio génère le fichier .rpm sous forme d'archive .cpio sur stdout.
  • cpio le lit depuis stdin
  • -i signifie extraire (dans le répertoire courant)
  • -d signifie créer un répertoire manquant

Vous pouvez éventuellement utiliser -v: verbeux

Configurer l'environnement

Vous devrez configurer la variable d'environnement PATH et LD_LIBRARY_PATH pour que les packages installés fonctionnent correctement. Voici l'exemple correspondant de mon ~/.profile:

export PATH="$HOME/centos/usr/sbin:$HOME/centos/usr/bin:$HOME/centos/bin:$PATH"

L='/lib:/lib64:/usr/lib:/usr/lib64'
export LD_LIBRARY_PATH="$L:$HOME/centos/usr/lib:$HOME/centos/usr/lib64"

Remarque: Lorsque vous connectez ssh à un serveur, vous obtenez un shell de connexion. Alors votre .bashrc n'est pas fourni par défaut. Bash exécute votre fichier de démarrage de connexion à la place. Ce fichier est le premier fichier existant de la liste: .bash_profile, .bash_login et .profile (voir documentation bash sur les fichiers de démarrage ). Si pour une raison obscure, vous souhaitez configurer votre environnement dans votre .bashrc plutôt que votre fichier de connexion ou de démarrage, vous devrez vous procurer le premier à partir du dernier.


Maintenant, si vous souhaitez installer de nombreux packages de cette façon, vous souhaiterez peut-être automatiser le processus. Si c'est le cas, jetez un œil à ce référentiel .

13
loxaxs

TL; DR Utilisez Miniconda, la conda-forge est incroyable.


J'ai essayé pendant longtemps de faire fonctionner un gestionnaire de paquets sur CentOS mais sans succès. Le mieux que j'ai pu faire était d'installer un préfixe Gentoo au bon endroit sur un autre CentOS avec un accès root, puis scp un .tar.xz de l'ensemble de l'installation sur le serveur cible (seul moyen d'obtenir un bon gcc pour Gentoo Prefix). Je pouvais emerge (construire et installer) des packages sur le serveur cible mais continuais à rencontrer des problèmes avec les sections locales et les autorisations.


J'ai récemment réalisé une installation utilisateur de certains packages intéressants en utilisant conda. Voici comment l'installer à partir de la ligne de commande:

curl "https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh" | sh

Si comme moi, votre dossier de départ est hébergé sur un lecteur distant (un système de fichiers réseau), vous ne voudrez peut-être pas l'installer dans votre dossier de départ, alors vous voudrez peut-être utiliser quelque chose comme mkdir /var/tmp/lo puis spécifiez un dossier d'installation comme /var/tmp/lo/da pendant l'installation.

Vous serez également invité à ajouter, par exemple /var/tmp/lo/da/bin à votre CHEMIN dans votre .bashrc, mais lorsque vous vous connectez à un serveur, vous obtenez un shell de connexion, donc votre .bashrc n'est pas fourni par défaut. Vous devrez donc utiliser votre .bash_profile/.bash_login/.profile (voir documentation bash sur les fichiers de démarrage ) pour ajouter cette ligne ou pour source votre .bashrc.

Vous pourrez alors installer un grand nombre de packages, mais peut-être pas tous ceux que vous vouliez. La plupart du temps, s'il n'est pas dans le canal par défaut, il sera dans conda-forge. Vous pouvez vérifier les packages existants sur https://anaconda.org/search?q=

  • gcc conda install gcc
  • zlib conda install zlib
  • faire conda install make
  • cmake conda install cmake
  • git conda install git
  • poisson conda install -c conda-forge fish
  • zsh conda install -c ActivisionGameScience zsh
  • tmux conda install -c conda-forge tmux
    • Ce tmux a un bogue avec le nom de la bibliothèque ncurse qu'il utilise. Vous pouvez contourner ce problème en accédant à votre da/lib dossier et lien symbolique ln -sT libtinfow.so.6.1 libtinfo.so.6

Autres gestionnaires de paquets que j'ai essayé d'utiliser après conda:

Linuxbrew

Je pensais qu'avec cela, il serait facile d'installer homebrew (linuxbrew) mais leurs sources sont désordonnées et utilisent un chemin absolu codé en dur pour Ruby interpreter, qui échoue car ce n'est pas la dernière version et ainsi de suite et ainsi de suite et j'ai abandonné.

Rien

Nix vous oblige toujours à utiliser le dossier/nix. Ils l'ont également codé en dur et il est difficile de le séduire correctement à chaque téléchargement qu'il doit faire pendant l'installation (sans parler des mises à jour).

Gentoo Prefix

Je m'attends à ce que Gentoo Prefix soit plus facile à installer directement maintenant que gcc peut être utilisé sur le serveur cible. - D'accord, j'ai essayé mais rencontré des bugs de permissions lors de l'installation (2018-09-28):

portage.exception.OperationNotPermitted: chown(b'~/gentoo/tmp/var/tmp/portage/sys-apps/gentoo-functions-0.12/image/var', 2000, 2000)

PkgSrc

Je vais essayer pkgsrc maintenant. - Utilisez la version 64 bits EL 6.x (plus ancienne) si sur CentOS 6 ou si vous rencontrez des problèmes de version (G) LibC avec la version 7.x. - Pas de chance, pkgsrc hard codes /usr/pkg/sbin et /usr/pkg/bin. Il ne peut donc pas être utilisé en tant qu'utilisateur, sauf si peut-être mettre en place un environnement fakechroot. Mais je ne l'ai jamais fait et je m'attends à des problèmes de convivialité.


Veuillez commenter/répondre si vous réussissez à installer un autre gestionnaire de packages.

5
loxaxs

Oui, ça l'est. Si le logiciel est conditionné dans des dépôts. Et l'administrateur a installé le package PackageKit-command-not-found.

Voir: https://fedoraproject.org/wiki/Features/PackageKitCommandNotFound

0
msuchy

Cette réponse de goldilocks ressemble à ce que vous cherchez.

https://unix.stackexchange.com/a/61295

Ce n'est toujours pas un joli processus, mais cela semble plus facile que de construire à partir de la source.

Sinon, vous voudrez peut-être examiner les gestionnaires de packages non root comme alternative à yum.

0
Stephen Carman