Existe-t-il un moyen de faire en sorte qu'APT installe les packages dans mon répertoire personnel?

42

Existe-t-il un moyen de faire en sorte qu'APT installe les packages dans mon répertoire personnel?

Je ne veux pas faire de changements à l'échelle du système.

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

Peter Mortensen
la source
Voir aussi Gestionnaires de packages non-root .
imz - Ivan Zakharyaschev Le

Réponses:

17

Dpkg ne possède pas la fonctionnalité --relocate que RPM. Cela vaut la peine de considérer combien de paquetages RPM supportent cette fonctionnalité. Fondamentalement, cela ne peut être fait.

Ce que vous pouvez 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 dans le lenny-chrootré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 que cela gâche le reste du système. Lorsque nous avons terminé, tapez simplement exit ou appuyez sur ctrl-D

David Pashley
la source
8

Linuxbrew est un autre gestionnaire de paquets non root pour Linux (basé sur le système de gestion de paquets Homebrew pour OS X) qui compile à partir de la source et conserve les fichiers binaires dans votre répertoire de base.

Citant la documentation, les fonctionnalités de Linuxbrew sont les suivantes:

  • Peut installer un logiciel dans un répertoire personnel et n'a donc pas besoin de sudo
  • Installer des logiciels non fournis par la distribution native
  • Installez les versions les plus récentes du logiciel lorsque la distribution native est ancienne
  • Utilisez le même gestionnaire de paquets pour gérer vos ordinateurs Mac et Linux.
Paolo
la source
7

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, ni aucun autre dérivé de Debian avec Multiarch.

hayalci
la source
1
Gentoo construit à partir des sources, poster semble vouloir installer via un package dans un répertoire spécifique. Ce n'est pas vraiment la même chose.
Andrew Case
1
@ AndrewCase Gentoo a aussi des paquets, je crois. Le fait qu’ils ne soient pas binaires est sans importance pour l’installation finale.
Jiggunjer
4

À titre d’ajout mineur à l’option de compilation, il existe une option intermédiaire consistant à compiler un paquet avec une option de préfixe différente au moment de la compilation (avec "checkinstall" ou peut-être avec une autre méthode). L'avantage est que le paquet apparaîtra sur des gestionnaires de paquets tels qu'aptitude ou synaptic.

En plus de cela, je pense qu'il est possible dans certains cas de télécharger le fichier .deb actuel et de forcer un préfixe différent via dpkg install, mais je pense que ce n'est pas quelque chose qui peut être fait avec n'importe quel paquetage aléatoire, mais ils doivent avoir été compilés avec certaines variables pour leur emplacement (plutôt que le préfixe explicite littéral) que vous exporteriez avant l’installation. Cependant, je ne connais rien à la procédure, google pour "dpkg instdir prefix".

le dsc
la source
1

Rootless GoboLinux peut faire exactement ce que vous demandez: un 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 de Gobo le mieux entretenu, et lorsque je l'utilisais il y a quelques années, quelques ajustements étaient nécessaires, car le script d'installation était un peu obsolète par rapport aux autres modifications apportées à Gobo.

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

éphémère
la source
1

Je récupère généralement les sources et consulte un fichier du type "INSTALL". Habituellement, il y a des instructions à faire ./configure --prefix=somedir. Ensuite, vous devez ajouter somedir/binà votre chemin.

Ian Kelling
la source
il peut être difficile d’obtenir, de compiler et de maintenir à jour les dépendances.
Paolo
C'est à l'envers. La question est de savoir comment amener les gestionnaires de paquets (qui sont préférables depuis les années 1990) à se comporter de cette manière.
Courses de légèreté avec Monica
1

Non, je ne pense pas que vous puissiez.

Le mieux que je puisse penser maintenant est d’utiliser apt-get sourceet de compiler votre paquet. Peut-être que vous pourriez en quelque sorte modifier la procédure (qui peut être plus ou moins automatisée) pour installer les packages à votre domicile.

Une autre consiste à utiliser dpkg -Xpour l'extraire sur un répertoire de votre choix.

anon
la source
0

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 ordinateur local. Décompressez simplement, puis configurez avec ./configure --prefix=$HOME/localou un autre répertoire. Vous pouvez alors makeet make installcomme d'habitude. Ceci compilera et installera ce programme ~/local/, par exemple le programme que vous exécuterez sera ~/local/bin/programmname.

Rory
la source
0

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

Maintenant, étant donné le DEB source, vous pouvez modifier le fichier Debian / rules pour que le paquet soit compilé 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'avais déjà fait par 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 l’espace et qu’il s’agit d’une solution viable, vous pouvez l’associer dchroot, voire mieux schroot, pour permettre une exécution aisée des applications installées dans l’environnement chroot.

Peter Mortensen
la source
0

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 si il trouve différentes versions dans les deux?

Le mieux que je puisse imaginer serait un environnement chrooté comme le font les utilisateurs d'applications 32 bits sur des systèmes 64 bits. C’est plus fastidieux que d’appeler debootstrap dans le chroot, mais avec quelques amusants liens symboliques , un script amusant pour l’enveloppe du shell, il pourrait faire ce que vous voulez.

Peter Mortensen
la source
0

Je travaille toujours sur le problème, mais debootstrap essentiellement ce dont vous avez besoin, et devrait fonctionner avec fakeroot. debootstrap est juste un tas de scripts shell, alors je le sépare pour voir ce qui le motive. La partie difficile consistera à désinstaller les fichiers une fois qu’ils seront installés.

Perkins
la source
Moi (et des milliers d'autres utilisateurs) encouragerais de tout coeur cela. Quelque chose qui puise dans la base de données rpm (ou une alternative alternative) déjà existante à l'échelle du système, ainsi que dans une base de données rpm fournie par l'utilisateur et installe l'utilisateur situé à l'emplacement rpms. Ce serait génial. Cela pourrait même être fusionné dans la ligne principale. Des recherches ont-elles déjà été menées à ce sujet?
Andrew Case
0

Malheureusement, je n'ai jamais entendu parler d'une distribution fournissant quelque chose comme ça (même si je suis sûr que ce serait super populaire). Vous pourrez peut-être imiter la distribution basée sur rpm cependant ... Je n'ai pas essayé cela, mais vous pourrez 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 aider:

  • --prefix
  • --relocate
Andrew Case
la source
0

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

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

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

#!/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 avec apt-get download package_name. Ensuite, je lance ./install package_name_blabla.debet décide manuellement de chaque occurrence /usrdans les fichiers décompressés, si elle doit être remplacée par $PREFIX/usrou non.

Cette décision dépend entièrement des packages installés sur le système et installés à l'aide de cette méthode. En général, par exemple, les fichiers pkg-config nécessitent cette substitution, alors que les lignes shebang #!/usr/bin/perlne le font pas. La règle générale est que le chemin résultant doit pointer vers un fichier existant.

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

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 les suivre manuellement.

De plus, APT ne connaît évidemment pas ces packages, il sera donc toujours affiché comme manquant. Mais cela a du sens - qui voudrait installer une application système qui dépend de 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 supprimer tous ces fichiers de la PREFIX.

Martin Pecka
la source