web-dev-qa-db-ja.com

64ビットDebianJessieで32ビット実行可能ファイルを実行する

Adobe Air(Balsamiq Mockupsに必要)をインストールしようとしていますが、インストーラーを実行しようとすると、次のようになります。

Sudo: unable to execute ./AdobeAIRInstaller.bin: No such file or directory

ファイルが実行可能であることを確認しましたが、グーグルで調べてみると、64ビットシステムで32ビットの実行可能ファイルを実行しようとするとそれができるようです。この時点でのすべての人の推奨はia32-libsをインストールすることのようですが、そのパッケージはDebian Jessieにはもうありません(彼らはマルチアーチサポートをリファクタリングしたようです)。

私は何をする必要がありますか? multiarch-supportがインストールされていますが、他に何かありますか?

5
emilecantin

いくつかの背景

はい、ia32-libsは、真のマルチアーチが実装される前の一時的な対策でした。基本的に、そのパッケージには、人気のあるsomeの32ビットバージョンが含まれているだけでした。ライブラリ。

あなたが今していることは

  1. 外国のアーキテクチャを有効にするi386 in dpkg

    dpkg --add-architecture i386
    
  2. これが必要なライブラリを見つけて、適切な32ビット(i386)バージョンをインストールします。

    apt-get install libfooX.Y:i386
    

しかしいくつかの不幸なことに注意してください:

  • DebianのMulti-Archは、ネイティブの/usr/lib/x86_64-linux-gnuライブラリの場合はAMD64の場合は/usr/lib/i386-linux-gnu/のように、Archに依存するライブラリがArchに依存するディレクトリにインストールされるという事実に基づいています。同じシステム上の同じi386ライブラリ。

    ここでの問題は、Debianに実装されているマルチアーチを認識しないサードパーティソフトウェアが、通常、/usr/lib/libfoo.so.X.Y.Zのようなよく知られた名前を使用して依存するライブラリを見つけることを期待していることです。最近のDebianバージョンの場合。

    これは、シンボリックリンクまたはLD_PRELOADで解決するか、他の方法を使用してダイナミックローダーをいじることで解決できます(たとえば、他の場所にインストールされたライブラリへの参照を含む、/etc/ld.so.cacheの代わりに代替キャッシュファイルを使用する)が、次のポイント。

  • Linux互換バージョンのAdobeAirでの作業は、IIRCでかなり長い間停止されていたため、最新のAdobe Air BLOBは、Debianの最近のバージョンには存在しない非常に古いバージョンのライブラリに依存している可能性があります。また、最近のライブラリはAPI/ABIの変更を意味し、これらはシンボリックリンクを使用して解決できません。

考えられる解決策

このAdobeの嫌悪感を取り除くことが不可能な場合は、LinuxカーネルのAPI/ABIが非常に安定しているという事実に頼って、 chroot)を作成しようとするでしょう。 または [〜#〜] lxc [〜#〜] 互換性があると主張されているOSからプルされたライブラリを使用してこのblobを実行するための環境。

基本的に、chrootの場合、既知の名前(/bin/bashなど)を持つライブラリの最小限のセット(および/usr/lib/libfoo.soなどの一部のバイナリ)を含むディレクトリを作成する必要があります。

これは必ずしも簡単な方法ではありませんが(readelflddで武装し、ファイルを抽出してコピーするなど、多くの試行錯誤のラウンドが必要になります)、次の理由でうまくいく可能性があります。結局、すべてのライブラリはsyscallを使用してカーネルを呼び出し、これらはカーネルリリース間でかなり安定しています。

4
kostix