1

私はCentOS4.1マシンで作業しており、rpm-buildを使用して、必要な場所にいくつかのバイナリを貼り付けるrpmを作成しています。私の.specは:

Summary: FOO1 Data
Name: foo
Version: 1.0
Release: 1
License: GNU
Group: FOO1
URL: www.foo1data.com
Source0: foo.src 
BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot

%description

%define installdir $RPM_BUILD_ROOT/foo1/foo1-dummy

%prep
cd /usr/src/redhat/BUILD
rm -rf foo.src 
cp -rp /usr/src/redhat/SOURCES/foo.src /usr/src/redhat/BUILD
if [ $? -ne 0 ]; then 
  exit $? 
fi
cd foo.src 
cd /usr/src/redhat/BUILD/foo.src
chown -R root.root .
chmod -R a+rX,g-w,o-w .

%build

cd foo.src/main/
./build_all
cd -

%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT

mkdir -p %{installdir}/agg
install foo.src/main/agg/server/aggd %{installdir}/agg/aggd
install foo.src/main/tools/conmsgtest %{installdir}/agg/conmsgtest
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
ln -f -s /foo1/foo1-dummy/agg/conmsgtest $RPM_BUILD_ROOT/usr/local/bin/conmsgtest

%clean 
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/foo1/foo1-dummy/agg/aggd
/foo1/foo1-dummy/agg/conmsgtest
/usr/local/bin/conmsgtest

私のfoo-1.0-1.x86_64.rpmファイルは期待どおりに機能します。ただし、コマンドを実行すると、foo-1.0-1.src.rpmファイルが表示されます

rpm -ivh foo-1.0-1.src.rpm

/ usr / src / redhat/SOURCESディレクトリに追加されるfoo.srcディレクトリは空です。それでも、正しいスペックファイルがSPECSディレクトリに追加されます。

私は完全な初心者ですが、私のsrc rpmにソースが含まれるようにするために必要なことを誰かに教えてもらえますか?

また、コマンド

rpm --rebuildfoo-1.0-1.src.rpm

「--rebuild:unknown option」を返しますが、CentOSで使用できる同等のオプションはありますか?

編集:Satyaのおかげで、私はコマンドを試しました

rpmbuild --rebuildfoo-1.0-1.src.rpm

エラーが発生します

/var/tmp/rpm-tmp.19105: line 27: cd: foo.src/main/: No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.19105 (%build)
4

1 に答える 1

1

私はなんとか問題を解決することができました。ソースはディレクトリではなくtarballである必要があるようです(質問に投稿されたスペックファイルで行ったように)。

したがって、foo.srcディレクトリをfoo.tar.gzに圧縮し、%prepフェーズ中に/ usr / src / redhat/BUILDディレクトリに妥協しないようにするとうまくいくようです。これで、SRPMSディレクトリにある.src.rpmファイルが、実行時に期待どおりにSOURCESディレクトリにfoo.tar.gzファイルを貼り付けます。(ただし、これでもディレクトリが受け入れられない理由は説明されていません。...)

于 2013-01-22T12:26:12.853 に答える