web-dev-qa-db-ja.com

実行可能ファイルをサポートするためにロードする必要のあるパッケージまたはライブラリを決定する方法はありますか?

パッケージとしてビルドされていない、再コンパイルできないコンピューターにインストールしたい実行可能ファイルがあり、それらを実行するために必要なライブラリーをダウンロードしたい。

以下はその上でlddを実行した結果の出力の一部です

libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)

ディスクの使用量を最小限に抑えるために、この情報を使用してダウンロードするパッケージを選択したり、リストされているライブラリとその依存関係のみを抽出したりできるツールはありますか?システムはヘッドレスVMで実行されており、プログラムはVNC経由で表示されます。

本格的なグラフィックデスクトップが必要なライブラリのほとんどを提供すると思われますが、必要なライブラリとその依存関係、およびそれをサポートするのに十分なX Windowsパッケージだけをダウンロードしたいと思います。

11
vfclists

どのOSを使用しているかはまだお伝えしていないので、Linuxを想定して、例としてDebianを使用します。あなたの質問に対する素早い回答は、私の知る限りではありません。これは便利な回避策かもしれませんが:

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

これにより、lddの出力が解析され、apt-cacheが実行され(OSの同等のものに置き換えます)、lddによって返されたライブラリ名の最初の部分が名前と説明に含まれているパッケージのリポジトリが検索されます。

これはそれらすべてを見つけることはできず、一部の結果(libcなど)が多すぎますが、役立つ場合があります。


@FaheemMithaさんは、apt-fileがより良い方法かもしれないと指摘しました。例えば:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

リンクされたライブラリを提供するパッケージ名のリストが返されます。

14
terdon

@terdonの回答は素晴らしいですが、dpkg-queryとは異なり、apt-fileがデフォルトでDebianシステムにインストールされているので、これを行うのはさらに簡単です。

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

これにより、パッケージのリストが生成されます。

3
jcoffland

あなたの最善の策は、実際にディストリビューションをサポートするパッケージを見つけることです。しかし、それでうまくいかない場合は、他に方法が1つしかありません。

必要に応じてlddを実行してから、それらの依存関係を手動でインストールします。

たとえばlibpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)

私にとっては、apt-get install libpango:i386をインストールし、Debian不安定版のバージョンで十分であるように祈ることを意味します。

Ldd、Googleの各行を調べ、使用可能なリポジトリーを調べて、基本的に幸運になる必要があります。次に、1つずつインストールします。プログラムが実際に実行されるまで。ただし、lddは「単純な」プログラムに対してのみ機能します。プラグインを呼び出すプログラムや任意のコードを実行するプログラムは、すべてが異なる問題です。それらについては、コンソールから実行し、クラッシュ/エラーが発生したときに修正する必要があります。

とはいえ、バイナリのみの実行可能ファイルを維持するのは非常に困難です。あなたは何か他のものを使用することを検討したいかもしれません。ディストリビューションがその実行可能ファイルをビルドしたシステムより少し進んでいる、または少し遅れている場合、それが機能しない可能性があります。

1
coteyr