web-dev-qa-db-fra.com

Existe-t-il un moyen d'obtenir APT pour installer des packages dans mon répertoire personnel?

Existe-t-il un moyen d'obtenir APT pour installer des packages dans mon répertoire personnel?

Je ne veux pas apporter de modifications à l'échelle du système.

Sinon, existe-t-il des gestionnaires de packages Linux basés sur le répertoire personnel?

42
Joel McCracken

Dpkg n'a pas la fonctionnalité --relocate de RPM. Cela vaut la peine de considérer le nombre de packages RPM qui prennent en charge cette fonctionnalité. Fondamentalement, cela ne peut pas être fait.

Ce que vous pourriez faire, c'est utiliser un chroot si vous voulez tester quelque chose avant de l'installer globalement sur le système. Pour ce faire, vous devez pouvoir accéder à root. La première chose à faire est de créer un chroot de base:

# debootstrap lenny lenny-chroot

Cela crée un chroot Lenny à l'intérieur du lenny-chroot répertoire.

Maintenant, nous pouvons entrer dans le chroot:

# chroot lenny-chroot

Maintenant, nous pouvons faire ce que nous voulons et installer quoi que ce soit sans gâcher le reste du système. Lorsque nous avons terminé, tapez simplement exit ou appuyez sur ctrl-D

17
David Pashley

Linuxbrew est un autre gestionnaire de packages non root pour Linux (basé sur le système de gestion de packages Homebrew populaire pour OS X) qui compile à partir des sources et conserve les binaires dans votre répertoire personnel.

Citant les documents, les fonctionnalités de Linuxbrew sont:

  • Peut installer des logiciels dans un répertoire personnel et ne nécessite donc pas Sudo
  • Installer un logiciel non fourni par la distribution native
  • Installer des versions à jour du logiciel lorsque la distribution native est ancienne
  • Utilisez le même gestionnaire de packages pour gérer à la fois vos machines Mac et Linux
8
Tim Smith

Le préfixe Gentoo fait exactement ce que vous voulez.

Il installe tous les packages dans un répertoire spécifié. Aucun accès root requis. Si vous voulez vous en débarrasser, supprimez simplement le répertoire de base.

PS: Cela ne fonctionne pas sur Ubuntu> = 11.04, ou tout autre dérivé Debian avec Multiarch.

7
hayalci

Tout comme un ajout mineur à l'option de compilation, il existe l'option à mi-chemin de la compilation dans un package avec une option de préfixe différente au moment de la compilation (avec "checkinstall" ou peut-être une autre méthode). L'avantage est que le package apparaîtra sur les gestionnaires de packages tels que aptitude ou synaptic.

En plus de cela, je pense qu'il peut être possible dans certains cas de télécharger le fichier .deb réel et de forcer un préfixe différent via l'installation de dpkg, mais je pense que ce n'est pas quelque chose qui peut être fait avec un paquet aléatoire, mais ils doivent avoir été compilés avec une variable pour leur emplacement (plutôt que le préfixe explicite littéral) que vous exporteriez avant l'installation. Je ne sais rien de la procédure, google pour "préfixe instdir dpkg".

4
the dsc

Vous pouvez utiliser fakechroot - jetez un œil à la démo sur leur site Web.

2
niutech

Non, je ne pense pas que vous puissiez.

Le mieux que je puisse penser en ce moment est d'utiliser apt-get source et compilez votre paquet. Peut-être pourriez-vous en quelque sorte modifier la procédure (qui peut être plus ou moins automatisée) pour installer les packages dans votre maison.

Un autre consiste à utiliser dpkg -X pour l'extraire dans un répertoire de votre choix.

1
ynimous

GoboLinux sans racine peut faire exactement ce que vous demandez: gestionnaire de paquets, sans privilèges élevés, dans votre propre répertoire personnel. J'espère que vous savez ce que vous faites; rootless n'est pas le mode d'installation le plus bien entretenu de Gobo, et quand je l'utilisais il y a quelques années, il nécessitait quelques ajustements car le script d'installation était un peu dépassé par rapport aux autres changements de Gobo.

Il y a aussi klik qui reconditionne pas mal de .debs, peut installer des packages dans votre répertoire personnel et ne nécessite aucun privilège root pour fonctionner ... mais la configuration initiale nécessite root.

1
ephemient

J'obtiens habituellement les sources et vérifie un fichier comme "INSTALLER". Il y a généralement des instructions pour faire ./configure --prefix=somedir. Ensuite, vous devez ajouter somedir/bin sur votre chemin.

1
Ian Kelling

J'ai une solution que j'ai utilisée avec succès pour installer une GRANDE collection de packages logiciels coopérants sur un serveur Debian de l'école, où je n'ai aucun accès root du tout (pas même pour installer un autre gestionnaire de packages). Il n'utilise ni deboostrap ni aucun gestionnaire de paquets.

