私は次のことをしたいと思います:
オープンソースプロジェクトから作成して、ライブラリなどにコンパイル/リンクします。ただし、実際にはこれをローカルで実行したくありません。他のマシン(もちろん同様のアーキテクチャ)の正しいディレクトリにインストールできるように、rpmにパッケージ化したいと思います。/usr/localの下にインストールするかのようにコンパイル、リンク、シンボリックリンクを作成したいのですが、実際には/ usr/local /の下のディレクトリに移動するのではなく、次のような一時ディレクトリに移動する必要があります。他のパッケージによってそこに配置されたファイルを削除せずに消去されます。
これを可能にするインストールを行うためのパラメータはありますか?つまり、/usr/local
の下にインストールされるかのようにビルドされますが、実際には~/tmp/usr/local
の下に「インストール」を配置します。
Make installを実行せず、makeで停止することを調べましたが、これにより、実行可能ファイル、オブジェクトコード、およびライブラリがソースディレクトリに混在します。
この質問への答えは、この方法でインストールしようとしているオープンソースプロジェクトによって異なります。一般的な答えは、一部のオープンソースプロジェクトには、この目的のためにオプションの変数を提供する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.
考え方はほとんど同じですが、細部が少し異なります。