我在rpm的%post脚本中创建一些文件,如下所示
- 规范文件版本1.1 -
%post
echo %{version} `date` > /var/info
以上脚本不存在旧rpm(即版本< = 1.0)。安装新的(版本1.1)rpm时创建/ var / info文件
我按照以下方式降级包
rpm -Uvh --oldpackage myrpm-1.0.rpm
我希望在降级rpm时删除/ var / info文件。
如果我包含以下脚本,则在卸载时删除文件但不升级。 --- spec文件---
%postun
if [ $1 =="0" ]
rm /var/info
fi
如果我降级到版本<可以帮我删除文件吗? 1.1
答案 0 :(得分:2)
我认为1.1规范中的以下%triggerin
scriptlet可以在降级为1.0时删除/var/info
:
%triggerin -- %{name} < 1.1
rm /var/info
但RPM也会在升级到1.1时触发此%triggerin
。有关详细信息,请参阅下文:
%triggerin -- %{name} < %{version}-%{release}
。问题#209·rpm-software-management / rpm
更新:我已经为解决方法编写了RPM宏:
答案 1 :(得分:1)
我不相信你只能使用scriptlet来做到这一点。据说使用scriptlet创建这样的文件是一个坏主意(正是出于这种原因)。
你想要的是:
正如我们在名为%文件列表的部分中提到的,如果文件是 在%files列表中指定,该文件将自动包含在内 在包中。有时候文件应该由。拥有 包但未安装 - 日志文件和状态文件都很好 您可能希望这种情况发生的案例。
实现这一目标的方法是使用%ghost指令。通过增加 这个指令到包含文件的行,RPM就会知道了 ghosted文件,但不会将其添加到包中。然而它仍然 需要在buildroot中。这是%ghost中的一个例子。
blather-1.0软件包默认登录到/var/log/blather.log 配置。在spec文件中,包含/var/log/blather.log文件 %文件列表。我们可以看到blather.log属于包, 并且在包装时将其删除。
%安装
触摸$ RPM_BUILD_ROOT%{_ localstatedir} /log/blather.log
...
%文件
...
%ghost%{_ localstatedir} /log/blather.log
...
#rpm -qf /var/log/blather.log
废话,1.0-1
#rpm -ql blather | grep blather.log
#rpm -e blather&amp;&amp; ls /var/log/blather.log
ls:/var/log/blather.log:没有这样的文件或目录在%install阶段触及的文件将不会安装到 /var/log/blather.log虽然它会被添加到rpm数据库中,因为 我们可以从查询文件中看到,但是从a中看不到它 包列表,但由于它是包所拥有的,它将被删除 当包被删除。此外,它可以使用 setperms修复%ghost文件的权限。
#ls -al /var/log/blather.log
-rw-r - r-- 1 root root 3448 Jun 18 17:00 /var/log/blather.log
#chmod 666 /var/log/blather.log
#ls -al /var/log/blather.log
-rw-rw-rw- 1 root root 3448 Jun 18 17:00 /var/log/blather.log
#rpm --setperms blather
#ls -al /var/log/blather.log
-rw-r - r-- 1 root root 3448 Jun 18 17:00 /var/log/blather.log