La méthode est en partie manuelle, mais j'ai fait de mon mieux pour la rendre pratique.

Il utilise ce script que j'ai appelé install (n'oubliez pas de chmod +x il):

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

Donc, d'habitude, je télécharge d'abord un fichier deb en utilisant apt-get download package_name. Ensuite, je lance ./install package_name_blabla.deb, et décidez manuellement de chaque occurrence de /usr dans les fichiers décompressés, s'il doit être remplacé par $PREFIX/usr ou pas.

Cette décision dépend entièrement des packages installés par le système et de ceux qui sont installés à l'aide de cette méthode. Habituellement, par exemple les fichiers pkg-config ont besoin de cette substitution, alors que les lignes Shebang comme #!/usr/bin/Perl ne pas. La règle générale est que le chemin résultant doit pointer vers un fichier existant.

Avec les packages installés de cette façon, vous devez évidemment en parler aux autres programmes. Cela peut être accompli en ajoutant les valeurs correctes à LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATH etc.

Il y a une mise en garde dans cette approche, que les dépendances ne sont pas téléchargées/installées automatiquement; vous devez en faire le suivi manuellement.

Aussi APT ne sait évidemment pas à propos de ces packages, donc il les affichera toujours comme manquants. Mais cela a du sens - qui voudrait installer une application à l'échelle du système qui dépend d'un l'installation de l'utilisateur.

Si vous souhaitez désinstaller un programme, vous pouvez répertorier le contenu de l'archive deb à l'aide de ar p "$1" data.tar.xz | tar tJ, puis supprimez tous ces fichiers du PREFIX.

0
Martin Pecka

J'ai du mal à imaginer comment cela fonctionnerait avec les référentiels officiels d'une distribution. Comment devrait-il résoudre les dépendances? Du système ou de vos répertoires personnels? Et s'il trouve des versions différentes dans les deux?

Le mieux que je puisse penser serait un environnement chroot comme les gens le font pour les applications 32 bits sur les systèmes 64 bits. C'est plus de frais généraux que vous appelleriez debootstrap dans le chroot, mais avec un peu symlinking , amusant script de wrapper Shell, il pourrait faire ce que vous voulez.

0
kbyrd

Il y a très peu de cas où vous auriez besoin d'installer des packages dans votre dossier personnel.

Cependant, vous pouvez compiler et installer des logiciels sur votre machine locale. Décompressez simplement, puis configurez avec ./configure --prefix=$HOME/local ou un autre répertoire. Vous pouvez alors make et make install comme d'habitude. Cela compilera et installera ce programme dans ~/local/, par exemple le programme que vous exécutez sera dans ~/local/bin/programmname.

0
Rory

Je travaille toujours sur le problème, mais debootstrap essentiellement ce dont vous avez besoin et devrait fonctionner avec fakeroot. debootstrap n'est qu'un tas de scripts Shell, donc je le démonte pour voir ce qui le fait fonctionner. La partie difficile consistera à désinstaller les fichiers une fois installés.

0
Perkins

Malheureusement, je n'ai entendu parler d'aucune distribution fournissant quelque chose comme ça (même si je suis sûr que ce serait super populaire). Vous pouvez peut-être imiter la distribution basée sur rpm ... Je n'ai pas essayé cela, mais vous pouvez peut-être créer une base de données rpm basée sur l'utilisateur, puis installer des rpm dans la base de données utilisateur.

Essayez de configurer une nouvelle distribution basée sur l'utilisateur avec:

rpm --initdb --dbpath DIRECTORY

Ensuite, plusieurs options peuvent vous aider:

  • --prefix
  • --relocate
0
Andrew Case

D'après ma propre expérience, il n'y a pas de moyen facile d'utiliser les packages DEB existants pour installer dans un autre répertoire qui n'est pas un environnement chroot . Les outils d'installation Debian/Ubuntu dpkg / aptitude / dselect nécessitent tous les privilèges root pour fonctionner correctement.

Maintenant, étant donné le DEB source, vous pouvez modifier le fichier Debian/rules pour que le paquet soit construit et installé dans une arborescence de répertoires différente, mais vous n'utilisez pas les paquets binaires déjà disponibles.

Comme d'autres l'ont mentionné, vous pouvez utiliser debootstrap et créer facilement un environnement chroot, ce que j'ai fait dans le passé pour avoir un environnement 32 bits sur un hôte 64 bits, mais cela nécessite l'installation d'un chroot avec au moins les packages de base dupliqués. Si vous avez de l'espace et que c'est une solution viable, vous pouvez le coupler avec dchroot, ou mieux encore schroot, pour permettre une exécution facile des applications installées dans l'environnement chroot.

0
Jeremy Bouse