web-dev-qa-db-ja.com

ld.soルックアップが無効であるため、apt-get操作が失敗する

Apt-get操作はすべて失敗しました。これは、ld.soを呼び出すファイルが存在しているように見えるためです。これは、依存関係のインストールまたは更新にapt-getを使用できなくなったことを意味します!

Lubuntu 16.04を実行しています。

Nvidia CUDAで発生した自動更新により、これが発生し始めたと思います。先週から、CUDAとは関係のないコマンドを実行すると、この行が端末に表示されるようになりました。

ERROR: ld.so: object '/usr/lib/nvidia-375/libnvidia-ml.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

これを調べてみると、ファイル/ usr/lib/nvidia-375/libnvidia-ml.soがシステムに存在せず、代わりにlibnvidia- ml.so同じパッケージの更新用と思われるフォルダー内のファイル/ usr/lib/nvidia-382

再起動といくつかの更新を行うと、この問題はなくなると思いましたが、今日はほとんどapt-getコマンドを実行できないことに気付きました。たとえば、インストールコマンドを実行すると、上記の行が何百回も含まれる巨大なログ出力が得られ、インストールは最終的に失敗します。

これらの出力の1つをGistにコピーアンドペーストしました(この投稿に入れるには大きすぎました)。これは、Sudo apt-get install vlcを実行しようとした結果の結果でした(ただし、どのインストールでも同様に失敗します)。 https://Gist.github.com/travellingprog/00a08cff1019f7a12d36b975dff62c92

最近はCUDAも使用していないので、これは特に面倒です。私が試したものの1つは、nvidia-382をアンインストールすることでした。アンインストール自体は機能しているようで、CUDA 9も一緒に削除されたようですが、問題は解決しません。

問題は、どのパッケージまたはファイルが/ usr/lib/nvidia-375に存在しないこのファイルを要求し続けるのかわからないということです。

誰か助けてくれますか?

2017-11-01更新

このエラーが発生したようですいつでもSudoコマンドを実行すると

ldd /usr/bin/Sudoldd /usr/bin/apt-getを実行しようとしましたが、どちらもこのNvidiaファイルをリストしません。フォルダー/ etc/ld.so.conf.dを見て、cuda-9-0.conf、CUDAを削除する必要があるという事実にもかかわらず。そこで、名前をcuda-9-0.backupに変更し、Sudo ldconfigを実行しました。

これで修正されませんでしたが、Sudoコマンドごとにエラーメッセージが表示されます。

また、キャッシュを確認することにしましたが、これが問題を指しているかどうかわかりません。

# Sudo ldconfig -p | grep nvidia
ERROR: ld.so: object '/usr/lib/nvidia-375/libnvidia-ml.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
libnvidia-gtk3.so.384.81 (libc6,x86-64) => /usr/lib/libnvidia-gtk3.so.384.81
libnvidia-gtk2.so.384.81 (libc6,x86-64) => /usr/lib/libnvidia-gtk2.so.384.81
2
travellingprog

@muruの answer と@pbhjの comment のおかげで、問題は環境変数LD_PRELOADが "/ usr /に設定されていることであることがわかりましたファイル/etc/environmentのlib/nvidia-375/libnvidia-ml.so」。

CUDAを最初にセットアップしたときに、かなり前に自分でそのファイルに行を追加した可能性があります。これは私が当時抱えていた問題のハックであり、SudoレベルでLD_PRELOADを設定する必要があったと思います。

@muruが示したように、LD_PRELOAD環境変数を存在しないファイルに設定することで、エラーメッセージを簡単に再現できます。それでも、私のシェル初期化ファイルはそれを設定せず、env | grep LD_PRELOADは何も返しませんでした。

ただし、(@ pbhjのコメントのおかげで)Sudo apt-get updateを実行すると、出力に大量のエラーが表示され、Sudo env -u LD_PRELOAD apt-get updateは出力の最上部に1回しか表示されないことがわかりました。 。次に、Sudo env | grep LD_PRELOADは、Sudoコマンドに対して、実際に存在しないファイルに設定されていることを示したことがわかりました。

/etc/environmentは別として、この問題を抱えている人はファイル/etc/sudoersSudo visudoで編集する必要があります)およびフォルダー/etc/sudoers.d/内のファイルも確認する必要があります。

1
travellingprog

LD_PRELOAD環境変数をどこかに設定したようです。

$ /bin/true
$ export LD_PRELOAD=/usr/lib/nvidia-375/libnvidia-ml.so
$ /bin/true
ERROR: ld.so: object '/usr/lib/nvidia-375/libnvidia-ml.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

シェルの初期化ファイル(~/.{bashrc,profile}/etc/{bash.bashrc,profile,profile.d/*})を確認することをお勧めします。または、次のコマンドを実行します。

PS4=' ${BASH_SOURCE}:${LINENO} ' bash -lixc exit |& grep LD_PRELOAD
2
muru

試しましたか:

dpkg-reconfigure nvidia-***

これにより、必要に応じて再構成と再インストールの問題が解決する場合があります!

0
Juanvy03