Je souhaite lancer lexécutable wine (Version 2.12), mais jobtiens lerreur suivante ($ = shell prompt):

$ wine bash: /usr/bin/wine: No such file or directory $ /usr/bin/wine bash: /usr/bin/wine: No such file or directory $ cd /usr/bin $ ./wine bash: ./wine: No such file or directory 

Cependant, le fichier est là:

$ which wine /usr/bin/wine 

Lexécutable est définitivement là et aucun lien symbolique mort:

$ stat /usr/bin/wine File: /usr/bin/wine Size: 9712 Blocks: 24 IO Block: 4096 regular file Device: 802h/2050d Inode: 415789 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-07-13 13:53:00.000000000 +0200 Modify: 2017-07-08 03:42:45.000000000 +0200 Change: 2017-07-13 13:53:00.817346043 +0200 Birth: - 

Cest un ELF 32 bits:

$ file /usr/bin/wine /usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped 

Je peux obtenir la section dynamique de lexécutable:

$ readelf -d /usr/bin/wine Dynamic section at offset 0x1efc contains 27 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libwine.so.1] 0x00000001 (NEEDED) Shared library: [libpthread.so.0] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x0000001d (RUNPATH) Library runpath: [$ORIGIN/../lib32] 0x0000000c (INIT) 0x7c000854 0x0000000d (FINI) 0x7c000e54 [more addresses without file names] 

Cependant, je ne peux pas lister les dépendances dobjets partagés en utilisant ldd:

$ ldd /usr/bin/wine /usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory 

strace affiche:

execve("/usr/bin/wine", ["wine"], 0x7fff20dc8730 /* 66 vars */) = -1 ENOENT (No such file or directory) fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 4), ...}) = 0 write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory ) = 40 getpid() = 23783 exit_group(1) = ? +++ exited with 1 +++ 

Modifié pour ajouter une suggestion par @jww : Le problème semble se produire avant la liaison dynamique bibliothèques sont demandés, car aucun message de débogage ld nest généré:

$ LD_DEBUG=all wine bash: /usr/bin/wine: No such file or directory 

Même en nimprimant que les valeurs possibles de LD_DEBUG, lerreur se produit à la place

$ LD_DEBUG=help wine bash: /usr/bin/wine: No such file or directory 

Modifié pour ajouter suggestion de @Raman Sailopal: Le problème semble résider dans lexécutable, car la copie du contenu de /usr/bin/wine dans un autre fichier déjà créé produit la même erreur

root:bin # cp cat testcmd root:bin # testcmd --help Usage: testcmd [OPTION]... [FILE]... Concatenate FILE(s) to standard output. [rest of cat help page] root:bin # dd if=wine of=testcmd 18+1 records in 18+1 records out 9712 bytes (9.7 kB, 9.5 KiB) copied, 0.000404061 s, 24.0 MB/s root:bin # testcmd bash: /usr/bin/testcmd: No such file or directory 

Quel est le problème ou que puis-je faire pour savoir quel fichier ou répertoire est manquant?


uname -a:

Linux laptop 4.11.3-1-ARCH #1 SMP PREEMPT Sun May 28 10:40:17 CEST 2017 x86_64 GNU/Linux 

Commentaires

  • fait ./wine dans / usr / bin work?
  • Arch est compatible avec plusieurs équilibres. Le référentiel Multilib est activé dans /etc/pacman.conf. Toutes les dépendances du package wine sont installées. Cependant, les réinstaller juste pour vous assurer que …
  • Est-ce que /lib/ld-linux.so.2 est présent sur votre système? Tous les symptômes indiquent quil est manquant, il suffit de vérifier.
  • @ n.m. Oui, tu avais raison. En fait, tout le répertoire /lib manquait 🙂
  • Expérience;) lorsque vous essayez dexécuter un exécutable et dobtenir un  » fichier non trouvé  » erreur alors que le fichier est évidemment ici, il ‘ est linterpréteur manquant. Votre commande file montre quel interpréteur est défini pour cet exécutable.

Réponse

Ceci:

$ file /usr/bin/wine /usr/bin/wine: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=eaf6de433d8196e746c95d352e0258fe2b65ae24, stripped 

Combiné avec ceci:

$ ldd /usr/bin/wine /usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory 

Suggère fortement que le système ne dispose pas de l’interpréteur ELF /lib/ld-linux.so.2. Autrement dit, ce système 64 bits na aucune bibliothèque de compatibilité 32 bits installée. Ainsi, la réponse de @ user1334609 « est essentiellement correcte.

Commentaires

  • Quelquun va-t-il parler du message derreur trompeur?

Réponse

