これが質問するのに最適な場所かどうかわかりません。もっと良い場所があれば、教えてください。
仮に、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
最もクリーンな方法は、OS がアプリケーションのパッケージを作成するために使用するパッケージング ツールを使用して、他のパッケージと同様にインストールすることです。その方法はパッケージ マネージャーとシステムによって異なり、ある程度の学習が必要です。
/opt/packagename
ソース パッケージがサブツリー (またはなど)内でのソフトウェアのインストールをサポートしている場合、手動インストールがいくらか簡単になります/usr/local/packagename
。 1 台のマシンでコンパイルしてインストールし、そのサブツリーだけを別のマシンの同じ場所にコピーします。 ディレクトリには、関連するファイルだけがすべて含まれている必要があります。
に変更が必要な場合は/etc
、手動で行う必要があります。また、実際にバイナリにアクセスするには、パス内のディレクトリにシンボリックリンクするか、パッケージディレクトリをパスに追加する必要があります。/をbin
使用するほとんどのパッケージでは、スクリプトに引数を指定してインストールパスを設定できます。autoconf
automake
--prefix
./configure
いずれにしても、コンパイルしたアプリケーションに必要なライブラリなどを調べ、両方のマシンに互換性のあるバージョンがあることを確認する必要があります。