離線環境安裝使用 Ansible
之前寫了一篇介紹 Ansible 的文章 ,今天回顧看來寫的有些匆忙,一些具體的操作步驟都沒有講明白,不利於讀者復現學習。最近又申請了一個幾百台機器的環境,正好藉此機會把如何在離線環境中使用 Ansible 詳細記錄一下。
使用前準備
本機環境是 Python 2.7,作業系統版本是 Red Hat Enterprise Linux Server release 7.6 (Maipo)。
- 系統必須安裝了 gcc,找一個內網的 yum 源安裝
yum install gcc
或使用 rpm 包進行安裝 - 有些依賴包編譯需要依賴 python 庫,因此必須安裝 python-devel ,安裝方法同上
- 安裝 cffi 需要依賴 libffi-devel,安裝方法同上
- 安裝 cryptography-2.6.1.tar.gz 依賴 openssl-devel
總結下來,必須使用本地 yum 源安裝幾個必須的依賴。
$ yum install -y python-devel openssl-devel gcc libffi-devel
安裝過程
ansible 安裝需要先將 18 個依賴包安裝完成,依賴包的安裝過程大同小異,都是解壓文件後,通過 python setup.py install
命令進行安裝。
- 安裝 setuptools-41.1.0.zip
- 安裝 pycrypto-2.6.1.tar.gz
- 安裝 PyYAML-5.1.tar.gz ,這個編譯安裝依賴 _yaml.h ,如果沒有會轉為純 python 模式
- 安裝 MarkupSafe-1.1.1.tar.gz
- 安裝 Jinja2-2.10.1.tar.gz
- 安裝 simplejson-3.16.0.tar.gz
- 安裝 pycparser-2.19.tar.gz
- 安裝 cffi-1.12.3.tar.gz
- 安裝 ipaddress-1.0.22.tar.gz
- 安裝 six-1.12.0.tar.gz
- 安裝 asn1crypto-0.24.0.tar.gz
- 安裝 idna-2.8.tar.gz
- 安裝 pyasn1-0.4.5.tar.gz
- 安裝 PyNaCl-1.3.0.tar.gz
- 安裝 enum34-1.1.8.tar.gz
- 安裝 cryptography-2.6.1.tar.gz
- 安裝 bcrypt-3.1.6.tar.gz
- 安裝 paramiko-2.4.2.tar.gz
- 安裝 ansible-2.9.7.tar.gz
完成後,驗證安裝結果。推薦大家使用 Github 上 ghl1024 整理的一個安裝腳本來自動化這個過程,如果需要特定的版本,自己修改腳本內容就可以。
$ ansible --version
配置與使用
使用 ansible 操作目標主機的方式有兩種,一種是通過配置主機列表後在命令行中通過主機列表名稱選擇設備。例如:
$ ansible machinelist -m command -a 'cat /etc/redhat-release'
這裡的 machinelist 對應 /etc/ansible/hosts 文件中的一組機器列表
[machinelist]
10.2.1.1
10.2.1.2
使用這種方式配置的機器列表,需要安裝了 ansible 的這台機器與列表中的主機都做了 ssh 互信。
我們可以利用 sshpass 這個應用來實現使用用戶密碼登錄,這種方式要求安裝了 ansible 的機器上先要安裝 sshpass 。在離線環境下,推薦大家通過 rpm 包進行安裝或者編譯安裝。
安裝完成後,修改 hosts 文件配置如下。
[machinelist]
10.2.1.1 ansible_ssh_user=root ansible_ssh_pass=xxxxxx
10.2.1.2 ansible_ssh_user=root ansible_ssh_pass=xxxxxx
兩種方式的配置可以混合使用。
- 配置主機列表
- 利用 sshpass 快速登錄主機
- 批量設置主機間的互信
題外話
在使用 ansible 向多台主機發送命令的過程中,有些主機有以下的 WARNING 提示。
[WARNING]: Platform linux on host -.-.-.- is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See //docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
看文字的大意是某些機器上的 python 是在 /usr/bin/python
下的,未來可能會被替換。
忽略這個錯誤的辦法是在 /etc/ansible/ansible.cfg
中添加以下配置。
[defaults]
interpreter_python = auto_legacy_silent
參考資料
- Ansible 離線安裝
- ansible的安裝配置和配合sshpass的使用
- sshpass 繞過ssh 密碼互動式驗證
- Ansible 實現批量建立互信
- Platform linux on host is using the discovered Python interpreter