내 rpm이 %install 시퀀스를 실행하지 않습니다.

내 rpm이 %install 시퀀스를 실행하지 않습니다.

처음으로 RPM 패키지를 만들었습니다. 이 RPM은 패키지된 프런트엔드 앱이며 설치 시 앱 파일을 이동하고 nginx를 다시 시작하기만 하면 됩니다. 이것은 내 사양 파일입니다.

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를 실행하고 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 실행을 정의하거나(예를 들어) 필요한 문장을 하나씩 설정할 수 있습니다. 예를 들면 다음과 같습니다.

sudo service restart nginx

RPM이 비어있는 문제는 %files섹션이 제대로 채워지지 않아서 RPM으로 이동한 바이너리가 해당 섹션의 내용(%files)과 관련되어 있기 때문입니다.

답변2

알았어, 내가 틀렸어... 이렇게 됐어문서말한다:

%install 섹션은 최종 사용자가 바이너리 RPM 패키지를 설치할 때 실행되지 않고, 패키지를 생성할 때만 실행됩니다.

관련 정보