Linuxのソースからビルド - インストールされたパッケージがめちゃくちゃになる

Linuxのソースからビルド - インストールされたパッケージがめちゃくちゃになる

Linuxのソースコードからアプリケーションをビルドするたびに、オペレーティングシステム(ubuntu)に依存関係ライブラリをインストールする必要があります。

一般的なシナリオ:

./configure の起動中にライブラリの欠落に関するエラーが発生しました。 xyz sudo apt-get install libxyz-dev ステップ 1 に進みます。最後に、オペレーティングシステムが混乱して依存関係の問題が発生しました。たとえば、

次のパッケージには満たされていない依存関係があります。

 librsvg2-dev : Depends: libglib2.0-dev (>= 2.12.0) but it is not going to be installed
                Depends: libgdk-pixbuf2.0-dev (>= 2.21.6) but it is not going to be installed
                Depends: libcairo2-dev (>= 1.2.0) but it is not going to be installed
                Depends: libgtk2.0-dev (>= 2.21.5) but it is not going to be  installed

今何をしているのか、常に自分に聞いてください。 Ubuntuでより高いバージョンのライブラリをインストールすることを強制する必要がありますか?

私の質問は次のとおりです。

おそらく、Linux(Ubuntu)のソースからソフトウェアをビルドする別の方法があります。分離するいくつかの方法。私のオペレーティングシステムに統合されていませんか?私はJavaの世界から来て、そこでアプリケーションを構築しています! =システムのすべての依存関係をインストールします。どんな提案がありますか?ベストプラクティス?

答え1

ここには2つ以上の質問があります。最も重要なのは処理方法だと思います。「しかし、インストールされません。」 これに対する答えはありませんが、ある時点で欲求不満を感じて何かを強制的に設置したため、このようなことが発生した場合は、速度を遅くして注意を払う方法を学ばなければならないと言えます。詳細。単に「私は台無しになった」と言うことは多くのことを意味しません。

私は10年以上にわたってLinuxでソースを構築してきましたが、ディストリビューションのパッケージマネージャに問題はほとんどありません。一部のソースパッケージャは、依存関係を正しく表示しないか.configure正しく実行しないため、大きな問題になる可能性がありますが、展開バイナリに「不足している依存関係」の問題は発生しないでください。ディストリビューションのインストーラ。

たとえば、

librsvg2-dev : Depends: libglib2.0-dev (>= 2.12.0) 

2.12は非常に古いバージョンです。オンラインでバージョン履歴が見つかりませんが、約10年ほどになったようです。これより古い glib を使用する Ubuntu バージョンは使用できません。そのため、パッケージ管理に問題があります。

これは、ソースコードのビルドプロセスとほとんど関係がありません。

私はJavaの世界から来ました...

これがC/C++の世界です。 Javaはよりモノリシックで独立しているため、いくつかの作業が簡単になりますが、いくつかのトレードオフがあります。 C / C ++にはそれ自体がいくつかの利点があることを覚えておいてください。

答え2

Javaはすでに仮想マシンにあるほとんどのライブラリに付属しており、Javaプログラムにjarでパッケージ化された外部ライブラリが含まれていることがあります。ただし、同じライブラリに多数のプログラムがバンドルされていると、多くのスペースが無駄になります。
Java自体は多くの依存関係を導入し、ソフトウェアに必要なすべてを提供します。私はしばしばJavaをさまざまなオペレーティングシステムライブラリの機能を統合するラッパーと考えています。しかし、これは完全に真実ではなく、Javaははるかに多くを提供します。

ソースからソフトウェアのすべての部分をコンパイルし、依存関係を処理し、必要に応じてインストールし、不要になったら削除する優れたパッケージマネージャがあります。しかし、PortageはGentoo Linuxのコアであり、他のパッケージマネージャと一緒に使用できますが、実際にどれほどうまく機能するか経験がありません。
あなたは見ることができますGentooプレフィックスGentoo自体以外のオペレーティングシステムにPortageをインポートするのは簡単ではないかもしれません。

関連情報