■ はじめに
CentOS 8 では、システムで利用する Python が Python 3 になったり、デフォルトでは python
コマンドが利用できなかったりと、CentOS 7 とは Python 事情が異なります。そのため、Ansible を pip
でインストールする場合も、CentOS 7 とは少し手順が異なります(楽になったと思います)。
この記事では、以下の方針で CentOS 8 に Ansible をインストールする手段をまとめます。
Ansible インストール方針
- Python 3 を利用する
- ただし、デフォルト の Python 3 (
/usr/libexec/platform-python
) は利用しない - ansible は
dnf
ではなくpip
でインストールする - ansible は venv 内にインストールする
- インストールする ansible の バージョンは現時点の最新安定版 2.8.5
OSインストール方法によっては、パッケージの過不足があるかもしれません。
なお、私の試した限り sudo dnf install ansible
や sudo yum install ansible
では Ansible をインストールできませんでした。
コマンドまとめ
コピペしやすいように、先にコアなコマンドだけまとめます。手順の説明は次項から。
sudo dnf install python3 -y python3 -m venv ansible-py3 source ansible-py3/bin/activate pip3 install ansible
■ 手順
Python 3 のインストール
システムが利用している /usr/libexec/platform-python
とは別に、ユーザが利用する環境として別途 Python 3 をインストールします。
$ sudo dnf install python3 -y ...(略)... Installed: python36-3.6.8-2.module_el8.0.0+33+0a10c0e1.x86_64 python3-pip-9.0.3-13.el8.noarch python3-setuptools-39.2.0-4.el8.noarch Complete!
- 確認
$ python3 --version Python 3.6.8
python3
コマンドは /usr/bin/python3
です。
バージョンなしのコマンド python
、/usr/bin/python
はありません。
venv の準備
Python 環境を分離したいため、専用 の venv を用意して有効にします。
$ python3 -m venv ansible-py3 $ source ansible-py3/bin/activate (ansible-py3)$
venv を有効にした地点で、バージョンなしのコマンド python
が(venv)/bin/python
として利用できるようになります。
Ansible のインストール
venv を有効にした状態で、pip で Ansible をインストールします。
(ansible-py3)$ pip3 install ansible Collecting ansible Downloading https://files.pythonhosted.org/packages/04/25/48fee5f8048360d9375e01846fcf395dda58242ed1f25a2106b6794452eb/ansible-2.8.5.tar.gz (14.4MB) 100% |████████████████████████████████| 14.4MB 96kB/s ...(略)...
- 確認
(ansible-py3)$ ansible --version ansible 2.8.5 config file = None configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/ansible/ansible-py3/lib64/python3.6/site-packages/ansible executable location = /home/ansible/ansible-py3/bin/ansible python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Ansible 動作確認
自分自身に local コネクションプラグインを使って ping モジュールを利用する、というかんたんな動作確認をします。
(ansible-py3)$ ansible -i localhost, all -m ping -c local localhost | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
discovered_interpreter_python
とは?
上記の実行結果に discovered_interpreter_python
の値が表示されているのは、Ansible 2.8 から導入された Python インタープリタを自動で探す機能によるものです。
特に ansible_python_interpreter
変数でパスを指定していない場合は、/usr/bin/python
(バージョンなしコマンド)を利用しようとしますが、見つからない場合は一定の法則で探してきます。CentOS8/RHEL8の場合は、最初に /usr/libexec/platform-python
を調べます。この記事の作業では、以下の条件により、インタープリタを自動で探しています。
/usr/bin/python3
はあるが/usr/bin/python
はないansible_python_interpreter
変数は指定していない
なお、ansible_python_interpreter
を明示的に指定するとこうなります。
$ ansible -i localhost, all -m ping -c local -e "ansible_python_interpreter=/home/ansible/ansible-py3/bin/python" localhost | SUCCESS => { "changed": false, "ping": "pong" }
■ まとめ
CentOS 8 に、Python 3 venv 環境に、Ansible を pip
でインストールする方法をまとめました。
ふりかえると特に特別なことはしていませんが、CentOS 8 の Python 事情を意識しないと、ちょっとしたことでつまずいてしまうかもしれないので、残しておきます。