GNU/Linux >> Linux Esercitazione >  >> Linux

"nessun file o directory di questo tipo" si trova sui binari installati da Optware?

È da un po' che utilizzo Optware per installare i pacchetti sul mio NAS basato su ARM, le solite cose come Transmission, Samba e altri. Tuttavia, ho riscontrato problemi con la trasmissione bloccata non molto tempo dopo l'avvio. Ho cercato una soluzione per un po' e alla fine ho scoperto che il feed Optware che stavo usando non era quello che era stato impostato per il mio NAS. Ho cambiato i feed e reinstallato tutti i pacchetti, ma ora ricevo il seguente errore quando provo a eseguire qualcosa che è stato reinstallato:

$ smbd
-bash: /opt/sbin/smbd: No such file or directory
$ transmission-daemon
-bash: /opt/bin/transmission-daemon: No such file or directory
$ unrar
-bash: /opt/bin/unrar: No such file or directory

Ho controllato /opt/bin e /opt/sbin e gli eseguibili sono sicuramente lì, quindi qual è il vero problema?

$ ldd /opt/bin/transmission-daemon
/usr/bin/ldd: line 116: /opt/bin/transmission-daemon: No such file or directory

$ file /opt/bin/transmission-daemon
/opt/bin/transmission-daemon: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), stripped

$ readelf - l /opt/sbin/smbd
readelf: error while loading shared libraries: libc.so.0: cannot open shared object file: No such file or directory

$ cat /proc/$$/maps
…
40084000-4019e000 r-xp 00000000 09:01 112594 /lib/libc-2.7.so
…

Non sono sicuro di cosa significhi, ma dimostra che il file è lì, vero? O ha a che fare con le librerie condivise?

Risposta accettata:

Quando non riesci a eseguire un file che dipende da un "caricatore", l'errore che ricevi potrebbe fare riferimento al caricatore piuttosto che al file che stai eseguendo.

  • Il caricatore di un eseguibile nativo collegato dinamicamente è la parte del sistema responsabile del caricamento delle librerie dinamiche. È qualcosa come /lib/ld.so o /lib/ld-linux.so.2 , e dovrebbe essere un file eseguibile.
  • Il caricatore di uno script è il programma menzionato nella riga shebang, ad es. /bin/sh per uno script che inizia con #!/bin/sh .

Il messaggio di errore è piuttosto fuorviante in quanto non indica che il caricatore è il problema. Sfortunatamente, risolvere questo problema sarebbe difficile perché l'interfaccia del kernel ha spazio solo per segnalare un codice di errore numerico, non anche per indicare che l'errore riguarda in realtà un file diverso. Alcune shell fanno il lavoro da sole per gli script (leggendo il #! riga sullo script e rielaborando la condizione di errore), ma nessuno di quelli che ho visto tenta di fare lo stesso per i binari nativi.

ldd non funziona nemmeno sui binari perché funziona impostando alcune variabili di ambiente speciali e quindi eseguendo il programma, lasciando che il caricatore faccia il lavoro. strace non fornirebbe nemmeno informazioni significative, dal momento che non riporterebbe più di quanto riportato dal kernel e, come abbiamo visto, il kernel non può riportare tutto ciò che sa.

Qui i tuoi eseguibili reinstallati (smbd , transmission-daemon , ecc.) stanno richiedendo un caricatore che non è presente sul tuo sistema. Quindi anche il tuo nuovo feed non è adatto al tuo sistema.

Correlati:Linux – Regola la velocità della ventola tramite Fancontrol in base alla temperatura del disco rigido (Hddtemp)?

Questa situazione si verifica spesso quando si tenta di eseguire un binario per il sistema (o la famiglia di sistemi) e la superarchitettura corretti ma per la sottoarchitettura errata. Qui hai binari ELF su un sistema che si aspetta binari ELF, quindi il kernel li carica bene. Sono binari ARM in esecuzione su un processore ARM, quindi le istruzioni hanno un senso e portano il programma al punto in cui può cercare il suo caricatore. Ma è il caricatore sbagliato.

Ora sto entrando in congetture, ma sospetto che il tuo nuovo feed sia per l'ABI ARM sbagliato. L'ABI è il linguaggio comune per effettuare chiamate interprocedurali, ed in particolare per richiamare funzioni di libreria. Su alcune architetture di processori, sono possibili diverse scelte ABI ed è necessario sceglierne una e utilizzarla in modo coerente. Esistono due ARM ABI con distribuzioni Linux:il tradizionale arm-elf ABI e il più recente EABI (arm-eabi ). Non puoi combinare ABI sullo stesso sistema, quindi devi trovare una fonte di pacchetti per il tuo ABI (o reinstallare il tuo sistema per un ABI diverso).


Linux
  1. Impossibile eseguire nessun file o directory di questo tipo [fissare]

  2. Python:nessun file o directory del genere ma posso vederlo!?

  3. Fare in modo che Ls distingua gli script dai binari in output?

  4. Impossibile eseguire il comando di configurazione:"nessun file o directory di questo tipo"?

  5. Spiegare "-bash:nessun file o directory di questo tipo"?

Shopt:Not Found [Nessun file o directory di questo tipo]

Visualizza file tabulare come CSV dalla riga di comando

Nessun errore di file o directory durante l'esecuzione di un file binario

'SDL.h file o directory non trovati' durante la compilazione

Errore irreversibile:cuda.h:file o directory non presenti

conda source disattiva:bash:disattiva:nessun file o directory di questo tipo