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


46

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

後者のソースバンドルのダウンロードは、非常に面倒です。

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

回答:


44

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

バイナリパッケージがすでに構築されてから1ですソース、多数のユーザがインストールして使用できるように、ソフトウェアで提供される一般的な機能とパラメータを持つ人で。

バイナリパッケージは簡単にインストールできます。
しかし、アップストリームパッケージのすべてのオプションがあるわけではありません

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

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

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

短いインストールで元があなたに与え重いカスタマイズ、同時にオプションからインストールしながら、それは、多くの労力を要しバイナリは簡単ですが、あなたがあり、カスタマイズすることはできませんあなたが望むように。

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

そして何よりも、ソフトウェアのセキュリティについて、ジョーが以下のコメントで提供しているベルラボのこの陽気なページを強調したいと思います。


4
ソースはシステム用に最適化された方法でコンパイルすることもできます(これは良い考えではないかもしれません。コンパイルされたものはシステムに「固有」であり、バックアップでは動作しないかもしれませんが...ソース、再コンパイルできます(時間があれば)
オリビエデュラック14

これは、その「バックアップシステム」があるかどうかに依存します。調査を行っているだけの場合、通常は調査しません。
h22 14

1
ハイパーパラノイドの場合、ソースからインストールする利点の1つは、セキュリティと、可能な場合、または必要な場合にコードをレビューできることです。ソースからインストールする場合、そのソースコードからバイナリを持っているのではなく、変更が不明なバイナリ(最初にソースを信頼していると仮定)。
ローレンス

6
@ultrasawblade-あなたは明らかに十分な妄想ではありません!<G>- 完全なmontyについては、cm.bell-labs.com / who / ken / trust.htmlを参照してください。
ジョー14

32

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

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

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

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

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

ただし、パッケージ化されたバージョンが古いバージョンである場合もあれば、パッケージ化されたバージョンがない場合もあります。その場合、自分でコンパイルすることが唯一のオプションです。その場合、次のことを考慮する必要があります。

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

余分な労力を払う意思がある場合は、ソースからコンパイルすると次の利点が得られます。

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

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

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

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


19

他の答えとは別に、私は何かを追加したいと思います:

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

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

それに余裕がない場合は、パッケージメンテナにその仕事を任せてください。


6

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

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

はい、私は知っています、コンピュータは今非常に非常に高速であり、あなたが取る努力や行動は非常に非常に高価ですが、座ってプログラムを完了するのを待って3日目に(これは私が話している状況です)そのような真実疑わしく見え始めます。

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


CPUを最大限に活用するためのこのような調整が違いを生む場合(これは一部の非常に特殊なコードにのみ関係します。つまり、時間の95%がコードの5%に費やされるため、他の95%目立った違いはありません。そして、今日のプログラムのほとんどは、ユーザーがいずれにせよ決心するのを待つ時間の99%です)、プログラムは起動時のCPUに応じて異なるコードをオンに切り替えます。
フォンブランド

0

両方の世界を最大限に活用する1つの方法(最新のソフトウェア、簡単なインストール/アンインストール、ほとんどのディストリビューションの調整と適応、現地の要件に合わせた最適化が可能)、コスト(最新の状態を維持し、バグに注意する必要があります)そして、土壇場のパッチ、開発に従ってください、あなたはバグ修正とバージョン間の非互換性に関してあなた自身であります)軽減することはできません(多く)、あなたのディストリビューションからのソースパッケージから始めて、あなた自身のパッケージを構築することです はい、構築およびインストールするだけではありません。


1
面白い答えのように思えますが(「両方の世界のベスト」)、ここであなたが何を意味するのかよく理解できません。言い換え/説明してもいいですか?
1月Żankowski17年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.