Installation de packages dans le répertoire local?

38

J'aimerais installer des progiciels similaires, apt-get install <foo>mais:

  1. Sans sudoet
  2. Dans un répertoire local

Le but de cet exercice est d’isoler les versions indépendantes de mon serveur d’ intégration continue .

Cela ne me dérange pas de compiler à partir des sources, si c'est ce qui est nécessaire, mais je préférerais évidemment l'approche la plus simple possible. J'ai essayé apt-get source --compile <foo>comme mentionné ici, mais je ne peux pas le faire fonctionner pour des paquets comme autoconf. Je reçois l'erreur suivante:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Help2man est compilé dans un répertoire local, mais je ne sais pas comment en informer apt-get. Des idées?

MISE À JOUR : J'ai trouvé une réponse qui fonctionne presque à l' adresse https://askubuntu.com/a/350/23678 . Le problème, chrootc'est que cela nécessite du sudo. Le problème apt-get sourceest que je ne sais pas comment résoudre les dépendances. Je dois dire, chrootsemble très attrayant. Existe-t-il une commande équivalente qui ne nécessite pas sudo?

Gili
la source
Je suggère que ce soit un double de cette question: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…
7
@ kamil, ce n'est pas. Je ne cherche pas à installer sans accès réseau. J'essaie d'installer sans sudoet dans un répertoire non système.
Gili
4
Les gars, s'il vous plaît, ne baissez pas ma question sans expliquer pourquoi . Merci.
Gili
Si vous n'avez pas de racine sur le système, vous ne pourrez pas résoudre facilement les dépendances . C'est parfois possible, cependant; vous devez commencer par installer le logiciel chez vous, en commençant par les dépendances les plus basses, et en modifiant votre LD_PATH afin que les programmes puissent trouver leurs bibliothèques. Cependant, vous échouerez si l'un des packages nécessite une exécution de root (ou suid).
Janvier
@January, j'essaie de compiler un projet logiciel dans un système de construction automatisé. Autant que je sache, aucune de ses dépendances (nécessaires à la compilation) ne nécessite root.
Gili

Réponses:

20

En général, cela n’est pas faisable, car vous fouilleriez avec le système de dépendances d’apt.

Il y a deux solutions:

  1. Installez le paquet source, changez-le dans le répertoire source, configurez et installez le paquet indépendamment des systèmes de conditionnement manuellement dans un répertoire de votre choix.

    apt-get source <package>
    

    Cela n’a pas besoin de root, télécharge la source du paquet, le décompresse dans un répertoire du répertoire en cours. Vous pouvez ensuite accéder à ce répertoire, apporter des modifications à la source, configurer l'installation sur une autre cible, etc.

    La configuration du répertoire d’installation auquel les programmes doivent appartenir dépend toutefois du programme en question. De nombreux programmes utilisent le ./configure --prefix localdirpour cibler l'installation sur localdir; mais ce n'est de loin pas toujours le cas.

  2. Créez un environnement chroot dans lequel vous installerez les packages:

    debootstrap precise myfancyinstall
    

    Vous avez maintenant créé une installation factice dans le répertoire myfancyinstall /

    chroot myfancyinstall
    

    Vous pouvez utiliser apt-get install dans la cage de chroot pour installer ce que vous voulez.

janvier
la source
Cela semble prometteur. Utiliser apt-get sourcesans --compilesemble supprimer l'avertissement concernant les dépendances non résolues (me permettant de les résoudre moi-même)
Gili
Y a-t-il un moyen d'obtenir des paquets sans source de cette façon aussi?
soandos
La solution (2) fonctionnera quand même. Sinon, vous êtes seul: il y a peut-être une autre façon d'installer le paquet. Ou télécharger le fichier .deb et décompresser avec ar: ar vx mypackage.deb. Ensuite, analysez le contenu du paquet et découvrez comment l’installer manuellement.
Janvier
14

En utilisant un shell bash et en récupérant le fichier "package.deb" (en supposant que le nom du paquet est "package"), vous pouvez exécuter la commande suivante pour accomplir ce que vous voulez - installer le paquet de sorte que votre répertoire personnel soit traité de la même manière "/ "serait traité dans une installation normale.

C'est la commande:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Vous pourriez être confronté à des erreurs, telles que $ HOME / var / lib / dpkg / lock est manquant; il vous suffit donc de créer tous les fichiers manquants que vous obtiendrez des erreurs. L'installation devrait alors fonctionner sans sudo.

Notez que si "apt-get download" ne fonctionne pas, vous pouvez essayer "apt download" ou "apitutde download package".

si aucune des méthodes ne fonctionne, vous pouvez simplement télécharger le package manuellement à partir de http://packages.ubuntu.com/

Une autre méthode consisterait à exécuter la commande chroot avec le paramètre $ HOME, puis à l’installer de la même manière que ci-dessus, mais sans --root = $ HOME. cette commande vous amènerait dans un shell où "/" est votre $ HOME actuel. pour revenir en mode normal, n'oubliez pas de "quitter"

bonne chance.

utilisateur172681
la source
Après avoir créé les fichiers manquants dont dpkg se plaint, il commence tout juste à commettre une erreur de segmentation.
Matt Chambers
0

Si vous êtes sur un hébergeur partagé avec un sshaccès mais pas de apt-getracine, etc. ou un système similaire restreint, ce qui suit peut vous convenir. Cela a fonctionné pour moi sur un système où uname -aest retourné quelque chose commeSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
Iolsmit
la source