文章目录
RHEL 9.5 离线安装 Ansible 完整教程
在企业环境中,由于安全策略限制,服务器往往无法直接访问互联网。本文将详细介绍如何在 Red Hat Enterprise Linux 9.5 系统上离线安装 Ansible 自动化工具。
环境准备
系统要求
- Red Hat Enterprise Linux 9.5
- Python 3.9+ (RHEL 9.5 默认自带)
- 足够的磁盘空间(至少 500MB)
准备工作清单
- 一台能联网的机器用于下载依赖包
- 移动存储设备或网络传输方式
- 目标离线 RHEL 9.5 服务器
方法一:使用 RPM 包离线安装
步骤 1:在联网机器上下载必要的 RPM 包
首先在一台能联网的 RHEL 9.5 机器上执行以下操作:
# 创建下载目录
mkdir -p /tmp/ansible-offline/{rpms,repo}
cd /tmp/ansible-offline
# 启用必要的仓库
sudo subscription-manager repos --enable rhel-9-for-x86_64-appstream-rpms
sudo subscription-manager repos --enable rhel-9-for-x86_64-baseos-rpms
# 下载 Ansible 及其依赖包
sudo dnf download --downloadonly --downloaddir=./rpms ansible-core
sudo dnf download --downloadonly --downloaddir=./rpms python3-pip python3-setuptools
# 下载额外的依赖包(先检查可用性)
sudo dnf download --downloadonly --downloaddir=./rpms python3-cryptography python3-jinja2 python3-yaml python3-packaging
# 检查并下载其他可能的依赖包
sudo dnf download --downloadonly --downloaddir=./rpms python3-six python3-cffi python3-pycparser || true
步骤 2:创建本地仓库元数据
# 安装 createrepo_c 工具(如果没有)
sudo dnf install -y createrepo_c
# 创建仓库元数据
createrepo_c ./rpms
# 打包所有文件
tar -czf ansible-offline-rpms.tar.gz rpms/
步骤 3:在离线服务器上安装
将 ansible-offline-rpms.tar.gz
传输到离线服务器,然后执行:
# 解压文件包
tar -xzf ansible-offline-rpms.tar.gz
cd rpms
# 安装所有 RPM 包
sudo rpm -ivh *.rpm --nodeps --force
# 或者使用 dnf 本地安装
sudo dnf localinstall -y *.rpm
方法二:使用 Python 离线安装
步骤 1:在联网机器上下载 Python 包
# 创建工作目录
mkdir -p /tmp/ansible-python-offline
cd /tmp/ansible-python-offline
# 下载 Ansible 及其依赖的 Python 包
pip3 download ansible-core
pip3 download cryptography jinja2 PyYAML paramiko packaging markupsafe
# 下载额外可能需要的包
pip3 download resolvelib setuptools wheel
# 打包所有下载的文件
tar -czf ansible-python-packages.tar.gz *.whl *.tar.gz
步骤 2:在离线服务器上安装
# 解压 Python 包
tar -xzf ansible-python-packages.tar.gz
# 确保 pip 已安装
sudo dnf localinstall -y python3-pip-*.rpm # 如果没有 pip
# 离线安装 Ansible
pip3 install --no-index --find-links . ansible-core
# 或者为系统全局安装
sudo pip3 install --no-index --find-links . ansible-core
方法三:使用预编译的二进制包
步骤 1:下载 Ansible 源码
在联网机器上:
# 下载 Ansible 源码
wget https://github.com/ansible/ansible/archive/v2.15.6.tar.gz
tar -xzf v2.15.6.tar.gz
cd ansible-2.15.6
# 创建完整的离线安装包
python3 setup.py sdist
步骤 2:离线编译安装
在离线服务器上:
# 解压源码包
tar -xzf ansible-2.15.6.tar.gz
cd ansible-2.15.6
# 编译安装
sudo python3 setup.py install
# 或者安装到用户目录
python3 setup.py install --user
验证安装
无论使用哪种方法,安装完成后都应该验证 Ansible 是否正常工作:
# 检查 Ansible 版本
ansible --version
# 检查 Ansible 配置
ansible-config dump
# 测试本地连接
ansible localhost -m ping
# 检查可用模块
ansible-doc -l | head -10
预期输出示例:
ansible [core 2.15.6]
config file = None
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.18
包可用性检查
在下载依赖包之前,建议先检查包的可用性:
# 检查哪些包在当前仓库中可用
dnf list available | grep -E "python3-(cryptography|jinja2|yaml|paramiko|packaging|six|cffi)"
# 搜索 paramiko 相关包
dnf search paramiko
# 如果 python3-paramiko 不可用,可能需要启用 EPEL 仓库或使用 pip 安装
针对 python3-paramiko
不可用的情况,有以下解决方案:
解决方案 1:启用 EPEL 仓库
# 下载并安装 EPEL 仓库
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
# 启用 EPEL 仓库后重新尝试
sudo dnf download --downloadonly --downloaddir=./rpms python3-paramiko
解决方案 2:使用 pip 下载方式
# 如果某些包在 RPM 仓库中不可用,使用 pip 下载
pip3 download --dest ./python-packages paramiko cryptography jinja2 PyYAML packaging
常见问题解决
问题 1:依赖包缺失
如果遇到依赖包缺失的错误:
# 查找缺失的依赖
rpm -qR ansible-core | grep "not installed"
# 下载缺失的包
sudo dnf download --downloadonly package-name
问题 2:Python 版本兼容性
确保 Python 版本兼容:
# 检查 Python 版本
python3 --version
# 如果版本过低,可能需要升级
sudo dnf update python3
问题 3:权限问题
解决权限相关问题:
# 为当前用户创建 Ansible 配置目录
mkdir -p ~/.ansible/collections
mkdir -p ~/.ansible/plugins
# 设置合适的权限
chmod 755 ~/.ansible
配置建议
创建基本配置文件
# 创建 Ansible 配置文件
sudo mkdir -p /etc/ansible
sudo tee /etc/ansible/ansible.cfg > /dev/null <<EOF
[defaults]
host_key_checking = False
inventory = /etc/ansible/hosts
remote_user = root
ask_pass = False
[inventory]
enable_plugins = host_list, script, auto, yaml, ini, toml
[ssh_connection]
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s
pipelining = True
EOF
创建主机清单文件
# 创建示例主机清单
sudo tee /etc/ansible/hosts > /dev/null <<EOF
[local]
localhost ansible_connection=local
[webservers]
web1.example.com
web2.example.com
[databases]
db1.example.com ansible_user=dbadmin
EOF
性能优化建议
- 启用连接复用:在配置文件中启用 ControlMaster 和 ControlPersist
- 使用流水线:启用 pipelining 选项以减少 SSH 连接次数
- 调整并发数:根据目标主机性能调整 forks 参数
- 使用本地连接:对本机操作使用
ansible_connection=local
总结
本文介绍了三种在 RHEL 9.5 上离线安装 Ansible 的方法:RPM 包安装、Python 包安装和源码编译安装。每种方法都有其适用场景:
- RPM 包方式:适合标准化环境,易于管理和卸载
- Python 包方式:更灵活,可以安装最新版本
- 源码编译:完全自主可控,适合定制化需求
选择合适的安装方式,并按照本文的步骤操作,即可在离线环境中成功部署 Ansible 自动化工具。安装完成后,记得进行充分的测试以确保系统正常运行。