J'ai une solution que j'ai utilisée avec succès pour installer une GRANDE collection de paquets de logiciels coopératifs sur le serveur Debian d'une école, où je n'ai aucun accès root (même pas pour installer un autre gestionnaire de paquets). Cette solution n'utilise pas 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
En général, 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écider manuellement de chaque occurrence de /usr
dans les fichiers décompressés, s'il doit être remplacé par $PREFIX/usr
ou non.
Cette décision dépend entièrement des paquets qui sont installés par le système et de ceux qui sont installés par 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 le faire. La règle générale est que le chemin résultant doit pointer vers un fichier existant.
Avec des paquets installés de cette manière, vous devez évidemment informer les autres programmes de leur existence. Cela peut être réalisé en ajoutant les valeurs correctes à LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, CMAKE_PREFIX_PATH
etc.
Cette approche comporte une mise en garde : les dépendances ne sont pas téléchargées/installées automatiquement ; vous devez en assurer le suivi manuellement.
De plus, APT ne connaît pas ces paquets, et les affichera toujours comme manquants. Mais c'est logique - qui voudrait installer une application pour l'ensemble du système qui dépend de l'installation d'un utilisateur.
Si vous souhaitez désinstaller un programme, vous pouvez lister le contenu de l'archive deb en utilisant ar p "$1" data.tar.xz | tar tJ
puis supprimez tous ces fichiers de la base de données PREFIX
.