RPM .spec如何逃避preun和postun?

问题描述 投票:0回答:1

我已经构建了一个package_version_1.rpm。现在我试图建立一个package_version_2.rpm。 RPM的默认行为将从package_version_1.rpm中删除未从package_version_2.rpm升级的package_version_1.rpm中的任何文件。要实现我想要的,我必须安装这样的包:

sudo rpm -i --nopreun - 下载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 rpmbuild rpm-spec
1个回答
0
投票

一种超级黑客的尝试方式:

  • Requires(pre):mypackage = 1.0
  • pre scriptlet中: mkdir -p %{_localstatedir}/lib/rpm-state/mypackageref) 复制要从1.0“保持”的文件
  • posttrans scriptlet中: 将您想要的文件移回其所属的位置 rmdir临时文件夹

注意:这很糟糕,会破坏一些事情(主要是验证和文件包所有权),因为您实际上是在rpm数据库之外放置文件。您还需要在两个单独的事务中安装两个软件包版本,而无法从全新的OS安装直接进入版本2。

© www.soinside.com 2019 - 2024. All rights reserved.