web-dev-qa-db-ja.com

ソースからのビルドとインストールパッケージの使用の違いは何ですか?

何かをインストールしているときに、インストール実行可能ファイルをダブルクリックする簡単な方法がある一方、ソースからビルドする方法があります。

ソースバンドルをダウンロードする後者は本当に面倒です。

しかし、これら2つの方法の根本的な違いは何ですか?

47
kwagjj

すべてのソフトウェアはprogramsであり、source packagesとも呼ばれます。したがって、システムで実行するには、すべてのソースパッケージを最初にビルドする必要があります。

バイナリパッケージは、誰かがsourceからすでにビルドしているものです多数のユーザーがインストールして使用できるように、ソフトウェアで提供される一般的な機能とパラメーター。

バイナリパッケージはインストールが簡単です
しかし、上流のパッケージのすべてのオプションがあるとは限りません。

したがって、ソースからインストールする場合は、ソースコードを自分でビルドする必要があります。つまり、依存関係を自分で処理する必要があります。また、それに応じてビルドできるように、パッケージのすべての機能を認識する必要があります。

ソースからインストールする利点:

  • セキュリティパッチであろうと新機能であろうと、最新バージョンをインストールして常に最新の状態に保つことができます。
  • インストール中に機能を削減して、ニーズに合わせることができます。
  • 同様に、バイナリで提供されていない可能性があるいくつかの機能を追加できます。
  • 希望する場所にインストールしてください。
  • 一部のソフトウェアの場合、適切なインストールのためにハードウェア固有の情報を提供できます。

つまり、ソースからインストールすると、大量のカスタマイズオプションが提供されると同時に、多大な労力がかかります、binaryからのインストールは簡単ですが、必要に応じてカスタマイズできない場合があります。

Update:以下のコメントにセキュリティに関連する引数を追加します。はい、バイナリからインストールしている間はソースコードの整合性がないことは事実です。ただし、バイナリをどこから取得したかによって異なります。新しいプロジェクトのバイナリを入手できる信頼できるソースはたくさんありますが、唯一の欠点はtimeです。更新のバイナリまたは新しいプロジェクトが信頼できるリポジトリに表示されるまでには、時間がかかる場合があります。

そして何よりも、ソフトウェアのセキュリティについて、この陽気な bell-labsのページJoe によって提供されるコメントを以下のコメントで強調したいと思います。

44
beginer

ソースファイルには、開発者が選択した任意の言語(C、C++、Pythonなど))で開発者が記述した元のコードが含まれており、汎用です。ディストリビューションに固有ではありません。多くの場合、どのオペレーティングシステムにも対応しています。

パッケージ(RPMやDEBなど)は、特定のディストリビューション用に事前に準備されたバイナリ実行可能ファイル(または解釈済みスクリプトなど)です。コンパイルするためのソースの準備(必要なパッチの追加など)、実際のコンパイル、ディストリビューション固有の構成ファイルの作成、インストール前後のスクリプトの作成などのタスクはすべて、パッケージメンテナーによって行われます。

言い換えれば、すべてのロバ作業はパッケージで行われていますが、ソースからインストールする場合は自分で行う必要があります。

次のように、ほとんどすべての場合でパッケージを使用する方がはるかに簡単です。

  • インストールがはるかに簡単です
  • それらはあなたのディストリビューションで動作するように特別に設計されています
  • ディストリビューション固有のバグを修正するために、パッケージのメンテナーによってパッチが適用される場合があります
  • パッケージマネージャーはそれらをアンインストールします
  • パッケージマネージャーがすべての依存関係を管理します
  • パッケージマネージャーが更新を処理します
  • システム(コンパイラ、makeなど)に開発者ツールをインストールする必要はありません。

