我正在创建一个 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 部分。