我第一次构建了一个 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 的执行(例如)或者您可以逐个设置您需要的句子,例如:
sudo service restart nginx
对于空 RPM 的问题,这是因为%files
部分没有正确填充,移动到 RPM 的二进制文件与该部分的内容(%files)相关
答案2
好吧,我错了......因为这个文档说:
当最终用户安装二进制 RPM 包时,%install 部分不会运行,但仅在创建包时运行。