パッケージ マネージャーで提供されていない、ia32-libs を必要とするソフトウェアを実行する方法

パッケージ マネージャーで提供されていない、ia32-libs を必要とするソフトウェアを実行する方法

Arma 2 OA 専用サーバーを Virtualbox VM にインストールして、自分のミッションをサンドボックス環境でテストし、ネットワーク内の別のコンピューターにオフロードできるようにしたいと考えています。(他のコンピューターは VM を実行していますが、Windows マシンなので、インストールに手間をかけたくありませんでした) 少なくとも 2 GB、できれば 4 GB の RAM が必要なので、これを実行するために Ubuntu 13.10 の AMD64 バージョンをインストールしようと思いました。

'Ubuntu の 64 ビット バージョンで 32 ビット プログラムを実行するにはどうすればよいですか?' apt-get や dpkg を使用して 32 ビット ソフトウェアをインストールする方法についてはすでに説明しましたが、この場合は当てはまりません。

サーバーは、Arma ゲームの開発元である BI Studio のサイトで圧縮ダウンロードとして提供されています。インストール手順は、現在の最新技術から明らかに少し古くなっています。(おそらく、最新技術がごく最近更新されたためです :) ) ia32-libs をインストールする必要があると書かれていますが、これは現在では廃止されているようです。次に、サーバーが確実に実行されるように、適切なパッケージをインストールする方法を見つけなければなりません。

これらの問題に関しては、私の経験レベルは初級から中級程度です。apt-get で多くのパッケージをインストールしたことがあり、過去に依存関係の問題を解決したことがあり、パッケージ マネージャーを使用せずにソフトウェアをインストールしたことはあまりありません。conf ファイルの編集などの基本的な管理作業は自分でこなすことができます。

私は、apt-get で ia32-libs をインストールせずに、結局ライブラリを取得するために gcc をインストールしようとしました。その理由は、gcc には下位互換性コーディング用のファイルが含まれており、Linux ではすべてのライブラリが (私が知る限り) システム レベルで にインストールされているからです/libs。今のところ、起動しているようです。(ゲーム内ネットワーク ブラウザーを介してゲーム サーバーに接続できるので、通信しています) ゲーム サーバー プログラムの実行時に依存関係のチェックが行われているかどうかはわかりません。そのため、いくつか疑問が残ります。

  • 13.10 は ia32libs ライブラリへの呼び出しをキャッチし、その呼び出しを amd64 上の適切なコードに変換しますか?
  • 実行された場合、必要なライブラリがすべて正しくロードされたことを意味しますか、それとも必要なライブラリが結局見つからない場合に後でクラッシュする可能性がありますか?
  • gcc をインストールするなどの回避策が必要ですか? (i386 ライブラリとともに)
  • このソフトウェアを実行するために必要なライブラリを調べるにはどうすればよいですか? (または、パッケージ マネージャーで提供されていないその他の 32 ビット ソフトウェア)

  • 答え1

    それは主にソフトウェアとその書き方に依存します。そのような場合、私は32ビットのDebianバイナリ(利用可能な場合)またはコンパイルされた32ビットバイナリを選択します。これは私の回答ですでに説明されています。Ubuntu の 64 ビット バージョンで 32 ビット プログラムを実行するにはどうすればよいですか?さらに、32 ビット システムの 64 ビット バージョンを実行することも実証しました (これは数年前には不可能でした)。実際には、64 ビット システムで 32 ビット アプリケーションを実行する方が簡単です。

    通常、バイナリを実行すると、不足しているライブラリが通知されます。不足しているライブラリはリポジトリで確認できます。

    13.10 は ia32libs ライブラリへの呼び出しをキャッチし、その呼び出しを amd64 上の適切なコードに変換しますか?

    いいえ。開発者がこれを行う必要があります。システムは、GNU リンカーを使用するライブラリのみを表示しますld。ソフトウェアが「ハードコード」ライブラリを使用しようとする場合、開発者を騙して適切なライブラリを指定する必要があります。現代の、よく書かれたソフトウェアでは、これは必要ありません。

    実行された場合、必要なライブラリがすべて正しくロードされたことを意味しますか、それとも必要なライブラリが結局見つからない場合に後でクラッシュする可能性がありますか?

    実行できれば完璧です。ライブラリは実行ファイルの起動時にロードされ、それらがなければ(つまり、いくつかが欠落していると)起動しませんが、それらが存在していても、起動時にすべての呼び出しが呼び出されるわけではないため、特定の関数の特定の呼び出しによって動作が変わり、アプリケーションがこれをサポートしていないためにクラッシュが発生する可能性があります。これはコーナーケースのシナリオですが、起こり得ます。そのため、新しいライブラリとの非互換性がある場合は、おそらく気付くでしょう。ただし、それはまったく別の問題です。これを修正するには、新しいライブラリに適応するか、すでにインストールされているものをダウングレードする必要があります。

    gcc をインストールするなどの回避策が必要ですか?

    gccはコンパイラです。C または C++ を使用してコードをコンパイルする場合にのみ、これをインストールする必要があります。他の場合には回避策が必要になる可能性がありますが、gcc実行するためにコンパイラを必要とする「バイナリ」(すでにコンパイルされた実行可能ファイル) は見たことがありません。

    このソフトウェアを実行するために必要なライブラリを調べるにはどうすればよいですか? (または、パッケージ マネージャーで提供されていないその他の 32 ビット ソフトウェア)

    少し乱暴ですが、必要なライブラリが指示に正確に記載されていない場合は、ld-linux.so --listコマンドを使用します。例:

    $ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
        linux-vdso.so.1 =>  (0x00007fffd479f000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
    

    (lddバイナリは同じ出力を提供します。@ubfan に感謝します)

    ご覧のとおり、bashlinux-vdso、libtinfo.so、libdl.so、libc.soを使用しています。これらのライブラリが正しい場合は、それでbash問題ありません。これは動的にリンクされたバイナリ--verifyバイナリが実際に動的にリンクされているかどうかを確認するには、代わりにを使用できます。

    次に、ライブラリの名前を取ります。libtinfo.so.5パッケージには次のものが含まれていました:

    File                                Packages
    /lib/i386-linux-gnu/libtinfo.so.5   libtinfo5 [not amd64]
    /lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
    /lib32/libtinfo.so.5                lib32tinfo5 [not i386]
    /lib64/libtinfo.so.5                lib64tinfo5 [not amd64]
    /usr/lib/debug/libtinfo.so.5        libtinfo5-dbg
    /usr/libx32/libtinfo.so.5           libx32tinfo5
    

    したがって、バイナリのアーキテクチャに適したパッケージをインストールするだけで (32 ビットの場合は、:i386パッケージ名に 64 ビットを追加します:amd64)、準備は完了です。

    言うまでもなく、32 ビット プラットフォームで 64 ビット バイナリを実行するには、CPU が 64 ビット対応である必要があり (2008 年以降のほとんどのシステムは対応しています)、おそらく 64 ビット カーネルがインストールされている必要があります。

    関連情報