私のrpmは%installシーケンスを実行しません

私のrpmは%installシーケンスを実行しません

初めて RPM パッケージをビルドしました。この RPM はパッケージ化されたフロントエンド アプリで、インストールではアプリ ファイルを移動して nginx を再起動するだけで済みます。これが私の spec ファイルです。

Name:           my-portal-app

Version:        2.1

Release:        1%{?dist}

Summary:        Descripcion

License:        No-license

URL:            nourl

Source0:        my-portal-app-2.1.tar.gz

%description
My app install

%prep
%setup -q


%build
#%configure
#make %{?_smp_mflags}

%install
#rm -rf $RPM_BUILD_ROOT
cp -r ./* /var/www/myapp
service nginx restart

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%doc

%changelog

rpmbuild -ba、exit 0 を実行し、%install シーケンスが計算されると (ファイルをコピーして nginx を再起動)、すべて正常になります。rpmbuild は RPM (rpmbuild/RPMS 内) と SRPM (rpmbuild/SRPMS 内) を生成します。

しかし、私がよく理解しているように、rpm -ivh name.rpmでSRPMをインストールすると、%installシーケンスを実行する必要がありますそうですか? そうであれば、シーケンスは実行されていません (/var/www/myapp にファイルをコピーせず、nginx を再起動しません)。RPM の実行も同様です。

SRPM の内容は正しく、すべてのファイルが含まれています。そして、RPM は空です。

答え1

おっしゃるとおり、%installこのセクションは、設定する必要がある初期 RPM ビルド文を構成するためのものです。

目標を達成するには、%postセクションを使用する必要があります。その中で、独自の .sh の実行を定義することも、必要な文を 1 つずつ設定することもできます。例:

sudo service restart nginx

空の RPM の問題は、%filesセクションが適切に入力されていないためであり、RPM に移動されたバイナリはそのセクションの内容 (%files) に関連しています。

答え2

ああ、私は間違っていた...このようにドキュメント言う:

%install セクションは、バイナリ RPM パッケージがエンドユーザーによってインストールされるときには実行されず、パッケージを作成するときにのみ実行されます。

関連情報