web-dev-qa-db-ja.com

ソースからのインストール。パッケージマネージャーを破棄せずに依存関係を解決する方法

ソフトウェアのコンパイルとインストールは、私が克服できない苦痛と問題です。私は次のレベルに進むために私の心をクリアするためのより知識のある誰かとこのプロセスの私の理解を介して実行したいと思います。

私が必要とする多くの科学的ソフトウェアはパッケージとして配布されていません。 「./configure」がコンパイル変数を設定し、依存関係をチェックすることを理解します。「make」はコンパイルを実行します「Sudo make install」はすべてのライブラリとビンをその場所に配置します。ただし、機能しません。私はめったにa)依存関係の地獄に入らずに "./configure"ステージから抜け出すことはありません。もしそうなら、b) "Sudo make install"はおそらく私のボックスを破壊します。

a)依存関係の地獄は非常にイライラします。時々私はライブラリを持っていますが、それはそれが好きではありません。または、ライブラリがインストールしたくない。または、「構成」がそれを見つけることができません。または、私のディストリビューションがそれを本来あるべきでない場所に配置しました。または、私のシステムには2つのバージョンがあります。問題は、診断方法を理解できないため、これらの問題を修正できないことです。プログラマーになる必要のない人のために学ぶ良い参考資料は何ですか?

b)私の理解では、「make install」は、パッケージマネージャーがこれに気付かずに、一部のライブラリを置き換えて設定を変更することです。したがって、実行できないプログラムもあれば、更新できないプログラムもあります。したがって、「make install」を使用せず、PATHに追加されたシンボリックリンクを使用して、コンパイルされたバイナリをユーザーディレクトリに保存するだけで、問題は解決されますか?

私のボックスはシングルユーザーで、無料のHDがたくさんあるので、ライブラリが複数(数十)コピーされていても問題が解決しない場合は特に気にしません。スペースは安いです。

20
Lenz

ほとんどのパッケージには<package>-dev(Debianベースの場合)または<package>-devel(Red Hatベースの場合)があり、ビルドのためにリンクする必要があるライブラリになります。

したがって、たとえば、ソースがlibxmlを必要とする場合、Debianベースのシステムではlibxml2libxml2-devが見つかります(それらを見つけるにはapt-cache search <dependancy>を使用します)。

ビルドするにはlibxml2-dev、実行するにはlibxml2が必要です。

./configureステップは通常、正しいライブラリを指すように--with-libxml=/usr/lib/のようなフラグをサポートします(./configure --helpはすべてのオプションをリストする必要があります)。通常、--prefix=$HOME/swを使用したインストール場所の変更もサポートしています。パッケージマネージャーが制御する範囲外でプレフィックスを使用することは、パッケージマネージャーがインストールされているソフトウェアとの競合を回避するための最良の方法です。

Debianおよび派生物では、--prefixまたは/usr/local/または/opt/local/を使用するのが安全です。

必要なライブラリ(またはバージョン)がパッケージマネージャーから利用できない場合は、ソースをダウンロードして、同様のオプションを使用してコンパイルします。最も重要なのは、パッケージマネージャーの外で--prefixを使用し、ソフトウェアをコンパイルするときに本当に--with-<library>=/<path/to/installed/library>を使用することです。

17
bahamat

これに使用できるツールauto-aptがあります。

man auto-apt から:

auto-aptは、auto-apt環境内で実行されているプログラムのファイルアクセスをチェックするプログラムです。プログラムがインストールされていないパッケージのファイルにアクセスする場合、auto-aptはapt-getを使用して、ファイルを含むパッケージをインストールします。

次のように使用されます。

auto-apt run ./configure

別の方法は、Debianベースのディストリビューションでapt-get build-dep <package>を使用することです。

5
Marco