在Rocky Linux 8的Kickstart %post脚本中运行ansible-galaxy报错求助
解决Rocky Linux 8 %post脚本运行ansible-galaxy的问题
问题根源拆解
- 初始报错:
/mnt/sysimage/bin/ansible-galaxy的脚本解释器写死为#!/usr/bin/python3.9,但安装环境(未chroot)下/usr/bin/python3.9不存在,仅目标系统目录/mnt/sysimage/usr/bin/python3.9有该文件。 - 二次报错:使用
--nochroot调用目标系统的python3.9时,安装环境的动态链接器无法找到目标系统内的libpython3.9.so.1.0,因为默认不会加载/mnt/sysimage/usr/lib64这类路径。
可行解决方案
方案1:用默认chroot模式执行(推荐)
%post默认会自动chroot到/mnt/sysimage环境,此时目标系统的路径就是当前路径,直接运行命令即可:
%post --log=/root/ansible-post.log # 直接在chroot后的目标系统环境运行ansible-galaxy ansible-galaxy collection install <你的集合名称> %end
说明:chroot后/usr/bin/python3.9路径存在,ansible-galaxy的默认shebang能正常匹配到解释器。
方案2:--nochroot模式下临时设置库路径
若必须使用--nochroot,需先让安装环境的动态链接器找到目标系统的Python库:
%post --nochroot --log=/root/ansible-post.log # 临时指定动态链接库优先加载目标系统的lib目录 export LD_LIBRARY_PATH=/mnt/sysimage/usr/lib64:$LD_LIBRARY_PATH # 直接用目标系统的python3.9执行ansible-galaxy脚本 /mnt/sysimage/bin/python3.9 /mnt/sysimage/bin/ansible-galaxy collection install <你的集合名称> %end
方案3:临时修改ansible-galaxy的shebang路径
直接替换脚本内的解释器路径,适配安装环境的路径结构:
%post --nochroot --log=/root/ansible-post.log # 修改ansible-galaxy的shebang为目标系统的python路径 sed -i 's|#!/usr/bin/python3.9|#!/mnt/sysimage/usr/bin/python3.9|' /mnt/sysimage/bin/ansible-galaxy # 配合库路径设置后运行脚本 export LD_LIBRARY_PATH=/mnt/sysimage/usr/lib64:$LD_LIBRARY_PATH /mnt/sysimage/bin/ansible-galaxy collection install <你的集合名称> %end
注意事项
- 确保kickstart的包列表已包含
ansible-core(或ansible)和python39,否则目标系统内不会有对应工具和解释器。 - 默认chroot模式下,所有命令的路径均为目标系统内的路径,无需添加
/mnt/sysimage前缀。
内容的提问来源于stack exchange,提问作者Metre
相关产品推荐
相关产品推荐

