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?
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:
Utilisation yum search
.
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
Ç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
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 manquantVous pouvez éventuellement utiliser -v
: verbeux
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 .
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=
conda install gcc
conda install zlib
conda install make
conda install cmake
conda install git
conda install -c conda-forge fish
conda install -c ActivisionGameScience zsh
conda install -c conda-forge tmux
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:
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é.
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).
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)
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.
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
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.