问题背景

随着 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)的管理能力。

最后修改:2026 年 03 月 31 日
如果觉得我的文章对你有用,请随意赞赏