ソースからプログラムをコンパイルしてインストールする方法


39

これは、Linuxの楽しみを本当に制限する問題です。アプリケーションがリポジトリにない場合、またはインストーラースクリプトがない場合、ソースからアプリケーションをインストールする場所と方法に本当に苦労します。

Windowsと比較すると、簡単です。(ほとんど)ウィザードですべての作業を行うインストーラーアプリケーションを使用する必要があります。Linuxでは...それほどではありません。

だから、これについてのヒントや指示はありますか?ソースからLinuxプログラムをインストールする方法、理由、場所を明示的に説明しているウェブサイトはありますか?


7
「Windowsに比べて簡単です。ウィザードですべての作業を実行するインストーラーアプリケーションを使用する必要があります(Linuxでは...それほどではありません)。」問題には弱点があります。Windowsでは、ソースコードを入手することはめったにないので、パッケージを作成した人に翻弄されます。これについて考えてみると、「Linuxパッケージがなかったので、ソースからビルドする必要がある」と言ってもそれほど違いはありません。そもそもそれを手に入れる方法がありませんでした。通常、ソースからビルドすることは* nix-landでは最後の手段ですが、Windows-villeではオプションとなることはめったにありません。
エイブリーペイン

2
そうは言っても... * nixシステムへのすべての新規参入者に答えられるべき一般的な質問をするための+1バンプ。:)ソースからビルドすると、厄介なバグを修正することと、次のソフトウェアリリースまでただ苦しむことの違いを意味する場合があります。それほど悪いことではありません。ここで多くの人が指摘しているように、ひとたび何を探し、どのようにそれを行うかを知ったら、かなり痛みはありません。
エイブリーペイン

回答:


22

通常、プロジェクトには、ビルドとインストールの方法を説明したWebサイトがあります。そのための最初のGoogle。

ほとんどの場合、次のいずれかを実行します。

  1. 特定のバージョンのソースコードのリリースであるtarball(tar.gzまたはtar.bz2ファイル)をダウンロードします。
  2. tar zxvf myapp.tar.gzgzip圧縮されたtarballやtar jxvf myapp.tar.bz2bzip 圧縮されたtarballのようなコマンドでtarballを抽出します
  3. 上記で作成したディレクトリにcd
  4. 走る ./configure && make && sudo make install

または:

  1. gitまたはsvnなどを使用して、公式のソースリポジトリから最新のソースコードを取得します。
  2. 上記で作成したディレクトリにcd
  3. 走る ./autogen.sh && make && sudo make install

configureとautogen.shはどちらも--prefix引数を受け入れて、ソフトウェアのインストール先を指定します。私はチェックアウトをお勧めしますどこで、私は自分自身をコンパイルするソフトウェアを置く必要がありますか?カスタムビルドソフトウェアをインストールするのに最適な場所に関するアドバイス。


最新版を入手するときにautogen.shが使用されるのに、公式リリースではconfigure / makeが使用されるのはなぜですか?
ルイサリン

1
通常、「最先端」ソフトウェアが必要な人は、バージョン管理ソフトウェア(git、subversion、CVSなど)からリリースを取得します。リリースされたtarballとは異なり、おそらくテストされていないため、(おそらく)動作していると(おそらく)保証されているため、これは「ブリードエッジ」です。理にかなっていますか?
マットシモンズ

2
@Matt、それは理にかなっていることは確かですが、コメントは、Sandyがすべてのgit'd / svn'dトランクにautogen.shがあるように見えるようになったという事実により向けられたと思います。
-reiche

1
そして、すべての鍋に鶏肉...またはそのようなもの。ちなみに、たまに設定スクリプトなしでソフトウェアに出くわします。簡単で統一された方法があれば、パッケージは必要ありません;-)
Matt Simmons

マットは絶対に正しいです。だから私は「大部分」と言って、最初にプロジェクトのウェブサイトを調べることを主張しました。autogen.sh/configureのアドバイスは、ほぼすべてのGNOMEモジュール、および他の多くのプロジェクトにも当てはまります。一部のプロジェクトではautomakeを使用せず、Makefileのみを使用するため、単に実行しmake && sudo make installます。一部のPythonプロジェクトにはsetup.pyしかありません。これをインストールするために呼び出します(実際のコンパイルセットアップがないため)。他にも多くのビルド/インストールシステムがあります。うまくいけば、READMEまたはINSTALLファイルで何をすべきかを正確に説明してください。
サンディ

3

ソースからパッケージをコンパイルし、すべてのパッケージの依存関係、フラグなどを処理するパッケージマネージャーがあることを追加したいだけです。

BSDシステムではportsPorts Collectionを使用する

Debianのでは、apt-getパッケージマネージャは、あまりにもソースからインストールすることができます:APT HOWTO:ソースパッケージでの作業を(同じDebianベースのUbuntu、Linuxのミントと他のすべてのために行きます)

Gentooディストリビューションは、portageシステム全体をソースのみからコンパイルするパッケージマネージャーを使用します:Portage Introduction

