简体中文 | English
内网服务器上不了外网,也能一键装好 Ansible。 本项目把 Ansible 打成一个离线安装包:拷到内网机器上,运行一条命令就装好,全程不需要网络。
本项目同时发布在四个平台,内容一致,国内用户从镜像下载离线包通常更快:
| 平台 | 地址 | 说明 |
|---|---|---|
| GitHub | https://github.com/ghl1024/ansible-offline-install | 主仓库,开发与 Release 发布地 |
| Gitee | https://gitee.com/ghl1024/ansible-offline-install | 国内镜像,Release 由 CNB 自动同步 |
| GitCode | https://gitcode.com/haydenguo/ansible-offline-install | 国内镜像 |
| CNB | https://cnb.cool/ghl1024/ansible-offline-install | 国内镜像 |
很多公司、机房的服务器不允许连接外网(俗称「气隙环境」),这时直接在服务器上执行
pip install ansible一定会失败,因为它要去网上下载。
这个项目的办法很简单,分三步:
- 先在一台能上网的电脑上,把安装需要的全部文件打包成一个压缩包 (或者直接下载本项目已经打好并测试过的包,见下面「三步安装」);
- 把这个包拷进内网(U 盘、跳板机、内网文件服务器,都行);
- 在内网服务器上运行包里的安装脚本,把 Ansible 装进一个独立文件夹, 不动系统原有的环境,删掉文件夹就能卸载干净。
- 在你的服务器上运行下面三条命令,记下结果,选包的时候要用:
cat /etc/os-release # 看系统:Rocky Linux 9 / Ubuntu 24.04 / Debian 12 等
uname -m # 看 CPU 架构:显示 x86_64 或 aarch64(aarch64 就是 ARM64)
python3 --version # 看 Python 版本:需要 3.11 或以上-
支持的系统(要安装 Ansible 的那台机器,业内叫「控制节点」):
系统 Python EL 9 系列:Rocky Linux 9 / AlmaLinux 9 / RHEL 9 / CentOS Stream 9 3.11( python3.11包)Ubuntu 24.04 3.12(系统自带) Ubuntu 22.04 3.11(系统源自带) Debian 12 3.11(系统自带) -
其他说明:
- 不需要 root:普通用户也可以安装(装到你的家目录里);用 root 安装则全机器可用。
- 被管理的那些机器(目标节点)不需要任何准备,它们只要有 SSH 和任意版本的 Python 就行,这是 Ansible 本身的规矩,和本项目无关。
- 到本项目的 Releases 页面下载。Release 里的包由 GitHub Actions 在真实机器(包括 ARM64)上自动构建并完成安装测试。文件名长这样,每一段都有含义:
ansible-offline-install-2.0.0-el9-aarch64-py311.tar.gz
└────────────┬───────────┘ └┬┘ └─┬───┘ └──┬──┘
版本 2.0.0 系统 架构 Python 版本
-
对照你第一步查到的信息选包:
你的服务器 下载这个包 Rocky / Alma / RHEL / CentOS Stream 9,x86_64 ...-el9-x86_64-py311.tar.gzRocky / Alma / RHEL / CentOS Stream 9,ARM64 ...-el9-aarch64-py311.tar.gzUbuntu 24.04,x86_64 ...-ubuntu2404-x86_64-py312.tar.gzUbuntu 24.04,ARM64 ...-ubuntu2404-aarch64-py312.tar.gzUbuntu 22.04,x86_64 ...-ubuntu2204-x86_64-py311.tar.gzUbuntu 22.04,ARM64 ...-ubuntu2204-aarch64-py311.tar.gzDebian 12,x86_64 ...-debian12-x86_64-py311.tar.gzDebian 12,ARM64 ...-debian12-aarch64-py311.tar.gz -
上面四个系统的现成包都有(x86_64 与 ARM64 各一份),直接下载即可;
-
只有想换 Ansible 版本、或增减随包 collections 时,才需要自己打包(见下面「自己打包」一节)。
-
如果 Release 里同时提供了同名的
.sha256文件,可以一起下载用来校验文件在传输中没有损坏(可选步骤):
sha256sum -c ansible-offline-install-2.0.0-el9-aarch64-py311.tar.gz.sha256
# 显示 OK 就是文件完好- 用 U 盘、跳板机或内网文件服务器把
.tar.gz文件拷到服务器上,然后解压:
tar xf ansible-offline-install-2.0.0-el9-aarch64-py311.tar.gz
cd ansible-offline-install-2.0.0-bundlebash install.sh- 脚本会用中文逐行打印进度,最后自动做一次验证。看到类似下面的输出,出现
"ping": "pong"就说明装好了:
[ansible-offline] 正在验证安装
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
[ansible-offline] 完成。Ansible 已就绪,全程离线。
- 再试一下
ansible --version,能打印版本号就可以开始写你的第一个 playbook 了。
Q:运行 ansible 时提示 command not found?
A:普通用户安装时命令被链接到 ~/.local/bin,这个目录可能还没加进 PATH。
执行一次 export PATH="$HOME/.local/bin:$PATH" 再试,或者重新打开一个终端窗口。
Q:脚本报错「未找到 python3」或「需要 Python >= 3.11」? A:按你的系统装一下 Python 即可,不影响其他东西:
- EL 9:
sudo dnf install -y python3.11 python3.11-venv(没有 venv 子包时装python3.11-devel) - Ubuntu 22.04 / Debian 12:
sudo apt install -y python3.11 python3.11-venv(Ubuntu 22.04 用python3.11-venv) - Ubuntu 24.04 自带 Python 3.12,一般不会报这个错。
Q:脚本报错「未找到 wheelhouse」?
A:几乎都是因为只拷了 install.sh 一个文件,或者没有在解压出来的文件夹里运行。
请把完整的 .tar.gz 解压后,进入 ansible-offline-install-2.0.0-bundle 文件夹再运行。
wheelhouse 就是包里存放全部安装文件的文件夹,缺了它就没法离线安装。
Q:CentOS 7 能不能用? A:不能。CentOS 7 已在 2024 年停止维护,自带的 Python 版本也太老, 新版 Ansible 装不上。请把系统换成 EL 9 系列(如 Rocky Linux 9)。 本项目最早的版本就是给 CentOS 7 做的,后来整体重构,不再支持。
Q:会不会把系统原有的 Python 搞坏?
A:不会。Ansible 全部装进独立文件夹(root 安装在 /opt/ansible-offline,
普通用户在 ~/ansible-offline),只是把 ansible 等命令做了链接。
系统 Python 和其他程序完全不受影响。
Q:包里自带的 collections 我不想装?
A:运行 INSTALL_COLLECTIONS=0 bash install.sh 即可跳过。
collection 是 Ansible 的插件包,默认附带了两个最常用的。
Q:脚本能显示英文吗?
A:可以,bash install.sh --lang en。两个脚本都支持(默认中文)。
Q:怎么卸载? A:删掉安装目录和命令链接即可,没有残留:
# root 安装的:
rm -rf /opt/ansible-offline /usr/local/bin/ansible*
# 普通用户安装的:
rm -rf ~/ansible-offline ~/.local/bin/ansible*Q:我在联网机器上打包时,连不上 PyPI 或 Galaxy 怎么办? A:这正是本项目在国内平台设镜像的原因,分两种情况:
- 只想装 Ansible:别自己打包了,直接去 GitHub 或 Gitee 的 Releases 下载现成离线包(国内网络选 Gitee,见「开源地址」一节),现成包里已经包含 collections。
- 确实要自己打包(比如要换版本):给 pip 换一个国内源,在打包命令前面加一个环境变量即可:
PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple bash scripts/make-offline-bundle.sh(示例是清华源,阿里云等其他国内源也可以)。但要提醒:collections 是从海外的 Galaxy 下载的,国内没有稳定镜像,这一步连不通时,请用上面下载现成包的办法。
- 离线包:把安装需要的全部文件提前打包好的一个压缩文件,拿到没网的机器上也能安装。
- wheel:Python 的预制安装包格式,好比 Windows 里的安装程序,装的时候不用现场编译,快且稳。
- venv(虚拟环境):一个独立的文件夹,专门放这一套 Ansible,和系统环境互不干扰,删除文件夹即彻底卸载。
- collection:Ansible 的插件包,用来扩展功能,比如管理防火墙、云厂商的模块。本项目默认附带
ansible.posix和community.general两个最常用的。
- 从 Releases 下载的离线包里已经包含
ansible.posix和community.general(含它们的依赖),运行install.sh时会自动装好,无需任何额外操作。 collections-requirements.yml记录了清单细节;想增减 collection 名单,改这个文件后按下面一节自己打包即可。
- 在一台能上网、且系统 / CPU 架构 / Python 版本与离线机一致的机器上,克隆本仓库后运行:
bash scripts/make-offline-bundle.sh产物在仓库的
dist/目录下:ansible-offline-install-2.0.0-bundle.tar.gz和它的.sha256校验文件。拷到离线机上按「三步安装」的第二、三步操作即可。
可选项(环境变量):
WITH_COLLECTIONS=0:只打包 Ansible 本体,不带 collections,包更小。PYTHON_BIN=python3.11:指定用哪个 Python 打包(系统里有多个 Python 时)。- 想换 Ansible 版本:改
requirements.txt里ansible-core的版本号再打包。 PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple:海外网络不通时给 pip 换国内源(示例为清华源,也可换阿里云源)。
requirements.txt 锁定了 ansible-core==2.18.19(最后一个支持 Python 3.11 的
2.18 系列版本),保证每台机器装出来的环境完全一致、可复现。
按「你会用到的顺序」排列:
- 🚀
install.sh— 离线机上运行的安装脚本,普通用户只需要这一个(中文界面,--lang en切英文) - 📦
scripts/make-offline-bundle.sh— 联网机上打包的构建脚本,自己打离线包时用 - 📌
requirements.txt— ansible-core 版本锁定 - 🧩
collections-requirements.yml— 随包附带的 collections 清单 - 🤖
.github/workflows/ci.yml— CI:脚本检查 + 8 种系统/架构组合的安装测试 - 🚢
.github/workflows/release.yml— 发版:8 个目标的离线包自动构建、实测与发布 - 📝
CHANGELOG.md— 版本更新记录 - 📄
LICENSE— MIT 许可证
- Galaxy collections 随包离线安装
- CI:脚本检查 + EL 9、Ubuntu 24.04 / 22.04、Debian 12 容器安装测试,覆盖 x86_64 与 ARM64
- Release 离线包覆盖 x86_64 与 ARM64,由 GitHub Actions 在原生 ARM64 机器上自动构建、实测并发布
遇到问题或有需求,欢迎到Issues 里留言,尽量附上你的系统版本(cat /etc/os-release 的输出)和报错截图或文字。
MIT License。见 LICENSE。