问题背景
随着 Ubuntu 25.10 等新版系统默认移除 Python 2.x,公司内部使用的旧版 Ansible(其核心模块依赖控制节点的 Python 2.7 环境)在管理这些新系统时出现错误,提示“找不到 Python 解释器”。由于目标服务器完全离线,无法通过 apt 直接安装,本文采用手动打包 Python 环境并移植到目标服务器的方案,使旧工具得以继续使用。
典型错误信息如下:
TASK [Test ping module] ********************************************************
fatal: [XXXX服务器]: FAILED! => {
"changed": false,
"module_stderr": "Shared connection to 1.1.1.1 closed.\r\n",
"module_stdout": "\r\n/bin/sh: 1: /usr/bin/python: not found\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}解决思路
核心思路为:在一台可联网的虚拟机中,模拟目标服务器的目录结构,编译安装 Python 2.7,并补全 Ansible 所需的额外依赖库(如 zipfile2),然后将整个 Python 环境目录打包,搬运至离线的目标服务器,最后通过软链接使 Ansible 能够找到该解释器。
操作步骤
1. 编译与环境准备(联网虚拟机)
为保证移植后路径有效,在本地虚拟机中创建与目标服务器一致的目录,并将 Python 安装至非标准路径 /usr/local/python2.7.18。
编译安装 Python 2.7.18
从官方源码编译,指定安装路径:
./configure --prefix=/usr/local/python2.7.18 make && make install安装 pip
使用适配 Python 2.7 的 get-pip.py 脚本:
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py /usr/local/python2.7.18/bin/python2.7 get-pip.py补全核心依赖
Ansible 某些旧模块需要
zipfile2库,从 PyPI 下载源码并手动安装:wget https://files.pythonhosted.org/packages/87/4d/3613bb68422c4912db18c5db263434a0bbce129ab3315c603683e5a0a464/zipfile2-0.0.12.tar.gz tar -zxvf zipfile2-0.0.12.tar.gz cd zipfile2-0.0.12 /usr/local/python2.7.18/bin/python2.7 setup.py install
2. 打包与移植(离线服务器)
打包 Python 环境
tar -czvf python27_package.tar.gz -C /usr/local/python2.7.18 .拷贝并解压至目标服务器
将生成的压缩包上传至离线服务器的
/usr/local/目录下并解压:tar -xzvf python27_package.tar.gz -C /usr/local/创建软链接
Ansible 默认在目标机寻找
/usr/bin/python,需手动指向新移植的解释器:ln -s /usr/local/python2.7.18/bin/python2.7 /usr/bin/python
最终效果
完成上述移植后,在 Ansible 控制节点重新执行 ping 模块,原本报错的 Ubuntu 25.10 节点已能正常响应,输出结果如下:
XXXX服务器 | SUCCESS => {
"changed": false,
"ping": "pong"
}此方案避开了复杂的系统依赖冲突,在不升级 Ansible 全局版本的前提下,快速恢复了旧版工具对新系统(Ubuntu 25.10)的管理能力。