Chci spustit spustitelný soubor wine (verze 2.12), ale zobrazí se následující chyba ($ = 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 

Soubor tam však je:

$ which wine /usr/bin/wine 

Spustitelný soubor určitě existuje a žádný mrtvý symbolický odkaz:

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

Je to 32bitový 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 

Mohu získat dynamickou část spustitelného souboru:

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

Nelze však zobrazit seznam závislostí sdílených objektů pomocí ldd:

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

strace ukazuje:

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

Upraveno pro přidání návrhu od uživatele @jww : Zdá se, že k problému dochází dříve, než se dynamicky propojí knihovny jsou požadovány, protože nejsou generovány žádné ld ladicí zprávy:

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

I když se vytisknou pouze možné hodnoty LD_DEBUG, místo toho dojde k chybě

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

Upraveno pro přidání návrh @Raman Sailopal: Zdá se, že problém spočívá v spustitelném souboru, protože kopírování obsahu /usr/bin/wine do jiného již vytvořeného souboru vytváří stejná chyba

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 

V čem je problém nebo co mohu udělat, abych zjistil, který soubor nebo adresář chybí?


uname -a:

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

Komentáře

  • ano ./wine in / usr / bin work?
  • Arch je multilib schopný. Repozitář multilib je povolen v /etc/pacman.conf. Nainstalovány jsou všechny závislosti balíčku wine. Chcete-li je však znovu nainstalovat, ujistěte se, že …
  • Je ve vašem systému /lib/ld-linux.so.2? Všechny příznaky ukazují, že chybí, stačí zkontrolovat.
  • @ n.m. Ano, měl jsi pravdu. Ve skutečnosti celý adresář /lib chyběl 🙂
  • Experience;) při pokusu o spuštění spustitelného souboru a získání “ soubor nebyl nalezen “ chyba, zatímco soubor je zjevně právě tady, ‚ chybí tlumočník. Váš file příkaz ukazuje, jaký tlumočník je nastaven pro tento spustitelný soubor.

Odpověď

Toto:

$ 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 

V kombinaci s tímto:

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

Silně navrhuje že systém nemá /lib/ld-linux.so.2 tlumočník ELF. To znamená, že tento 64bitový systém nemá nainstalované žádné 32bitové knihovny kompatibility. Odpověď uživatele @ user1334609 je tedy v zásadě správná.

Komentáře

  • Bude někdo mluvit o zavádějící chybové zprávě?

Odpověď

Dobře, posledních osm hodin jsem byl zaneprázdněn, abych po vypnutí přehřátí procesoru znovu spustil svůj systém. Při restartu vyšlo najevo, že to bylo tak zkažené, že ani záložní konzole initrd už moji klávesnici nerozpoznala. Je pro mě záhadou, jak se systému podařilo zůstat tak dlouho v provozu, zatímco jsem se pokoušel implementovat nespočet návrhů z vaší strany (moc děkuji !!)

Problém při restartu:

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 

a žádná klávesnice poté nebude fungovat 🙂

Problém byl: Aktualizace nahradila symbolický odkaz /lib -> /usr/lib s adresářem. To tedy znamenalo, že chyběly všechny knihovny a moduly jádra, u nichž se očekává, že budou v /lib 🙂

Takže jsem znovu vytvořil symbolický odkaz a znovu nainstaloval základní systém z živé CD.

Nyní, když mám opět internet, jsem také našel toto vlákno

Také jsem použil správce balíčků mého zděná instalace na disk (zvaná pacman) ze živého disku CD k přeinstalování všech balíků základní skupiny ( možná jen jádro, takže balíček linux by stačil, nevím)

Chcete-li toho dosáhnout, připojte hlavní oddíl zděné instalace k /mnt adresáře živého systému CD a pomocí chroot přemýšlet pacman na /mnt je / (vložte hlavní oddíl vašeho zděného systému pro 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 

Pro záznam: vytvořte relativní symbolický odkaz, takže ln -s usr/lib /mnt/lib a ne ln -s /usr/lib /mnt/lib, protože během časného spuštění systému (fáze initrd) bude nejprve připojen hlavní oddíl do /new_root.Pokud by byl symbolický odkaz absolutní, výše uvedená chyba by se vyskytla během časného spuštění.

Komentáře

  • Malá nápověda: Při použití systemrescuecd často pouze opakuji proc / sys / dev (pro cestu v proc sys dev; do mount -obind / $ path / mnt / $ path; done) před provedením chroot. Pokud však ‚ znovu používáte instalační soubor arch, je mnohem snazší spustit poskytnutý spustitelný soubor arch-chroot, protože dělá vše za vás. Je v balíčku arch-install-scripts, pokud se někdo chce hrabat. 🙂

Odpověď

Pokoušíte se spustit 32bitovou aplikaci na 64bitovém operačním systému, takže před tím, než to bude fungovat, musíte nainstalovat 32bitové knihovny kompatibility (zejména glibc).

Komentáře

  • Upřesněte, jak vaše řešení vyřeší případ a odpovědět na otázku
  • co řekl Romeo; spustili byste apt-get na systému arch-linux místo pacmana? A jak by jim kompresní knihovny a ncurses pomohly?

Odpověď

FYI, narazil jsem na stejný problém spuštěný v alpském obrazu ukotvitelného panelu. Spustitelný soubor byl 64bitový ELF a alpský obraz byl 64bitový a spustitelný soubor fungoval v jiném kontejneru. Oříznuté alpské knihovny tedy pravděpodobně nebyly kompatibilní s mým spustitelným souborem. Poznámky node.js Docker hub :

Hlavní upozornění [k běhu v alpském kontejneru] je, že místo div používá musl libc > glibc a přátelé , takže určitý software může narazit na problémy v závislosti na hloubce jejich požadavků na libc. Většina softwaru s tím však nemá problém, takže tato varianta je obvykle velmi bezpečná volba. Více diskuse o tomto vlákně komentářů k Hacker News problémy, které by mohly nastat a některá pro / proti srovnání používání obrázků založených na alpském prostředí.

Mým řešením bylo použít jiný (např. založený na Debianu Jessie) obrázek kontejneru.

Komentáře

  • Děkujeme za připojení tohoto původně sysadmin problému k “ novému “ svět kontejnerů!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *