Il y a un exécutable que je veux installer sur un ordinateur que je ne peux pas recompiler qui n'a pas été construit en tant que package, et je veux télécharger les bibliothèques dont il a besoin pour les exécuter.
Ci - dessous une partie de la sortie de l' exécution ldd
sur elle
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
Existe-t-il un outil qui peut utiliser ces informations pour sélectionner les packages à télécharger ou mieux extraire uniquement les bibliothèques répertoriées et leurs dépendances, afin de minimiser l'utilisation du disque? Le système fonctionne sur une machine virtuelle sans tête et le programme sera affiché via VNC.
Bien que je soupçonne qu'un bureau graphique complet fournira la plupart des bibliothèques nécessaires, je veux télécharger uniquement les bibliothèques requises, leurs dépendances et juste assez de package X Windows pour le prendre en charge.
la source
Réponses:
Vous n'avez pas dit quel système d'exploitation vous utilisez donc je vais supposer Linux et j'utiliserai Debian comme exemple. Pour autant que je sache, la réponse rapide à votre question est non. Cela pourrait cependant être une solution de contournement utile:
Cela analysera la
ldd
sortie puis s'exécuteraapt-cache
(remplacez-la par l'équivalent pour votre système d'exploitation) pour rechercher dans les référentiels les packages dont le nom et la description contiennent la première partie du nom de la bibliothèque renvoyée parldd
.Cela ne les trouvera pas tous et donnera trop de résultats pour certains (comme
libc
) mais cela pourrait être utile.@FaheemMitha a souligné que cela
apt-file
pourrait être une meilleure façon. Par exemple:Cela renverra une liste de noms de packages qui fournissent les bibliothèques liées.
la source
apt-file search
sur le fichier réel sur le côté droit de la flèche pourrait être plus efficace.apt-get install
tous et tous ceux qui sont déjà installés seront ignorés.La réponse de @ terdon est excellente mais il est encore plus facile de le faire en utilisant ce
dpkg-query
qui contrairement àapt-file
est installé par défaut sur les systèmes Debian.Cela produit une liste de packages.
la source
Votre meilleur pari est de trouver un package qui supporte réellement votre distribution. Mais si cela ne fonctionne pas pour vous, je ne connais qu'une autre façon.
Exécutez ldd comme vous l'avez fait, puis installez manuellement ces dépendances.
Par exemple
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Pour moi, cela signifierait installer
apt-get install libpango:i386
et prier pour que la version instable de Debian soit suffisamment bonne.Vous auriez besoin de passer par chaque ligne de ldd, Google, de regarder dans vos référentiels disponibles et d'avoir de la chance. Installez-les ensuite un par un. Jusqu'à ce que le programme s'exécute réellement. ldd ne fonctionnera cependant que pour les programmes "simples". Les programmes qui appellent des plugins ou qui exécutent du code arbitraire sont une toute autre affaire. Pour ceux que vous devrez exécuter à partir de la console et corriger les plantages / erreurs à mesure qu'ils se produisent.
Cela dit, un exécutable binaire uniquement est horriblement difficile à maintenir. Vous voudrez peut-être envisager d'utiliser autre chose. Si votre distribution est un peu en avance ou un peu en arrière du système qui a construit cet exécutable, vous ne pourrez peut-être jamais le faire fonctionner.
la source