一時ディレクトリにインストールしますか?

一時ディレクトリにインストールしますか?

私は次のことをやりたいです:

オープンソース プロジェクトから作成して、ライブラリなどにコンパイル/リンクします。ただし、実際にこれをローカルで実行したくはありません。他のマシン (もちろん同様のアーキテクチャを持つ) の適切なディレクトリにインストールできるように、rpm にパッケージ化したいと考えています。/usr/local にインストールするかのようにコンパイルしてリンクし、シンボリック リンクを作成したいのですが、実際には /usr/local/ の下のディレクトリではなく、他のパッケージによってそこに置かれたファイルを削除せずに消去できる一時ディレクトリに移動したいのです。

これを可能にする make install のパラメータはありますか?つまり、 の下にインストールされるかのようにビルドします/usr/localが、実際には「インストール」を の下に配置します。~/tmp/usr/local

単に make install を実行せずに make で停止する方法も検討しましたが、これにより、実行可能ファイル、オブジェクト コード、およびライブラリがソース ディレクトリ内で混在してしまいます。

答え1

この質問に対する答えは、この方法でインストールしようとしているオープンソース プロジェクトによって異なります。一般的な答えは、一部のオープンソース プロジェクトには、この目的のためにオプションの変数を提供する Makefile があるということです。具体的な例の 1 つは gdb です。gdb のトップ レベルの Makefile は変数を使用します (ただし、割り当ては行わないようです)。gdbDESTDIRビルド ディレクトリでこのコマンドを実行すると、

make DESTDIR=/tmp install

/tmpファイルをコピーする前に、各宛先パスの先頭に追加されます。

もう1つのより難しいアプローチは、ビルド、インストールなどすべてをchroot環境で行うことです。次のようなものを使用します。オーバーレイFSそれをより簡単にすることはできますが、これは通常、最も抵抗の少ない道ではありません。

もう 1 つの可能性は、すでに Debian フレーバー (Ubuntu など多数を含む) を使用している場合にはおそらくもっと簡単なのですが、オープン ソース プロジェクトに対応する Debian ソース パッケージを取得し (このようなソース パッケージがない場合、この方法はおそらく簡単ではありません)、そのソースから Debian パッケージをビルドする手順に従ってください。 では.rpmなくが本当に必要な場合は、を に.deb変換するか、をビルドするプロセスで残されたディレクトリ構造からを構築することができます。.deb.rpm.rpm.debこの答えソースから Debian パッケージをビルドする方法についての情報源の 1 つです。

最新のものopenssl(コメントでは言及されているが、質問ではまだ言及されていない)については、インストールファイルにはこう書かれています:

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make DESTDIR=/tmp/package-root install         # Unix
   $ mms/macro="DESTDIR=TMP:[PACKAGE-ROOT]" install ! OpenVMS

 The specified destination directory will be prepended to all
 installation target paths.

これはバージョンによって異なりますopenssl。1.0.2の場合インストールこう言っています。

 Package builders who want to configure the library for standard
 locations, but have the package installed somewhere else so that
 it can easily be packaged, can use

   $ make INSTALL_PREFIX=/tmp/package-root install

 (or specify "--install_prefix=/tmp/package-root" as a configure
 option).  The specified prefix will be prepended to all
 installation target filenames.

アイデアはほとんど同じですが、細部が若干異なります。

関連情報