OK, jai été occupé pendant les huit dernières heures pour remettre mon système en marche après une surchauffe du processeur Au redémarrage, il est devenu évident que cétait tellement foutu que même la console de secours dinitrd ne reconnaissait plus mon clavier. Cest un mystère pour moi de savoir comment le système a réussi à rester opérationnel pendant si longtemps, alors que jessayais de mettre en œuvre les innombrables suggestions de votre part (merci beaucoup !!)

Problème au redémarrage:

Warning: /lib/modules/4.11.3-1-ARCH/modules.devname not found - ignoring ERROR: device "UUID=..." not found. Skipping fsck. ERROR: Unable to find root device "UUID=...". You are being dropped to a recovery shell Type "exit" to try and continue booting sh: can"t access tty: job control turned off 

et aucun clavier ne fonctionnait par la suite 🙂

Le problème était: Une mise à jour a remplacé le lien symbolique /lib -> /usr/lib avec un répertoire. Cela signifiait donc que toutes les bibliothèques et modules du noyau, qui devraient être dans /lib étaient manquants 🙂

Jai donc recréé le lien symbolique et réinstallé le système de base à partir de un CD live.

Maintenant que jai à nouveau Internet, jai également trouvé ce fil

Jai également utilisé le gestionnaire de paquets de mon installation sur disque en brique (appelée pacman) à partir du live CD pour réinstaller tous les packages du groupe de base ( peut-être que seul le noyau, donc le paquet linux aurait suffi, je ne sais pas)

Pour ce faire, montez la partition principale de linstallation en brique sur le répertoire /mnt du système Live CD et utilisez chroot pour faire pacman penser /mnt est / (insérez la partition principale de votre système en brique pour sdXXX)

mount /dev/sdXXX /mnt # Recreate the /lib -> usr/lib symlink ln -s usr/lib /lib # Mount essential system folders also to the respective subfolders of /mnt mount -t proc proc /mnt/proc mount -t sysfs sys /mnt/sys mount -o bind /dev /mnt/dev # Fake /mnt to be /, so that pacman installs the packages to the correct places chroot /mnt # Reinstall the Arch Linux base system pacman -Sy base 

Pour la notice: créez un lien symbolique relatif, donc ln -s usr/lib /mnt/lib et non ln -s /usr/lib /mnt/lib, car lors du démarrage précoce du système (étape initrd), la partition principale sera montée en premier à /new_root.Si le lien symbolique serait absolu, vous obtiendrez lerreur mentionnée ci-dessus lors du démarrage anticipé.

Commentaires

  • Petit indice: lorsque jutilise systemrescuecd, je répète souvent simplement sur proc / sys / dev (pour le chemin dans proc sys dev; do mount -obind / $ path / mnt / $ path; done) avant de faire le chroot. Cependant, si vous ‘ utilisez liso dinstallation arch, il est beaucoup plus facile dexécuter lexécutable arch-chroot fourni car il fait tout pour vous. Cest dans le paquet arch-install-scripts si quelquun veut fouiller. 🙂

Réponse

Vous essayez dexécuter une application 32 bits sur un système dexploitation 64 bits, donc vous devez installer des bibliothèques de compatibilité 32 bits (glibc en particulier) avant que cela puisse fonctionner.

Commentaires

  • Veuillez clarifier comment votre solution résout le cas et répondez à la question
  • Ce que Romeo a dit; vous exécuteriez apt-get sur un système arch-linux, au lieu de pacman? Et comment les bibliothèques de compression et ncurses les aideraient-ils?

Réponse

Pour info, jai rencontré le même problème en cours dexécution dans une image docker alpine. Lexécutable était un ELF 64 bits, et limage alpine était 64 bits, et lexécutable fonctionnait dans un conteneur différent. Donc, vraisemblablement, les bibliothèques alpines coupées nétaient pas compatibles avec mon exécutable. La page du hub Docker node.js indique:

La principale mise en garde [pour sexécuter dans le conteneur basé sur Alpine] est quil utilise musl libc au lieu de glibc et amis , de sorte que certains logiciels peuvent rencontrer des problèmes en fonction de la profondeur de leurs exigences en matière de libc. Cependant, la plupart des logiciels nont pas de problème avec cela, donc cette variante est généralement un choix très sûr. Voir ce fil de commentaires Hacker News pour plus de détails sur le problèmes qui pourraient survenir et quelques comparaisons pour / contre de lutilisation dimages basées sur Alpine.

Ma solution était dutiliser un autre (par exemple basé sur Debian Jessie) image du conteneur.

Commentaires

  • Merci davoir connecté ce problème dadministrateur système à lorigine au  » nouveau  » monde des conteneurs!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *