安装 RPM 时提取 %post 上的文件是一种好的做法吗?

安装 RPM 时提取 %post 上的文件是一种好的做法吗?

我正在创建一个 RPM 来分发 conda 环境,并且我想出了这个解决方案:

我能够做到。这是我从 Stackexchange 答案中得到的 .spec 文件。

总结:我使用安装阶段来解压依赖项和安装脚本,然后在 %post 中运行该脚本,该脚本在 /opt/miniconda 下创建文件。因此,我需要手动指定卸载时清理环境的步骤,并手动检查一切是否正常运行。

这是一个好的做法吗?我希望能够在安装阶段完成所有操作,这样如果出现问题,安装就可以中止,但我无法实现这一点。

答案1

这是非常糟糕的做法。

几点建议:

代替:

if [ -f /opt/miniconda/bin/python ]; then
    echo "Python is there!"
    echo "Checking version..."

    python_version="$(/opt/miniconda/bin/python --version)"
    if [[ "3.6.0" =~ "$python_version" ]]; then

你应该把

Requires: python >= 3.6.0

如果系统 python 对你来说足够了,或者你用自己的 python 创建 RPM,那么类似如下操作:

Requires: miniconda-python >= 3.6.0

对于所有这些模块来说都是类似的。

我觉得你不知道 %install 和 %post 之间的区别。所以请阅读https://stackoverflow.com/questions/34631942/how-to-run-and-interact-with-a-script-from-within-an-rpm/34634718#34634718 完成 %install 中的所有移动部分,则根本不需要 %post 部分。

相关内容