【Ansible備忘録①】Ansibleの2通りのインストール方法

前提

実行環境は、AWSのEC2を使用する。



yum でインストール

こちらのインストール方法では、バージョンがだいぶ古くなる。



Amazon Linux 2 では Ansible を以下のコマンドでインストールできない。

$ sudo yum -y install ansible
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
パッケージ ansible は利用できません。
エラー: 何もしません


ansible is available in Amazon Linux Extra topic "ansible2"

To use, run
# sudo amazon-linux-extras install ansible2

Learn more at
https://aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras

上記、ヒントを元にインストールする。

# インストール
$ sudo amazon-linux-extras install ansible2

# バージョン確認
$ ansible --version
ansible 2.4.6.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ec2-user/.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.16 (default, Jun 19 2019, 17:20:54) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]



pip でインストール

こちらのインストール方法では、最新のバージョンをインストールできる。



必要なパッケージのインストール

Python3 が依存しているパッケージを先にインストールする。

$ sudo yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel



pyenv のインストール

pyenv をインストールする。

この時、ユーザーが十分な権限を持たない場合、 pyenv のインストールコマンドでエラーとなるので、ここでは ec2-user を指定しておく。

$ sudo git clone https://github.com/yyuu/pyenv.git /usr/bin/.pyenv
Cloning into '/usr/bin/.pyenv'...
remote: Enumerating objects: 17352, done.
remote: Total 17352 (delta 0), reused 0 (delta 0), pack-reused 17352
Receiving objects: 100% (17352/17352), 3.37 MiB | 3.30 MiB/s, done.
Resolving deltas: 100% (11818/11818), done.

$ sudo mkdir /usr/bin/.pyenv/shims
$ sudo mkdir /usr/bin/.pyenv/versions
$ sudo chown -R ec2-user:ec2-user /usr/bin/.pyenv



環境変数の追加

pyenv のパスを追加する。

$ sudo vi ~/.bashrc

内容は以下の通り。

省略

# Python3 設定
export PYENV_ROOT="/usr/bin/.pyenv"
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"

追加後、.bashrc を読み込む。

$ source ~/.bashrc



Python3 のインストール

pyenv でインストールできるバージョンの一覧を表示する。

$ pyenv install --list

省略

  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.6.9
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.7.3
  3.7.4
  3.8-dev
  3.9-dev

省略

Pythonのバージョンを指定してインストールする。

$ pyenv install 3.6.9
Downloading Python-3.6.9.tar.xz...
-> https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.xz
Installing Python-3.6.9...
Installed Python-3.6.9 to /usr/bin/.pyenv/versions/3.6.9



デフォルトで使用するPythonを変更する

変更前は、デフォルトの Python2 が設定されている。

$ python -V
Python 2.7.16



pyenv でデフォルトで使用する Python を3に固定する。

$ pyenv global 3.6.9

$ python -V
Python 3.6.9



Ansible をインストール

Python3 に固定後、 ansibleをインストールする。

$ pip install --user ansible



これで最新バージョンが使える。

$ ansible --version
ansible 2.8.2
  config file = None
  configured module search path = ['/home/ec2-user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ec2-user/.local/lib/python3.6/site-packages/ansible
  executable location = /home/ec2-user/.local/bin/ansible
  python version = 3.6.9 (default, Jul 24 2019, 23:26:00) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]



おまけ pyenv-virtualenv の追加

pyenv-virtualenv をダウンロードする。

$ git clone https://github.com/yyuu/pyenv-virtualenv.git /usr/bin/.pyenv/plugins/pyenv-virtualenv



pyenv-virtualenv 用の設定を追加する。

$ sudo vi ~/.bashrc

内容は以下の通り。

省略

eval "$(pyenv virtualenv-init -)"

.bashrc を読み込む。

$ source ~/.bashrc



動作確認を確認する。

$ pyenv virtualenv 3.6.9 python3.6
Requirement already satisfied: setuptools in /usr/bin/.pyenv/versions/3.6.9/envs/python3.6/lib/python3.6/site-packages (40.6.2)
Requirement already satisfied: pip in /usr/bin/.pyenv/versions/3.6.9/envs/python3.6/lib/python3.6/site-packages (18.1)

これで仮想環境も Python3 で作成できる。

$ pyenv versions
  system
* 3.6.9 (set by /usr/bin/.pyenv/version)
  3.6.9/envs/python3.6
  python3.6



妥協したところ

Python3.7 だとインストールができなかった。

$ pyenv install 3.7.4
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...

BUILD FAILED (Amazon Linux 2 using python-build 1.2.13)

Inspect or clean up the working tree at /tmp/python-build.20190724230619.3770
Results logged to /tmp/python-build.20190724230619.3770.log

Last 10 log lines:
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/main_parser.py", line 12, in <module>
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in <module>
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in <module>
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in <module>
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in <module>
  File "/tmp/tmpa9ofomci/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
  File "/tmp/python-build.20190724230619.3770/Python-3.7.4/Lib/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
make: *** [install] エラー 1