Ich möchte die ausführbare Datei wine
(Version 2.12) starten, erhalte jedoch den folgenden Fehler ($
= Shell-Eingabeaufforderung):
$ 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
Die Datei befindet sich jedoch dort:
$ which wine /usr/bin/wine
Die ausführbare Datei ist definitiv vorhanden und kein toter Symlink:
$ 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: -
Es handelt sich um eine 32-Bit-ELF:
$ 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
Ich kann den dynamischen Abschnitt der ausführbaren Datei abrufen:
$ 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]
Ich kann die Abhängigkeiten von gemeinsam genutzten Objekten jedoch nicht mit :
$ ldd /usr/bin/wine /usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory
strace
zeigt:
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 +++
Bearbeitet, um einen Vorschlag von @jww hinzuzufügen : Das Problem scheint vor der dynamischen Verknüpfung aufzutreten Bibliotheken werden angefordert, da keine ld
Debug-Meldungen generiert werden:
$ LD_DEBUG=all wine bash: /usr/bin/wine: No such file or directory
Auch wenn nur die möglichen Werte von LD_DEBUG
, der Fehler tritt stattdessen auf
$ LD_DEBUG=help wine bash: /usr/bin/wine: No such file or directory
Zum Hinzufügen bearbeitet Vorschlag von @Raman Sailopal: Das Problem scheint in der ausführbaren Datei zu liegen, da das Kopieren des Inhalts von /usr/bin/wine
in eine andere bereits erstellte Datei erzeugt wird der gleiche Fehler
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
Was ist das Problem oder was kann ich tun, um herauszufinden, welche Datei oder welches Verzeichnis fehlt?
uname -a
:
Linux laptop 4.11.3-1-ARCH #1 SMP PREEMPT Sun May 28 10:40:17 CEST 2017 x86_64 GNU/Linux
Kommentare
- ./wine in / usr / bin work?
- Arch ist Multilib-fähig. Das Multilib-Repository ist in
/etc/pacman.conf
aktiviert. Alle Abhängigkeiten deswine
-Pakets werden installiert. Installieren Sie sie jedoch erneut, um sicherzustellen, dass … -
/lib/ld-linux.so.2
auf Ihrem System vorhanden ist? Alle Symptome deuten darauf hin, dass es fehlt, nur überprüfen. - @ n.m. Ja, du hattest recht. Tatsächlich fehlte das gesamte Verzeichnis
/lib
🙂 - Erfahrung;), wenn Sie versuchen, eine ausführbare Datei auszuführen und eine Datei nicht gefunden “ Fehler, während die Datei offensichtlich hier ist, ‚ fehlt der Interpreter. Ihr Befehl
file
zeigt an, welcher Interpreter für diese ausführbare Datei festgelegt ist.
Antwort
Dies:
$ 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
In Kombination damit:
$ ldd /usr/bin/wine /usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory
Dies wird dringend empfohlen dass das System nicht über den ELF-Interpreter /lib/ld-linux.so.2
verfügt. Das heißt, auf diesem 64-Bit-System sind keine 32-Bit-Kompatibilitätsbibliotheken installiert. Daher ist die Antwort von @ user1334609 im Wesentlichen korrekt.
Kommentare
- Wird jemand über die irreführende Fehlermeldung sprechen?
Antwort
OK, ich war die letzten acht Stunden damit beschäftigt, mein System nach dem Herunterfahren der CPU-Überhitzung wieder zum Laufen zu bringen Beim Neustart stellte sich heraus, dass es so durcheinander war, dass selbst die Fallback-Konsole von initrd meine Tastatur nicht mehr erkannte. Es ist mir ein Rätsel, wie das System so lange betriebsbereit blieb, während ich versuchte, die unzähligen Vorschläge von Ihnen umzusetzen (vielen Dank !!).
Problem beim Neustart:
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
und keine Tastatur, die danach funktioniert 🙂
Das Problem war: Ein Update ersetzte den Symlink /lib -> /usr/lib
mit einem Verzeichnis. Das bedeutete also, dass alle Bibliotheken und Kernelmodule, von denen erwartet wird, dass sie sich in /lib
befinden, fehlten 🙂
Also habe ich den Symlink neu erstellt und das Basissystem von neu installiert eine Live-CD.
Jetzt, wo ich wieder Internet habe, habe ich auch diesen Thread gefunden
Ich habe auch den Paketmanager von my verwendet Installation auf der Festplatte (pacman
) von der Live-CD gemauert, um alle Pakete der Basisgruppe neu zu installieren ( Vielleicht nur der Kernel, also hätte das Paket linux
gereicht, ich weiß nicht)
Mounten Sie dazu die Hauptpartition der gemauerten Installation auf das Verzeichnis /mnt
des Live-CD-Systems und verwenden Sie chroot
, um pacman
zum Nachdenken /mnt
ist /
(fügen Sie die Hauptpartition Ihres gemauerten Systems für sdXXX
)
ein
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
Für den Datensatz: Erstellen Sie einen relativen Symlink, also ln -s usr/lib /mnt/lib
und nicht ln -s /usr/lib /mnt/lib
, da während des frühen Systemstarts (Initrd-Phase) die Hauptpartition zuerst gemountet wird zu /new_root
.Wäre der Symlink absolut, würden Sie den oben genannten Fehler beim frühen Start erhalten.
Kommentare
- Kleiner Hinweis: Bei Verwendung von systemrescuecd iteriere ich oft nur über proc / sys / dev (für den Pfad in proc sys dev; do mount -obind / $ path / mnt / $ path; done) vor dem Chroot. Wenn Sie jedoch ‚ die Arch-Installations-ISO verwenden, ist es viel einfacher, die bereitgestellte ausführbare Arch-Chroot-Datei auszuführen, da sie alles für Sie erledigt. Es ist im Paket arch-install-scripts enthalten, wenn jemand herumstöbern möchte. 🙂
Antwort
Sie versuchen also, eine 32-Bit-Anwendung auf einem 64-Bit-Betriebssystem auszuführen Sie müssen 32-Bit-Kompatibilitätsbibliotheken (insbesondere glibc) installieren, bevor dies funktionieren kann.
Kommentare
- Bitte klären Sie, wie Ihre Lösung den Fall löst und beantworte die Frage
- Was Romeo gesagt hat; Sie würden apt-get auf einem Arch-Linux-System anstelle von Pacman ausführen? Und wie würden Komprimierungsbibliotheken und ncurses ihnen helfen?
Antwort
Zu Ihrer Information, ich bin auf dasselbe Problem gestoßen in einem alpinen Docker-Bild. Die ausführbare Datei war eine 64-Bit-ELF, und das alpine Image war 64-Bit, und die ausführbare Datei arbeitete in einem anderen Container. Vermutlich waren die zugeschnittenen alpinen Bibliotheken also nicht mit meiner ausführbaren Datei kompatibel. Die node.js Docker-Hub-Seite enthält folgende Hinweise:
Die wichtigste Einschränkung [zum Ausführen im alpinen Container] verwendet musl libc anstelle von glibc und Freunde , sodass bestimmte Software abhängig von der Tiefe ihrer libc-Anforderungen auf Probleme stoßen kann. Die meisten Programme haben jedoch kein Problem damit, daher ist diese Variante normalerweise eine sehr sichere Wahl. Weitere Informationen zu diesem Thema finden Sie unter in diesem Hacker News-Kommentarthread Probleme, die auftreten könnten, und einige Pro / Contra-Vergleiche bei der Verwendung von Bildern auf Alpenbasis.
Meine Lösung bestand darin, ein anderes (z. B. auf Debian Jessie basierendes) zu verwenden. Container-Image.
Kommentare
- Vielen Dank, dass Sie dieses ursprüngliche Systemadministrationsproblem mit dem “ new “ Welt der Container!