ただし、パッケージバージョンが古いバージョンである場合や、さらに悪い場合、パッケージバージョンがない場合もあります。その場合の唯一の選択肢は、自分でコンパイルすることです。その場合、次のことを考慮する必要があります。

  • システムにすべての開発者ツールをインストールする必要があります
  • 更新の確認と再コンパイルを担当します
  • devパッケージを含むすべての依存関係がインストールされていることを確認する必要があります-それらの多くが存在する可能性があります。
  • ディストリビューションで期待どおりに機能しない場合は、問題をデバッグする必要があるかもしれません

追加の労力を惜しみなく使用する場合、ソースからコンパイルすると、次のような利点があります。

  • 最新の利用可能なバージョンへのアクセス
  • パフォーマンス/安定性のためにコンパイルプロセスを最適化するオプション
  • 楽しみ!

一部のディストリビューションのビルド済みパッケージは、インストールおよび実行の準備ができたバイナリ実行可能ファイルを提供しますが(RPMおよびDEBは例です)、他のディストリビューションは、コンパイルプロセスを自動化するパッケージを提供します。

Gentooのebuildsはこの例です-パッケージは基本的に、実行可能ファイルをコンパイルしてインストールする方法を説明するパッケージマネージャーへの指示です。これには、ユーザーが好みに合わせてコンパイルプロセスを最適化しながら、従来のパッケージマネージャー(自動更新、アンインストールなど)の多くの利点があります。

Arch Linuxには、主流のパッケージがバイナリであるパッケージシステムがありますが、多くの追加パッケージはPKGBUILDファイルを使用してシステム上でコンパイルされます。

32
garethTheRed

他の回答とは別に、何かを追加したいと思います。

自分でプログラムをコンパイルすることにした場合、コンパイルは一度だけ行うものではないと考える必要があります。おそらく、コンパイルして、新しいバージョン、特にセキュリティ更新について最新の状態に保つことを決定したアプリケーションの開発メーリングリストに登録する必要があります。

アプリケーションが更新されるたびに、新しいバージョンを再コンパイルする必要があります。そのため、毎週時間の一部を節約する必要があることに注意してください。

あなたがそれを買う余裕がないなら、パッケージメンテナーにあなたのためにその仕事をさせるのが良いです。

19
Daniel

ソースからビルドすると、マシンのアーキテクチャを正確に指定できます。新しいCPUには、コンパイラーが理解できる追加の命令があり、パフォーマンスが少し低下します。通常、事前ビルドパッケージは、まだ一般的に使用されている最も古いCPUに依存しています。

これは、たとえば生物情報学的パイプラインのツールや地球物理学のモデリングツールなど、CPUを非常に多く使用するプロジェクトクリティカルなアプリケーションで最も重要です。このようなソフトウェアは、非常に制御された環境で実行され、それ自体ではアクセス制御を備えていません。そのため、セキュリティバグがほとんどないため、数日または数時間でパッチを適用する必要があります。最初は不明なアーキテクチャの別のマシンで実行する必要はほとんどありません。

はい、わかっています。コンピュータは現在非常に高速であり、実行する作業やアクションは非常に非常に高価ですが、プログラムの完了を待って3日目に(これが私が話している状況です)、そのような真実です疑わしく見え始める。

異なる点として、ブラウザーなどのアプリケーションは、最新に保つことが非常に重要であるため、メンテナーリポジトリから(およびダウンロード済みのビルド済みパッケージからではなく)使用することをお勧めします。

6
h22

両方の利点(最新のソフトウェア、簡単なインストール/アンインストール、ほとんどの配布の微調整と調整を組み込み、ローカルの要件に合わせて最適化できる)を得る1つの方法は、コスト(最新の状態に保つ必要があり、バグに注意する必要があります)そして最後の最後のパッチは、開発に従って、バグ修正とバージョン間の非互換性に関してあなた自身で)軽減することはできません(多く)、ディストリビューションのソースパッケージから始めて、独自のパッケージをビルドすることです。はい、それは単にビルドしてインストールするよりも多くの仕事です。

0
vonbrand