19

キックスタート プロセスを介して構築された複数の Oracle Linux サーバーに複数のバージョンの Python をインストールする必要があるため、yum リポジトリ用の Python rpm を構築したいと考えました。デフォルトのシステムPythonインストールにインストールされない「make altinstall」を使用して手動でPythonをビルドできたので、それが正しい方法だと思いました。

多くの試行錯誤の後、.bz2 python 2.7 パッケージで始まる rpm を構築することができましたが、インストールしようとするとエラーが発生します。

error: Failed dependencies:
    /usr/local/bin/python is needed by Python-2.7.2-1.i386

なに…??? インストールしようとしているのはPythonです!!! システムのデフォルトの Python (2.4) は /usr/bin/python にあります!!! また、python ディレクトリのプロトタイピングの場所は /tmp/python2.7 です (実行可能ファイルは /tmp/python2.7/bin/python2.7 でした)。では、なぜ /usr/local/bin を調べているのでしょうか?

これが私の RPM SPEC のコアです。

%prep
%setup -q

%build
./configure --prefix=/tmp/python2.7
make

%install

make altinstall

rpm ビルド ログをよく見ると、次のように表示されます。

Requires: /bin/sh /tmp/python2.7/bin/python2.7 /usr/bin/env /usr/local/bin/python libc.so.6 libc.so.6(GLIBC_2.0)...[a lot more...]

さて、/usr/local/bin の出番です... さて、問題は、これらの要件をどのように決定しているのかということです。何か間違ったことを指定しましたか?何かをオーバーライドする必要がありますか?

多くの rpm 初心者のように、私はビルド部分を取得しますが、rpmbuild の最後に何が起こるか、実際に rpm ファイル (%files で指定したファイルを除く) に入れられるものと、その後に何が起こるかについては、あまり理解していません。 rpm インストールを実行すると、実際に発生します。

インストールが失敗する理由、または rpm ビルドがビルドしようとしているものが必要な理由を理解するために読むことができるものを誰か提案できますか?

4

2 に答える 2

23

次の行を仕様ファイルに追加することで、この問題を修正できるはずです。

AutoReq: no

これがなぜこれが必要なのかについての私の理解です。rpmbuild が #! (シバン) シバンが要件として指定するバイナリを自動的に追加します。それだけでなく、シバンが の場合、#!/usr/bin/env python解決されるものすべてに依存関係が追加されます (最初の python on $PATH)。

自動要件処理をオフにするか、問題を引き起こすすべてのシバンを見つけて別のものに変更する必要があります。

于 2011-09-14T22:58:24.440 に答える
8

rpmbuild は非常にスマートになる可能性があり、これはその 1 つです。おそらく、/usr/local/bin/python次のようなものを含むスクリプトファイルの1つからプルされました。

#!/usr/local/bin/python

頂点で。bz2 ファイル内のファイルで、このパスを grep してみてください。

于 2011-09-14T22:44:40.180 に答える