急に思い立って、Ansibleを使ってみることにした。
こんなかんじになった。
### raspberry pi に Python3.7.2をインストール
---
- hosts: all
vars:
apt_for_python_build_names: [build-essential,zlib1g-dev,zlib1g-dev,libncurses5-dev,libgdbm-dev,libnss3-dev,libssl-dev,libreadline-dev,libffi-dev,wget]
python_build_version: "3.7.2"
tasks:
- name: apt Update and Upgrade
become: true
apt:
update_cache: "yes"
force_apt_get: "yes"
autoclean: "yes"
autoremove: "yes"
upgrade: "dist"
- name: Python3.7のダウンロードと展開
unarchive:
src: "https://www.python.org/ftp/python/{{python_build_version}}/Python-{{python_build_version}}.tar.xz"
dest: .
remote_src: yes
- name: apt for Python build.
become: true
apt:
autoclean: "yes"
autoremove: "yes"
name: "{{apt_for_python_build_names}}"
- name: Running ./configure for Python build.
# command: ./configure --enable-optimizations
command: ./configure #上はビルドにすごく時間がかかる testも全て実行されてしまう
args:
chdir: "./Python-{{python_build_version}}/"
- name: make Python
make: # makeモジュールはmakeの引数が渡せない。make -j -l 4
chdir: "./Python-{{python_build_version}}"
- name: install Python
become: true
make:
chdir: "./Python-{{python_build_version}}/"
target: altinstall #既存を上書きしないインストール
- name: pip3をpip3.7に
become: true
command: python3.7 -m pip install --upgrade pip
# ビルドのためのaptインストールを削除
- name: apt Remove for Python build.
become: true
apt:
state: "absent"
name: "{{apt_for_python_build_names}}"
force_apt_get: "yes"
purge: "yes"
autoclean: "yes"
autoremove: "yes"
Ansibleをほぼ初めて使ったら、なんかひどく苦労してしまった。インベントリって何だ?から始まって、YAMLもよく知らなかったのでインデントとハイフンの位置ですったもんだ。あと、unarchiveモジュールがremote_src: yesでネット上のsrcを指定できるの知らなかったのであれこれ遠回りした、などなど。ふぅ。疲れた。