概要
centos7→centos8にお引越した後、特定のバイナリファイルで
-bash: ./hogehoge: そのようなファイルやディレクトリはありません
というエラーが出た。
こちらの解決にそこそこの時間を費やしたので、戒めのために解決策を記載する。
結論
hogehogeが32bit用バイナリファイルなのに、64bitのOSで実行しようとしていたのでエラーとなった。
解消手順
ファイルが本当にあるか確認する
ファイルが無いと同一のエラーが出るので、まずは本当にファイルがあるか、見れる権限を持っているかを確認する。
# ls -al /home/hoge/hogehoge
-rwxr-xr-x 1 hoge hoge 64162 12月 2 17:35 /home/hoge/hogehoge
ファイルがありますし、権限上は問題なさそうです。
バイナリファイルのファイル形式を確認する
# objdump -a /home/hoge/hogehoge
/home/hoge/hogehoge: ファイル形式 elf32-i386
/home/hoge/hogehoge
32bit用を示すelf32-i386
と表示されていますね。ちなみに、64bitバイナリファイルならelf64-x86-64
と表示されます。
自身のOSのアーキテクチャ(32bit/64bit)を確認する
# uname -m
x86_64
64bitですね。ちなみに、32bitならi686
と表示されます。
32bitバイナリを動かすために必要なライブラリをインストールする
# dnf install libstdc++.i686
メタデータの期限切れの最終確認: 0:02:45 時間前の 2020年12月03日 10時47分32秒 に 実施しました。
依存関係が解決しました。
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール中:
libstdc++ i686 8.3.1-5.el8.0.2 BaseOS 487 k
依存関係のインストール中:
glibc i686 2.28-101.el8 BaseOS 3.4 M
libgcc i686 8.3.1-5.el8.0.2 BaseOS 85 k
トランザクションの概要
================================================================================
インストール 3 パッケージ
中略
完了しました!
これで実行できるようになりました٩( ᐛ )و
感想
移行前のcentOSも64bitだったので、バイナリファイルも64bitって思いこみ、バイナリファイルが32bitだって気が付くのが遅れました。
思い込みって怖いですね。
参考文献