Slackwareはパッケージをコンパイルできますが、そのためのパッケージマネージャーがそこにあるかどうかはわかりません。=)

とにかく、上記のSandyのようにパッケージをいつでも手動でコンパイルできます=)また、他のディストリビューションでマネージャーを使用しapt-getたりportageパッケージ化することが可能でなければなりません...


1
「apt-getパッケージマネージャーはソースからインストールできます」と言うのは誤りです。引用されたセクションでは、DebianソースからDebianパッケージを作成する方法を説明しています。任意のアップストリームソースではありません
ファヒームミタ

2

インストールしたい特定のプログラムまたはアプリケーションに付属のドキュメントを読むのが最善だと思います。通常、tarball(通常はダウンロードできるアプリケーションソースアーカイブ)内にreadme / READMEがあります。または、インストールファイルのインストール方法を読んで学習するためのインストールファイルもあります。要するに:RTFM;)


READMEにはLinuxでビルドするためのすべての要件が記載されていますが、Windowsのインストール手順しかありません。受け入れられた答えは私のために働いたし、おそらくほとんどの時間動作します。./configureルートを試して、それが機能しない場合(つまり、依存関係が欠落していて、コンパイラー出力を読み取れない場合)にREADMEに進むことは、ほぼ良いアドバイスだと思います。
スティーブンC

1

FreeBSDでPorts Collectionを使用するための要約:

ポートを探す

ポートはカテゴリ別に整理されているため、ポートがどのカテゴリに属しているかわからない場合は、最初にポートを見つける必要があります。

cd /usr/ports
make search name=myport

そのようにエントリが多すぎる場合があります。個人的には:

find /usr/ports -name myport* -print -depth 2

*多くの場合、使用可能なポートの複数のバージョンがあるため、検索時に使用します。depth引数により、返される結果が必要としないマッチで不必要に乱雑にならないようにします。

構成

多くの場合、何らかの設定を行う必要があります。ApacheやPostgresなどのソフトウェアは、実際にそれを必要とします。主に3つの選択肢があります:コマンドライン、環境、および構成ファイルの作成。コマンドラインを使い始めるには:

make showconfig

これにより、デフォルトの構成オプションがリストされます。デフォルトが好きなら、コンパイルしてインストールする準備ができています。そうでない場合、

make config

必要なオプションを選択できるダイアログボックスが表示されます。(これと混同しないmake configureでください。選択したオプションでポートを設定します!) これで十分な場合がよくありますが、Apacheのような一部のソフトウェアでは、単純なダイアログでは処理できない複雑な設定があります。このためには、Makefileも参照する必要があります。Makefileは、詳細な情報を提供するmakeのターゲットを追加する場合があります。Apacheの例を続けるには

make show-modules
make show-options
make show-categories

選択したモジュール、スレッドオプションなどの設定に関する情報を提供します。ポートのデフォルトがほとんど問題なく、いくつか変更したい場合は、環境変数のようなkey = valueペアを渡すこともできます。

make MYVBL1=MYVAL1 ... install clean

また、オプションを使用してスイッチオプションを設定でき-Dます。

make -D MYVAR -D MYOTHERVAR ... install clean

ただし、複雑な構成の場合、コマンドラインはうまく機能せず、最初の2つの方法はどちらも効果的ではありません。この場合、構成ファイルを作成makeし、__ MAKE_CONF変数でそれを渡すことができます。FreeBSDにはデフォルトの設定ファイルがあります。/etc/make.conf通常、これには以前にインストールされたポートやその他のシステム設定に関する情報が含まれています。開始するには、portsオプションを使用してファイルを作成し、呼び出して~/myport.mkから、そのファイルを/etc/make.confと結合します。

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

その後、構成を再確認できます。

make showconfig __MAKE_CONF=~/make.port.conf

そして、すべてがよさそうであれば:

make install clean __MAKE_CONF=~/make.myport.conf

気をつけて!make configureインストールの後に、または全体または一部のインストール後に構成設定を調整する必要がある場合は、最初に構成完全にクリアする必要があります

make rmconfig

そうしないと、portsサブシステム、ポートのmakeデフォルト、および必要な構成の間で予期しない相互作用が発生します。

まとめとしてはかなりの量ですが、構成の複雑さは、ポートではなくアプリに関するものです。たとえば、Bashには実際にはオプションがありません。

設置

これは簡単な部分です。

make install clean

またはできる

make build
make install
make clean

これは単なるタイピングです。

それはほとんどそれです。依存関係と構成オプションを再帰的に一覧表示したり、パッチで更新したりするなど、できることは明らかにあります。ここでは、ハンドブックのポートセクション、ポートサブシステムのマニュアルページ(追加のmakeターゲットに関する適切な情報)、およびマニュアルページを参照します。make


0

最近、パッケージマネージャーの外部のソースからインストールするときに「Checkinstall」の使用を開始しました。サードパーティのtarballから「パッケージ」を構築し、パッケージマネージャーツールを使用してインストールおよび管理(およびアンインストール)できます。

この記事をご覧ください-http://www.linuxjournal.com/content/using-checkinstall-build-packages-source

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.