Jeg vil starte wine eksekverbar (version 2.12), men jeg får følgende fejl ($ = 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 

Filen er dog der:

$ which wine /usr/bin/wine 

Den eksekverbare er helt sikkert der og ingen døde 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: - 

Det er en 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 

Jeg kan få den dynamiske sektion af den eksekverbare fil:

$ 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] 

Jeg kan dog ikke liste de delte objektsafhængigheder ved hjælp af ldd:

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

strace viser:

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 +++ 

Redigeret for at tilføje forslag af @jww : Problemet ser ud til at ske, før det er dynamisk forbundet biblioteker anmodes om, fordi der ikke genereres ld debug-meddelelser:

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

Selv når der kun udskrives de mulige værdier på LD_DEBUG, fejlen opstår i stedet

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

Redigeret for at tilføje forslag fra @Raman Sailopal: Problemet synes at ligge i den eksekverbare, da kopiering af indholdet af /usr/bin/wine til en anden allerede oprettet fil producerer den samme fejl

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 

Hvad er problemet, eller hvad kan jeg gøre for at finde ud af, hvilken fil eller mappe der mangler?


uname -a:

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

Kommentarer

  • gør ./vin i / usr / bin arbejde?
  • Arch er multilib-kompatibel. Multilib-lager er aktiveret i /etc/pacman.conf. Alle afhængigheder af wine -pakken er installeret. Imidlertid geninstallere dem bare for at sikre …
  • Er /lib/ld-linux.so.2 til stede på dit system? Alle symptomer peger på, at det mangler, bare ved at kontrollere.
  • @ n.m. Ja, du havde ret. Faktisk manglede hele biblioteket /lib 🙂
  • Erfaring;) når du prøver at køre en eksekverbar og får en ” -fil ikke fundet ” -fejl, mens filen tydeligvis er lige her, den ‘ fortolker mangler. Din file -kommando viser, hvilken tolk der er indstillet til denne eksekverbare.

Svar

Dette:

$ 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 

Kombineret med dette:

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

foreslår stærkt at systemet ikke har /lib/ld-linux.so.2 ELF-tolk. Det vil sige, dette 64-bit-system har ingen 32-bit kompatibilitetsbiblioteker installeret. Således er @ user1334609s svar i det væsentlige korrekt.

Kommentarer

  • Vil nogen tale om den vildledende fejlmeddelelse?

Svar

OK, jeg havde travlt i de sidste otte timer for at få mit system i gang igen efter CPU-overophedning lukket ned Ved genstart blev det tydeligt, at det var så skruet op, at selv efterkonsol af initrd ikke længere genkendte mit tastatur. Det er et mysterium for mig, hvordan systemet formåede at forblive operativt så længe, mens jeg prøvede at implementere de utallige forslag fra dig (mange tak !!)

Problem ved genstart:

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 

og intet tastatur fungerer bagefter 🙂

Problemet var: En opdatering erstattede symlinket /lib -> /usr/lib med et bibliotek. Så det betød, at alle biblioteker og kernemoduler, som forventes at være i /lib manglede 🙂

Så jeg genskabte symlinket og geninstallerede basissystemet fra en live CD.

Nu hvor jeg har internet igen, fandt jeg også denne tråd

Jeg brugte også min pakkehåndtering muret installation på disken (kaldet pacman) fra live-cden for at geninstallere alle pakkerne til basegruppen ( måske kun kernen, så pakke linux ville have været nok, jeg ved det ikke)

For at opnå dette skal du montere hovedpartitionen af den murede installation til /mnt biblioteket i live CD-systemet og brug chroot til at få pacman til at tænke /mnt er / (indsæt dit murede systems hovedpartition til 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 

For ordens skyld: Opret et relativt symlink, så ln -s usr/lib /mnt/lib og ikke ln -s /usr/lib /mnt/lib, fordi hovedpartitionen under den tidlige systemstart (initrd-fase) monteres først til /new_root.Ville symlinket være absolut, ville du få den ovennævnte fejl under tidlig opstart.

Kommentarer

  • Lille tip: Når du bruger systemrescuecd, gentager jeg ofte bare over proc / sys / dev (for sti i proc sys dev; monter -obind / $ sti / mnt / $ sti; færdig) inden chroot. Men hvis du ‘ igen bruger arch install iso, er det meget nemmere at bare køre den medfølgende arch-chroot-eksekverbar fil, da den gør alt for dig. Det er i arch-install-scripts-pakken, hvis nogen vil stikke rundt. 🙂

Svar

Du forsøger at køre 32-bit applikation på et 64 bit operativsystem, så du skal installere 32-bit kompatibilitetsbiblioteker (især glibc), før dette kan fungere.

Kommentarer

  • Præciser, hvordan din løsning løser sagen og besvar spørgsmålet
  • Hvad Romeo sagde; ville du køre apt-get på et arch-linux-system i stedet for pacman? Og hvordan ville kompressionsbiblioteker og ncurses hjælpe dem?

Svar

FYI, jeg løb ind i det samme problem kørende i et alpebaseret dockerbillede. Den eksekverbare var en 64-bit ELF, og det alpine billede var 64-bit, og den eksekverbare arbejdede i en anden beholder. Så formodentlig var de trimmede alpine biblioteker ikke kompatible med min eksekverbare. node.js Docker-hub-siden bemærker:

Hovedadvarslen [til at køre i den alpine-baserede container] er, at den bruger musl libc i stedet for glibc og venner , så bestemt software kan løbe ind i problemer afhængigt af dybden af deres libc-krav. Imidlertid har den fleste software ikke noget problem med dette, så denne variant er normalt et meget sikkert valg. Se denne kommentartråd for Hacker News for mere diskussion af problemer, der kan opstå, og nogle pro / con-sammenligninger af brug af Alpine-baserede billeder.

Min løsning var at bruge en anden (f.eks. Debian Jessie-baseret) containerbillede.

Kommentarer

  • Tak fordi du forbinder dette oprindelige sysadmin-problem med ” nye ” verden af containere!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *