Saya ingin meluncurkan wine
executable (Versi 2.12), tetapi saya mendapatkan kesalahan berikut ( $
= 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
Namun, file itu ada di sana:
$ which wine
/usr/bin/wine
Eksekusi pasti ada dan tidak ada symlink mati:
$ 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: -
Ini adalah ELF 32-bit:
$ 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
Saya bisa mendapatkan bagian dinamis yang dapat dieksekusi:
$ 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]
Namun, saya tidak bisa daftar dependensi objek bersama menggunakan ldd
:
$ ldd /usr/bin/wine
/usr/bin/ldd: line 117: /usr/bin/wine: No such file or directory
strace
menunjukkan:
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 +++
Diedit untuk menambahkan saran oleh @jww : Masalahnya tampaknya terjadi sebelum pustaka yang terhubung secara dinamis diminta, karena tidak ada ld
pesan debug yang dihasilkan:
$ LD_DEBUG=all wine
bash: /usr/bin/wine: No such file or directory
Bahkan ketika hanya mencetak nilai yang mungkin LD_DEBUG
, kesalahan terjadi sebagai gantinya
$ LD_DEBUG=help wine
bash: /usr/bin/wine: No such file or directory
Diedit untuk menambahkan saran dari @Raman Sailopal: Masalahnya tampaknya terletak di dalam executable, karena menyalin konten /usr/bin/wine
ke file lain yang sudah dibuat menghasilkan kesalahan yang sama
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
Apa masalahnya atau apa yang bisa saya lakukan untuk mencari tahu file atau direktori mana yang hilang?
uname -a
:
Linux laptop 4.11.3-1-ARCH #1 SMP PREEMPT Sun May 28 10:40:17 CEST 2017 x86_64 GNU/Linux
sumber
/etc/pacman.conf
. Semua dependensiwine
paket diinstal. Namun, instal ulang mereka hanya untuk memastikan .../lib/ld-linux.so.2
ada di sistem Anda? Semua gejala menunjukkan itu hilang, hanya memeriksa./lib
tidak ada :-)file
Perintah Anda menunjukkan juru bahasa apa yang diatur untuk dieksekusi ini.Jawaban:
Ini:
Dikombinasikan dengan ini:
Sangat menyarankan bahwa sistem tidak memiliki
/lib/ld-linux.so.2
juru ELF. Yaitu, sistem 64-bit ini tidak memiliki pustaka kompatibilitas 32-bit yang diinstal. Dengan demikian, jawaban @ user1334609 pada dasarnya benar.sumber
OK, saya sibuk selama delapan jam terakhir untuk mengaktifkan dan menjalankan sistem saya lagi setelah CPU terlalu panas dimatikan. Saat reboot, menjadi jelas bahwa itu sangat kacau sehingga bahkan konsol in -rd kembali tidak mengenali keyboard saya lagi. Ini adalah misteri bagi saya bagaimana sistem berhasil tetap beroperasi begitu lama, sementara saya mencoba menerapkan saran yang tak terhitung jumlahnya oleh Anda (terima kasih banyak !!)
Masalah saat reboot:
dan tidak ada keyboard yang berfungsi setelahnya :-)
Masalahnya adalah: Pembaruan menggantikan symlink
/lib -> /usr/lib
dengan direktori. Jadi itu berarti semua pustaka dan modul kernel, yang diharapkan ada/lib
tidak ada :-)Jadi saya membuat ulang symlink dan menginstal ulang sistem basis dari CD live.
Sekarang saya memiliki internet lagi, saya juga menemukan utas ini
Saya juga menggunakan manajer paket instalasi di-disk saya yang terbuat dari batu bata (dipanggil
pacman
) dari live CD untuk menginstal ulang semua paket dari kelompok dasar (mungkin hanya kernel, jadi paketlinux
sudah cukup, saya tidak tahu)Untuk mencapai itu, pasang partisi utama dari instalasi bricked ke
/mnt
direktori sistem live CD dan gunakanchroot
untuk membuatpacman
think/mnt
is/
(masukkan partisi utama bricked system Anda untuksdXXX
)Sebagai catatan: buat symlink relatif, jadi
ln -s usr/lib /mnt/lib
dan tidakln -s /usr/lib /mnt/lib
, karena selama boot sistem awal (tahap initrd) partisi utama akan di-mount terlebih dahulu/new_root
. Apakah symlink menjadi absolut, Anda akan mendapatkan kesalahan yang disebutkan di atas saat boot awal.sumber
Anda mencoba menjalankan aplikasi 32-bit pada sistem operasi 64 bit, jadi Anda perlu menginstal pustaka kompatibilitas 32-bit (khususnya glibc) sebelum ini dapat berfungsi.
sumber
FYI, saya mengalami masalah yang sama ini berjalan pada gambar buruh pelabuhan berbasis alpine. Eksekusi adalah ELF 64-bit, dan gambar alpine adalah 64-bit, dan executable bekerja dalam wadah yang berbeda. Jadi mungkin pustaka alpine yang dipangkas tidak kompatibel dengan executable saya. The Node.js Docker Halaman hub catatan:
Solusi saya adalah menggunakan gambar kontainer yang berbeda (misalnya berbasis Debian Jessie).
sumber