在离线环境下安装Ansible的方法
在这里,我将说明如何在离线环境中安装Ansible。
如果想了解Ansible的安装方法,可以参考https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#running-ansible-from-source-devel,里面介绍了各种环境下的安装方法。然而,在离线环境下安装的方法并不常见。实际上,在进行基础架构建设的工作中,很多环境都与互联网隔离,所以这里将介绍一种在离线环境下安装的方法。
安装环境
以下是本次在离线环境中安装Ansible的步骤。
-
- CentOS7
CentOS-7-x86_64-DVD-1810.iso
最小インストール
ネットワーク設定済み
上記のISOをマウント済み
インストールDVD内のパッケージからyumが利用できるように/etc/yum.repos.d配下の下記の設定ファイルを変更済み
CentOS-Base.repo(不要なrepo定義にenabled=0を追記)
CentOS-Media.repo(baseurlにDVDマウントしたディレクトリを設定)
安装方式。
如果您在在线环境中使用Ansible进行安装,只需设置EPEL存储库以使其可用,并执行yum命令即可。但是,如果处于离线环境,则无法访问EPEL存储库。
因此,需要逐个下载Ansible和相关的rpm包,并解决依赖关系后进行安装。
在调查依赖关系和版本,并从互联网上查找所需的软件包是一件很麻烦的事情,不是吗?
如果无法提供一个能够连接到互联网的环境并使用yum命令来先行调查依赖关系的话,那么只能通过试错的方式来解决。
下载Ansible的rpm文件。
首先,从以下网站下载Ansible的rpm软件包。
这次选择了截至到2020年5月30日(写作时)最新版本的ansible-2.9.9-1.el7.ans.noarch.rpm。
确认Ansible rpm文件的依赖关系。
接下来,我们需要确认Ansible的.rpm包是否缺少必要的依赖包。
尝试执行yum install命令。
yum install ansible-2.9.9-1.el7.ans.noarch.rpm
使用yum install命令会失败并显示错误,但会显示Ansible所需的依赖包或缺少的包。
yum install ansible-2.9.9-1.el7.ans.noarch.rpm ansible-2.9.9-1.el7.ans.noarch.rpm
読み込んだプラグイン:fastestmirror
ansible-2.9.9-1.el7.ans.noarch.rpm を調べています: ansible-2.9.9-1.el7.ans.noarch
ansible-2.9.9-1.el7.ans.noarch.rpm をインストール済みとして設定しています
ansible-2.9.9-1.el7.ans.noarch.rpm を調べています: ```
ansible-2.9.9-1.el7.ans.noarch
ansible-2.9.9-1.el7.ans.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ ansible.noarch 0:2.9.9-1.el7.ans を インストール
---> パッケージ ansible.noarch 0:2.9.9-1.el7.ans を インストール
--> 依存性の処理をしています: python-jinja2 のパッケージ: ansible-2.9.9-1.el7.ans.noarch
~略~
--> 依存性の処理をしています: sshpass のパッケージ: ansible-2.9.9-1.el7.ans.noarch
---> パッケージ python-backports.x86_64 0:1.0-8.el7 を インストール
---> パッケージ python-ply.noarch 0:3.4-11.el7 を インストール
--> 依存性解決を終了しました。
エラー: パッケージ: ansible-2.9.9-1.el7.ans.noarch (/ansible-2.9.9-1.el7.ans.noarch)
要求: python-jinja2
エラー: パッケージ: ansible-2.9.9-1.el7.ans.noarch (/ansible-2.9.9-1.el7.ans.noarch)
要求: sshpass
問題を回避するために --skip-broken を用いることができます。
これらを試行できます: rpm -Va --nofiles --nodigest
在查看错误日志时,我们可以看到最后一个错误消息部分需要python-jinja2和sshpass。据说python-jinja2和sshpass不存在于安装DVD上的软件包组中。
下载Ansible所依赖的库。
接下来,从以下网站上下载这两个软件包。
-
- sshpass
-
- https://centos.pkgs.org/7/centos-extras-x86_64/sshpass-1.06-2.el7.x86_64.rpm.html
-
- sshpass-1.06-2.el7.x86_64.rpm
-
- python-jinja2
-
- https://centos.pkgs.org/7/centos-x86_64/python-jinja2-2.7.2-4.el7.noarch.rpm.html
- python-jinja2-2.7.2-4.el7.noarch.rpm
由于安装环境不同,所需的软件包可能会有所不同,因此请注意错误的软件包并逐个进行下载。
使用yum命令可以一次性安装多个rpm文件,而不需要确认以下的依赖关系并逐个使用rpm命令安装软件包。
- ansibleインストールに必要な依存パッケージ(※)
ansible
┣━PyYAML
┣━python-jinja2
┣━python-paramiko
┣━python-six
┣━python2-cryptography
┃ ┣━python-ipaddress
┃ ┣━python-enum34
┃ ┣━python-six
┃ ┗━python2-pyasn1
┗━sshpass
┗━python2-pyasn1
由于所有的库依赖关系太多,已经省略。
安装Ansible
那么,让我们用以下命令来安装Ansible吧。
将下载的3个rpm文件复制到任意目录,并执行以下命令。
(在这里我们将rpm文件存储在/tmp目录下,并使用cd命令切换到/tmp目录。)
# yum install ansible-2.9.9-1.el7.ans.noarch.rpm sshpass-1.06-2.el7.x86_64.rpm python-jinja2-2.7.2-4.el7.noarch.rpm
不管依存关系如何,只需用空格分隔rpm文件并执行,yum会自动考虑依存顺序进行安装。
命令执行的结果如下所示。
読み込んだプラグイン:fastestmirror
ansible-2.9.9-1.el7.ans.noarch.rpm を調べています: ansible-2.9.9-1.el7.ans.noarch
ansible-2.9.9-1.el7.ans.noarch.rpm をインストール済みとして設定しています
sshpass-1.06-2.el7.x86_64.rpm を調べています: sshpass-1.06-2.el7.x86_64
sshpass-1.06-2.el7.x86_64.rpm をインストール済みとして設定しています
python-jinja2-2.7.2-4.el7.noarch.rpm を調べています: python-jinja2-2.7.2-4.el7.noarch
python-jinja2-2.7.2-4.el7.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ ansible.noarch 0:2.9.9-1.el7.ans を インストール
--> 依存性の処理をしています: PyYAML のパッケージ: ansible-2.9.9-1.el7.ans.noarch
Loading mirror speeds from cached hostfile
~略~
---> パッケージ python-pycparser.noarch 0:2.14-1.el7 を インストール
--> 依存性の処理をしています: python-ply のパッケージ: python-pycparser-2.14-1.el7.noarch
--> トランザクションの確認を実行しています。
---> パッケージ python-backports.x86_64 0:1.0-8.el7 を インストール
---> パッケージ python-ply.noarch 0:3.4-11.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
================================================================================
Package アーキテクチャー
バージョン リポジトリー 容量
================================================================================
インストール中:
ansible noarch 2.9.9-1.el7.ans /ansible-2.9.9-1.el7.ans.noarch 103 M
python-jinja2 noarch 2.7.2-4.el7 /python-jinja2-2.7.2-4.el7.noarch
3.0 M
sshpass x86_64 1.06-2.el7 /sshpass-1.06-2.el7.x86_64 38 k
依存性関連でのインストールをします:
PyYAML x86_64 3.10-11.el7 c7-media 153 k
libyaml x86_64 0.1.4-11.el7_0 c7-media 55 k
python-babel noarch 0.9.6-8.el7 c7-media 1.4 M
python-backports x86_64 1.0-8.el7 c7-media 5.8 k
python-backports-ssl_match_hostname
noarch 3.5.0.1-1.el7 c7-media 13 k
python-cffi x86_64 1.6.0-5.el7 c7-media 218 k
python-enum34 noarch 1.0.4-1.el7 c7-media 52 k
python-idna noarch 2.4-1.el7 c7-media 94 k
python-ipaddress noarch 1.0.16-2.el7 c7-media 34 k
python-markupsafe x86_64 0.11-10.el7 c7-media 25 k
python-paramiko noarch 2.1.1-5.el7 c7-media 268 k
python-ply noarch 3.4-11.el7 c7-media 123 k
python-pycparser noarch 2.14-1.el7 c7-media 104 k
python-setuptools noarch 0.9.8-7.el7 c7-media 397 k
python-six noarch 1.9.0-2.el7 c7-media 29 k
python2-cryptography
x86_64 1.7.2-2.el7 c7-media 502 k
python2-pyasn1 noarch 0.1.9-7.el7 c7-media 100 k
トランザクションの要約
================================================================================
インストール 3 パッケージ (+17 個の依存関係のパッケージ)
合計容量: 109 M
総ダウンロード容量: 3.5 M
インストール容量: 122 M
Is this ok [y/d/N]: y
Downloading packages:
警告: /media/dvd/Packages/PyYAML-3.10-11.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
PyYAML-3.10-11.el7.x86_64.rpm の公開鍵がインストールされていません
--------------------------------------------------------------------------------
合計 12 MB/s | 3.5 MB 00:00
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 から鍵を取得中です。
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-6.1810.2.el7.centos.x86_64 (@anaconda)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
上記の処理を行います。よろしいでしょうか? [y/N]y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : python-six-1.9.0-2.el7.noarch 1/20
インストール中 : python2-pyasn1-0.1.9-7.el7.noarch 2/20
インストール中 : python-ipaddress-1.0.16-2.el7.noarch 3/20
インストール中 : sshpass-1.06-2.el7.x86_64 4/20
インストール中 : python-backports-1.0-8.el7.x86_64 5/20
インストール中 : python-backports-ssl_match_hostname-3.5.0.1 6/20
インストール中 : python-setuptools-0.9.8-7.el7.noarch 7/20
インストール中 : python-babel-0.9.6-8.el7.noarch 8/20
インストール中 : libyaml-0.1.4-11.el7_0.x86_64 9/20
インストール中 : PyYAML-3.10-11.el7.x86_64 10/20
インストール中 : python-enum34-1.0.4-1.el7.noarch 11/20
インストール中 : python-ply-3.4-11.el7.noarch 12/20
インストール中 : python-pycparser-2.14-1.el7.noarch 13/20
インストール中 : python-cffi-1.6.0-5.el7.x86_64 14/20
インストール中 : python-markupsafe-0.11-10.el7.x86_64 15/20
インストール中 : python-jinja2-2.7.2-4.el7.noarch 16/20
インストール中 : python-idna-2.4-1.el7.noarch 17/20
インストール中 : python2-cryptography-1.7.2-2.el7.x86_64 18/20
インストール中 : python-paramiko-2.1.1-5.el7.noarch 19/20
インストール中 : ansible-2.9.9-1.el7.ans.noarch 20/20
検証中 : python-idna-2.4-1.el7.noarch 1/20
検証中 : python-markupsafe-0.11-10.el7.x86_64 2/20
検証中 : python-paramiko-2.1.1-5.el7.noarch 3/20
検証中 : python-ply-3.4-11.el7.noarch 4/20
検証中 : ansible-2.9.9-1.el7.ans.noarch 5/20
検証中 : python-enum34-1.0.4-1.el7.noarch 6/20
検証中 : libyaml-0.1.4-11.el7_0.x86_64 7/20
検証中 : python-babel-0.9.6-8.el7.noarch 8/20
検証中 : python-backports-1.0-8.el7.x86_64 9/20
検証中 : python-cffi-1.6.0-5.el7.x86_64 10/20
検証中 : python-ipaddress-1.0.16-2.el7.noarch 11/20
検証中 : sshpass-1.06-2.el7.x86_64 12/20
検証中 : python-jinja2-2.7.2-4.el7.noarch 13/20
検証中 : python2-pyasn1-0.1.9-7.el7.noarch 14/20
検証中 : PyYAML-3.10-11.el7.x86_64 15/20
検証中 : python-pycparser-2.14-1.el7.noarch 16/20
検証中 : python-six-1.9.0-2.el7.noarch 17/20
検証中 : python-setuptools-0.9.8-7.el7.noarch 18/20
検証中 : python2-cryptography-1.7.2-2.el7.x86_64 19/20
検証中 : python-backports-ssl_match_hostname-3.5.0.1 20/20
インストール:
ansible.noarch 0:2.9.9-1.el7.ans python-jinja2.noarch 0:2.7.2-4.el7
sshpass.x86_64 0:1.06-2.el7
依存性関連をインストールしました:
PyYAML.x86_64 0:3.10-11.el7
libyaml.x86_64 0:0.1.4-11.el7_0
python-babel.noarch 0:0.9.6-8.el7
python-backports.x86_64 0:1.0-8.el7
python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7
python-cffi.x86_64 0:1.6.0-5.el7
python-enum34.noarch 0:1.0.4-1.el7
python-idna.noarch 0:2.4-1.el7
python-ipaddress.noarch 0:1.0.16-2.el7
python-markupsafe.x86_64 0:0.11-10.el7
python-paramiko.noarch 0:2.1.1-5.el7
python-ply.noarch 0:3.4-11.el7
python-pycparser.noarch 0:2.14-1.el7
python-setuptools.noarch 0:0.9.8-7.el7
python-six.noarch 0:1.9.0-2.el7
python2-cryptography.x86_64 0:1.7.2-2.el7
python2-pyasn1.noarch 0:0.1.9-7.el7
完了しました!
好的,已经安装成功了。
安装 Ansible 后的确认。
为了以防万一,我们应该先确认一下可以使用Ansible命令。
# ansible --version
ansible 2.9.9
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
正确安装了版本为2.9.9的Ansible。
在CentOS 7.6的离线环境下,Ansible的安装已经完成。