![私のrpmは%installシーケンスを実行しません](https://rvso.com/image/1539540/%E7%A7%81%E3%81%AErpm%E3%81%AF%25install%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93.png)
初めて 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 パッケージがエンドユーザーによってインストールされるときには実行されず、パッケージを作成するときにのみ実行されます。