web-dev-qa-db-ja.com

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

私は次のことをしたいと思います:

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

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

Make installを実行せず、makeで停止することを調べましたが、これにより、実行可能ファイル、オブジェクトコード、およびライブラリがソースディレクトリに混在します。

4
Steve Cohen

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

make DESTDIR=/tmp install

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

もう1つの難しいアプローチは、chroot環境でビルド、インストール、およびすべてを実行することです。 OverlayFS のようなものを使用すると、それが簡単になりますが、これは通常、抵抗が最小のパスではありません。

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

最新のopenssl(コメントには記載されていますが、質問にはまだ記載されていません)の場合、 [〜#〜] install [〜#〜] ファイルには次のように記載されています。

 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の場合 [〜#〜] install [〜#〜] は次のように述べています。

 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.

考え方はほとんど同じですが、細部が少し異なります。

6
Eirik Fuller