Jeg vil starte wine kjørbar (versjon 2.12), men jeg får følgende feil ($ = 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 imidlertid der:

$ which wine /usr/bin/wine 

Den kjørbare filen er definitivt der og ingen død 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 delen av den kjørbare:

$ 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 imidlertid ikke liste de delte objektavhengighetene ved hjelp av 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 +++ 

Redigert for å legge til forslag av @jww : Problemet ser ut til å skje før dynamisk koblet biblioteker blir bedt om, fordi det ikke genereres ld feilsøkingsmeldinger:

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

Selv når du bare skriver ut de mulige verdiene til LD_DEBUG, feilen oppstår i stedet

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

Redigert for å legge til forslag fra @Raman Sailopal: Problemet ser ut til å ligge i den kjørbare filen, da kopiering av innholdet i /usr/bin/wine til en annen allerede opprettet fil produserer den samme feilen

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 

Hva er problemet, eller hva kan jeg gjøre for å finne ut hvilken fil eller katalog som 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

  • gjør ./vin i / usr / bin arbeid?
  • Arch er multilib-kompatibel. Multilib-depot er aktivert i /etc/pacman.conf. Alle avhengigheter av wine -pakken er installert. Imidlertid installere dem på nytt for å sikre …
  • Er /lib/ld-linux.so.2 til stede på systemet ditt? Alle symptomer peker på at det mangler, bare sjekker.
  • @ n.m. Ja, du hadde rett. Faktisk manglet hele katalogen /lib 🙂
  • Opplevelse;) når du prøver å kjøre en kjørbar og få en » -fil ikke funnet » feil mens filen åpenbart er her, den ‘ tolk mangler. file -kommandoen viser hvilken tolk som er angitt for denne kjørbare filen.

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 

Kombinert med dette:

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

Anbefaler på det sterkeste at systemet ikke har /lib/ld-linux.so.2 ELF-tolk. Det vil si at dette 64-biterssystemet ikke har noen 32-biters kompatibilitetsbiblioteker installert. Dermed er @ user1334609s svar i det vesentlige riktig.

Kommentarer

  • Er det noen som kommer til å snakke om den misvisende feilmeldingen?

Svar

OK, jeg var opptatt de siste åtte timene for å få systemet mitt i gang igjen etter at CPU-overoppheting ble slått av Ved omstart ble det tydelig at det var så skrudd sammen at selv ikke tilbakeslagskonsollen til initrd ikke kjente igjen tastaturet mitt. Det er et mysterium for meg hvordan systemet klarte å være i drift så lenge, mens jeg prøvde å implementere de utallige forslagene fra deg (tusen takk !!)

Problem ved omstart:

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 ingen tastatur fungerer etterpå 🙂

Problemet var: En oppdatering erstattet symlinken /lib -> /usr/lib med en katalog. Så det betydde at alle biblioteker og kjernemoduler, som forventes å være i /lib manglet 🙂

Så jeg gjenskape symlink og installerte basesystemet på nytt fra en live CD.

Nå som jeg har internett igjen, fant jeg også denne tråden

Jeg brukte også pakkebehandleren til muret installasjon på disken (kalt pacman) fra live-CDen for å installere alle pakkene på basegruppen ( kanskje bare kjernen, så pakke linux hadde vært nok, jeg vet ikke)

For å oppnå det, monter hovedpartisjonen til den murede installasjonen til /mnt katalogen til live CD-systemet og bruk chroot for å få pacman til å tenke /mnt er / (sett inn det murte systemets hovedpartisjon for 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: opprett en relativ symlink, så ln -s usr/lib /mnt/lib og ikke ln -s /usr/lib /mnt/lib, fordi hovedpartisjonen blir montert først under tidlig systemstart (initrd-trinn) til /new_root.Ville symlink være absolutt, ville du få ovennevnte feil under tidlig oppstart.

Kommentarer

  • Lite hint: Når jeg bruker systemrescuecd, gjentar jeg ofte bare over proc / sys / dev (for sti i proc sys dev; monter -obind / $ path / mnt / $ path; done) før du gjør chroot. Imidlertid, hvis du ‘ bruker arch install iso, er det mye lettere å bare kjøre den medfølgende arch-chroot-kjørbare siden den gjør alt for deg. Det er i arch-install-scripts-pakken hvis noen vil pikke rundt. 🙂

Svar

Du prøver å kjøre 32-biters applikasjon på et 64-biters operativsystem, så du må installere 32-biters kompatibilitetsbiblioteker (spesielt glibc) før dette kan fungere.

Kommentarer

  • Forklar hvordan løsningen løser saken og svar på spørsmålet
  • Hva Romeo sa; vil du kjøre apt-get på et arch-linux-system, i stedet for pacman? Og hvordan ville komprimeringsbiblioteker og ncurses hjelpe dem?

Svar

FYI, jeg kjørte på det samme problemet som kjørte i et alpinbasert dockerbilde. Den kjørbare filen var en 64-bit ELF, og det alpine bildet var 64-bit, og den kjørbare kjørte i en annen container. Så antagelig var de trimmede alpine bibliotekene ikke kompatible med min kjørbare. node.js Docker-hub-side notater:

Hovedadvarselen [å kjøre i den alpinbaserte beholderen] er at den bruker musl libc i stedet for glibc og venner , så det kan hende at visse programmer støter på problemer, avhengig av dybden i libc-kravene. Imidlertid har de fleste programvare ikke noe problem med dette, så denne varianten er vanligvis et veldig trygt valg. Se denne kommentaren for Hacker News for mer diskusjon om problemer som kan oppstå og noen pro / con-sammenligninger av å bruke Alpine-baserte bilder.

Min løsning var å bruke en annen (f.eks. Debian Jessie-basert) containerbilde.

Kommentarer

  • Takk for at du kobler dette opprinnelige sysadmin-problemet til » nye » verden av containere!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *