56 votes

Installer les paquets dans le répertoire local ?

Je voudrais installer des paquets de logiciels, similaires à apt-get install <foo> mais :

  1. Sans sudo et
  2. Dans un répertoire local

Le but de cet exercice est d'isoler les constructions indépendantes dans mon intégration continue serveur.

Cela ne me dérange pas de compiler à partir des sources, si c'est ce qu'il faut, mais je préfère évidemment l'approche la plus simple possible. J'ai essayé apt-get source --compile <foo> comme indiqué aquí mais je n'arrive pas à le faire fonctionner pour des paquets comme autoconf. J'obtiens l'erreur suivante :

dpkg-checkbuilddeps: Unmet build dependencies: help2man

J'ai compilé help2man dans un répertoire local, mais je ne sais pas comment informer apt-get de cela. Une idée ?

UPDATE : J'ai trouvé une réponse qui presque travaille à https://askubuntu.com/a/350/23678 . Le problème avec chroot est qu'il nécessite sudo. Le problème avec apt-get source c'est que je ne sais pas comment résoudre les dépendances. Je dois dire, chroot regarde très attrayant. Existe-t-il une commande équivalente qui ne nécessite pas sudo ?

24voto

January Points 33673

Ce n'est, en général, pas faisable, car vous perturberiez le système de dépendances d'apt.

Il existe deux solutions :

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

    apt-get source <package>

    Il n'a pas besoin d'être root, télécharge le paquet source, le décompresse dans un répertoire du répertoire courant. Vous pouvez ensuite vous rendre dans ce répertoire, apporter des modifications à la source, configurer l'installation sur une autre cible, etc.

    La configuration du répertoire d'installation dans lequel les programmes doivent aller dépend toutefois du programme en question. De nombreux programmes utilisent le répertoire ./configure --prefix localdir pour cibler l'installation dans le répertoire local ; mais ce n'est pas toujours le cas.

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

    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 chroot pour installer ce que vous souhaitez.

17voto

AmazingMiki Points 303

En utilisant un bash Shell, et en acqué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 que "/" serait traité dans une installation normale.

C'est la commande :

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

Vous pouvez rencontrer des erreurs, telles que $HOME/var/lib/dpkg/lock est manquant. alors créez simplement tous les fichiers manquants que vous obtiendrez à partir des erreurs et ensuite l'installation devrait fonctionner sans sudo.

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

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

Une autre méthode serait d'exécuter la commande chroot avec le paramètre $HOME et ensuite d'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 au mode normal, n'oubliez pas de "quitter".

bonne chance.

4voto

Benjamin Kaiser Points 563

Si vous êtes sur un hébergeur partagé avec ssh accès mais pas de apt-get pas de racine etc. ou un système restreint similaire, ce qui suit peut fonctionner pour vous. Cela a fonctionné pour moi sur un système où uname -a a retourné quelque chose comme SMP 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)"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X