これがこの質問をするのに最適な場所であるかどうかわかりません。より良い場所がある場合は、正しい方向を教えてください。
2台のコンピュータがあるとしましょう。 Aは開発用コンピュータ、Bは生産用コンピュータです。 Aには、ソースコードからソフトウェアを構築するために使用できるコンパイラに似たソフトウェアがありますが、Bにはありません。
Aでは、一般的なルーチンに従ってソースからソフトウェアを簡単に構築できます。
./configure
make
その後、を実行してAにビルドされたソフトウェアをインストールできますsudo make install
。しかし、私が本当にやりたいことは、Bに構築したばかりのソフトウェアをインストールすることです。最良のアプローチは何ですか?
私は次のオプションを考えました。
- パッケージマネージャを使用してBにソフトウェアをインストールする:パッケージマネージャで利用可能なソフトウェアが非常に古くなっているため、これは私にとってオプションではありません。
- Bにコンパイラや他のビルドツールをインストールする:さまざまな制約のため、本番システムにビルドツールをインストールしたくありません。
- AからBへのバイナリの手動コピー:これはエラーが発生しやすい操作なので、バイナリが本番システムに一貫した方法でインストールされていることを確認したいと思います。
- Bにのみインストールして
make
ソースディレクトリを転送した後、sudo make install
Bで実行します。これはこれまでに見つけた最高のソリューションですが、何らかの理由で(クロックドリフトかもしれません)、すでに必要なmake
ソフトウェアを再構築しようとします。なぜなら失敗するからです。ビルドツールがBにインストールされていません。私のコンピュータのI / O速度も不都合なので、元のディレクトリを転送するのに時間がかかります。
バイナリと構成ファイルをインストールするために転送して実行できるビルドされたバイナリを含むパッケージの種類を作成する方法がある場合は、これをお勧めします。そのようなツールがありますか?
答え1
これまでに持っているものを使用してMakefileがGNU autotoolsを使用して作成された場合は、次のように設定します。ターゲットの場所またはインストールパスそして
./configure --prefix=/somewhere/else/than/the/usual/usr/local
その後実行
make && make install
最後に、プレフィックスフォルダのファイルをusr/
別のコンピュータのフォルダにコピーします。これは、両方のシステムが同じアーキテクチャを持っていると仮定し、そうでない場合は、対応するクロスツールチェーンが使用されます。
答え2
最もきれいな方法は、オペレーティングシステムが使用するパッケージングツールを使用してアプリケーション用のパッケージを作成し、他のプログラムのようにインストールすることです。これを行う方法は、パッケージマネージャとシステムによって異なり、いくつかの学習曲線があります。
/opt/packagename
ソースパッケージが特定のサブツリー(または)のソフトウェアインストールをサポートしている場合は、手動インストールが簡単になる可能性が/usr/local/packagename
あります。あるシステムでコンパイルしてインストールし、サブツリーを別のシステムの同じ場所にコピーします。このディレクトリにはすべての関連ファイルのみを含める必要があります。
変更が必要な場合は、/etc
その操作を手動で実行する必要があります。また、実際にバイナリにアクセスするには、そのバイナリをパスのディレクトリにシンボリックリンクするか、パスbin
にパッケージディレクトリを追加する必要があります。autoconf
/を使用するほとんどのパッケージは、パラメータをスクリプトに渡してインストールパスを設定automake
できます。--prefix
./configure
それにもかかわらず、コンパイルされたアプリケーションに必要なライブラリなどが何であるかを確認し、両方のシステムに互換性のあるバージョンがあることを確認する必要があります。