これはこの質問に対するフォローアップです。apt-getで利用できないパッケージのバージョンをインストールする方法は?
リンクされた質問で、私はさまざまなLinuxディストリビューションがさまざまなパッケージ形式を使用する方法や、実際にユーザーがソースから新しいパッケージを直接コンパイルしてインストールできるようにする方法など、Linuxパッケージ「ecosystemm」について学びました!
フォローアップで質問/学びたいです。なぜこれらの違いは包装形式に存在します。
リンクされた質問に対する許容される回答は次のとおりです。
[Linux]のすべてのサブブランチは、デフォルトで使用されているパッケージ管理システムによって定義されます。
私が知りたいいくつかのことは次のとおりです。
完全なLinuxディストリビューションの作成をリードするのに十分なパッケージ形式が重要なのはなぜですか?
そもそもパケットフォーマットが違うのはなぜですか?私はパッケージに実行可能ファイル、共有/静的ライブラリ、ヘッダーなどの組み合わせが含まれていると素直に想像しています。ファイルシステム階層標準- 1つのパッケージ形式が問題を普遍的に解決したり、時間の経過とともに優れていることを証明できませんか?すなわち、各分布について.deb
対。.rpm
対。.zip
などを使用する根拠は何ですか?
同じパッケージ形式に異なるパッケージマネージャがあるのはなぜですか?たとえば、私が理解しているように、DebianとUbuntuは両方ともパッケージに.deb
ファイルを使用しますが、Debianはパッケージマネージャにdpkg
ファイルを使用し、Ubuntuは使用しますapt
(そしてapt-get
?!)。
ベストアンサー1
パッケージ管理は非常に複雑な問題であり、これを解決するための様々な試みがなされてきました。各試みは以前の試みを改善しようとしますが、完璧ではありません。
パッケージ管理システムとフォーマットが一緒に設計されているため、各パッケージ管理システムは独自のフォーマットを使用します。理論的には、すべてのシステムが使用できる統一された形式があるかもしれませんが、依存関係グラフの作成、パッチ管理、構成ファイルの内容と配置、パッケージ間のバージョン互換性など、パッケージ管理の他の側面も変更する必要があります。パッケージを交換できるように統合されました。
すべてのパッケージ管理システムは依存関係管理に異なるアプローチを取り、すべてのディストリビューションはパッケージバージョンの選択とパッチ管理に異なるアプローチをとるため、統合する方法はありません。
これらの選択により、Linuxディストリビューションが構成されます。これを統合することは、すべてのディストリビューションを1つにマージすることです。これがパッケージ管理システムがディストリビューションの鍵である理由です。ディストリビューションを決定する決定はここにあります。実際、これよりもよく説明できる方法はありません。https://xkcd.com/927/
移植可能なパッケージ形式を作成する試みがたくさんありました。 Appimageはその一つです。デプロイパッケージに(ほぼ)すべての依存関係を組み込んで動作するため、パッケージは非常に大きく、不要なメモリを使用します。
別のオプションはスナップです。これにより、オペレーティングシステムから依存関係を再び分離して独自に処理しようとするため、あるスナップパッケージが依存している別のスナップパッケージをドラッグして、オペレーティングシステムコンポーネントのバージョンを再複製できます。
最終移植可能な基本パッケージは、パッチ、構成、コンパイル、およびインストールが必要なソースコードファイルのtarballです。これには依存関係は含まれていないため、インストーラはコンパイルする前に依存関係を解決する必要があります。依存関係をリストする標準的な方法がないため、状況はさらに悪化し、一部のパッケージはlibcの内容までシステムで標準として使用できる項目について多くの前提があるため気にしません。
この問題を解決するより良い方法はありません。すべてのソリューションに問題があります。問題を解決するためのソリューションを作成すると、さまざまな問題が発生し、多くのソリューションは相互に排他的です。