【发布时间】:2018-03-02 08:52:49
【问题描述】:
我已经构建了一个 package_version_1.rpm。现在我正在尝试构建一个 package_version_2.rpm。 RPM 的默认行为将删除 package_version_1.rpm 中未从 package_version_2.rpm 升级的任何文件。为了实现我想要的,我必须像这样安装包:
sudo rpm -i --nopreun --nopostun package_version_2.rpm
但这不是我想要的。我正在寻找一种解决方案来从 .spec 文件中转义 preun 和 postun。
例如经过一些研究(以及几乎任何在 stackoverflow 中使用关键字“RPM .spec preun postun”的帖子):
http://meinit.nl/rpm-spec-prepostpreunpostun-argument-values https://www.ibm.com/developerworks/library/l-rpm2/
我发现使用该命令: rpm --showrc 打印出所有宏。我将它们导出到 txt 文件以便于搜索并尝试进行实验。我在 preun 和 postun 中创建案例,我试图找到一种解决方案来禁用 preun 和 postun 以防升级。我尝试了所有可能的想法,但没有运气。
如果部分你可以看到我的一些尝试......
%define debug_package %{nil}
%global _python_bytecompile_errors_terminate_build 0
%define _binaries_in_noarch_packages_terminate_build 0
%preun
# this runs before remove the package
echo '###################################################################'
echo 'Run preun package_version_1.rpm'
case "$1" in
0)
echo 'case 0 preun'
# This is an uninstallation.
;;
1)
# %systemd_postun %{nil}
# systemd_user_preun %{nil}
echo 'case 1 preun'
# systemctl --nopreun
exit 0
;;
esac
echo '###################################################################'
%postun
# this runs after the package has be removed
echo '###################################################################'
echo 'Run postun package_version_1.rpm'
case "$1" in
0)
echo 'case 0 postun'
# This is an uninstallation.
;;
1)
# %systemd_postun %{nil}
# systemd_user_postun %{nil}
echo 'case 1 postun'
# systemctl --nopostun
exit 0
;;
esac
echo '###################################################################'
任何帮助将不胜感激
【问题讨论】:
-
很确定你不能。为什么不将新文件包含在新 RPM 中?如果您担心大小,也可以创建一个 deltarpm。
-
感谢您的评论,很抱歉耽搁了。尺寸不完全是我的问题。