GNU/Linux >> Linux の 問題 >  >> Linux

「そのようなファイルやディレクトリはありません」は、Optwareがインストールされたバイナリにありますか?

私はしばらくの間、Optwareを使用してARMベースのNASにパッケージをインストールしてきました。Transmission、Sambaなどの通常のものです。しかし、起動して間もなくトランスミッションがハングするという問題が発生していました。しばらくの間解決策を探しましたが、最終的に、使用していたOptwareフィードがNASボックス用に設定されたものではないことがわかりました。フィードを切り替えてすべてのパッケージを再インストールしましたが、再インストールしたものを実行しようとすると、次のエラーが発生します。

$ 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

/opt/binを確認しました および/opt/sbin 実行可能ファイルは間違いなくそこにあります–それで、本当の問題は何ですか?

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

それが何を意味するのかわかりませんが、ファイルがであることを証明しています そこだよね?それとも、これは共有ライブラリと関係がありますか?

承認された回答:

「ローダー」に依存するファイルの実行に失敗すると、発生するエラーは、実行しているファイルではなくローダーを参照している可能性があります。

  • 動的にリンクされたネイティブ実行可能ファイルのローダーは、動的ライブラリのロードを担当するシステムの一部です。 /lib/ld.soのようなものです または/lib/ld-linux.so.2 、実行可能ファイルである必要があります。
  • スクリプトのローダーは、シバンの行に記載されているプログラムです。 /bin/sh #!/bin/shで始まるスクリプトの場合 。

エラーメッセージは、ローダーが問題であることを示さないという点でかなり誤解を招く可能性があります。残念ながら、カーネルインターフェイスには数値エラーコードを報告する余地しかなく、エラーが実際には別のファイルに関係していることを示す余地がないため、これを修正するのは困難です。一部のシェルは、スクリプトに対して自身で機能します(#!を読み取る スクリプトの行とエラー状態の再処理)が、ネイティブバイナリに対して同じことを試みているのを見たことがありません。

ldd は、いくつかの特別な環境変数を設定してからプログラムを実行し、ローダーに作業を任せることで機能するため、バイナリでも機能していません。 strace カーネルが報告する以上の情報を報告しないため、意味のある情報も提供しません。また、これまで見てきたように、カーネルは認識しているすべての情報を報告することはできません。

ここに、再インストールした実行可能ファイル(smbdtransmission-daemon など)が、システムに存在しないローダーを要求しています。そのため、新しいフィードもシステムに適していません。

関連:Linux –ハードディスクの温度(Hddtemp)に応じてFancontrolを介してファン速度を調整しますか?

この状況は、正しいシステム(またはシステムのファミリー)とスーパーアーキテクチャーに対してバイナリーを実行しようとしたが、サブアーキテクチャーが間違っている場合によく発生します。ここでは、ELFバイナリを期待するシステムにELFバイナリがあるため、カーネルはそれらを適切にロードします。これらはARMプロセッサ上で実行されるARMバイナリであるため、命令は意味をなし、ローダーを探すことができるポイントまでプログラムを取得します。しかし、それは間違ったローダーです。

今、私は推測し始めていますが、あなたの新しいフィードは間違ったARMABI用であると思われます。 ABIは、プロシージャ間呼び出しを行うための、特にライブラリ関数を呼び出すための共通言語です。一部のプロセッサアーキテクチャでは、いくつかの可能なABIの選択肢があり、そのうちの1つを選択して、それを一貫して使用する必要があります。 Linuxディストリビューションを備えた2つのARMABIがあります。従来のarm-elf ABI、および新しいEABI(arm-eabi )。同じシステムでABIを混在させることはできないため、ABIのパッケージのソースを見つける必要があります(または別のABI用にシステムを再インストールします)。


Linux
  1. 実行できませんそのようなファイルまたはディレクトリはありません[修正]

  2. Python –そのようなファイルやディレクトリはありませんが、私はそれを見ることができます!?

  3. Mkdir:ディレクトリを作成できません:そのようなファイルまたはディレクトリはありませんか?

  1. Lsに出力のバイナリからスクリプトを区別させますか?

  2. 構成コマンドを実行できません:「そのようなファイルまたはディレクトリはありません」?

  3. ルートとしてのイベント、Ntfsパーティション上のファイルを削除できませんか?

  1. 「-bash:そのようなファイルやディレクトリはありません」と説明していますか?

  2. Shopt:Not Found [そのようなファイルまたはディレクトリはありません]

  3. コマンド ラインから CSV などの表形式ファイルを表示する