3 votes

Sur Ubuntu, obtenez : « -bash: ./flume Aucun fichier ou dossier de ce type » MAIS flume est là et exécutable. Le même binaire fonctionne sur RHEL.

Cela est déjà posté dans Serverfault - et serait peut-être plus adapté là-bas. Légèrement retravaillé à partir de la publication d'origine.

Nous avons un produit construit sur CentOS 4 Linux 32 bits qui s'exécute sans modification sur des systèmes CentOS/RHEL 4 et 5 en 32 et 64 bits ainsi que SLES 10. Il s'exécute également sans modification sur SLES 9 64 bits. [SLES 9 32 bits nécessite une libstdc++ différente.]

Le nom de l'exécutable binaire principal est 'flume'

Hier, nous avons essayé de le mettre sur Ubuntu 10 64 bits et, même si le fichier est là et de la bonne taille, nous obtenons :

-bash: ./flume: Aucun fichier ou dossier de ce type

'file flume' montre qu'il s'agit d'un ELF 32 bits (je ne me souviens pas de la sortie exacte et le système est sur un réseau isolé)

Si placé dans /usr/local/bin, alors 'which flume' retourne: /usr/local/bin/flume

Le fichier est marqué comme exécutable (j'ai fait 'chmod +x flume') et lsattr ne montre aucun problème avec les attributs.

Je n'ai pas encore pu essayer 'ldd flume'. Je n'ai pas non plus essayé 'strace flume'. Actuellement, j'ai une panne de climatisation. [Cela a été ce genre de semaine!]

Je soupçonne maintenant qu'une bibliothèque manque.

Ceci est un message profondément non utile et que je n'ai jamais vu auparavant.

Est-ce spécifique à Ubuntu ou peut-être juste à cette installation.

Nous avons abandonné et sommes passés à un système RHEL 4 et tout fonctionne parfaitement. Mais j'aimerais vraiment savoir ce qui cause cela.

3voto

kubanczyk Points 13302

[copié depuis Gilles' réponse sur Server Fault]

Vous pouvez obtenir ce message si flume existe mais que son "chargeur" n'existe pas, où

  • le chargeur d'un exécutable natif est son chargeur dynamique, par exemple /lib/ld-linux.so.2;
  • le chargeur d'un script est le programme mentionné sur la ligne shebang, par exemple /bin/sh si le script commence par #!/bin/sh.

Dans votre cas, il semble que vous n'ayez pas installé le chargeur dynamique 32 bits sur le système Ubuntu 64 bits. Cela se trouve dans le paquet libc6-i386.

strings ./flume | head -n 1 affichera le chemin du chargeur dynamique dont flume a besoin. Il s'agit de l'un de ces rares cas où strace ./flume est complètement inutile.

Je considère que cette situation est le message d'erreur le plus trompeur de Unix. Malheureusement, le corriger serait difficile : le noyau ne peut signaler qu'un code d'erreur numérique à l'appel du programme, donc il n'y a de la place que pour "command not found" et non pour le nom du chargeur recherché.

1voto

netic Points 582

J'ai eu quelque chose de similaire, en fin de compte c'était dû au fait que libstdc++5 a été supprimé d'ubuntu 10.04 et 9.10. Je ne sais pas pourquoi l'erreur que j'ai obtenue n'était pas ne peut pas trouver libstdc++, mais quand je l'ai installé (à partir de debian unstable) l'erreur a disparu.

1voto

philipk Points 576

J'ai eu un problème similaire avec les EXE sur Ubuntu 12.04 64 bits.

La solution pour moi a été d'installer LSB sur le système cible :

sudo apt-get install lsb

Les programmes qui ne fonctionnaient pas tout à coup fonctionnaient maintenant. La partie sur l'utilisation

strings EXE-NOT-WORKING | head -1

a fourni la clé. Le chargeur LSB identifié dans le EXE-NOT-WORKING était une version supérieure aux versions par défaut apparaissant pour les autres fichiers EXE qui fonctionnaient.

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