AnsibleでソースからPythonをインストールする

  • 1
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Ansibleを使ってCentOSにPython2.7.10をソースからインストールしてみたいと思います。今回はPythonですが、流用すれば他のライブラリのインストールにも使えると思います。

やりたいこと(コマンド)

大体やりたいことは下記の通りです。インストール先に/usr/local/、ソースの一時保存先に/var/tmp/を指定しています。

yum install gcc
wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz -P /var/tmp/
tar xvzf /var/tmp/Python-2.7.10.tgz -C /var/tmp/
cd /var/tmp/Python-2.7.10/
./configure CFLAGS=-fPIC --enable-shared --prefix=/usr/local/
make
make install
ln /usr/local/lib/libpython2.7.so.1.0 /lib64/libpython2.7.so.1.0

configureを実行した際にエラーになるかもしれないのでgccのインストールも行っています。make installを実行した時点でインストールはできていますが、インストールしたPythonを実行した時にエラーになったので最後にシンボリックリンクを貼っています。

参考:Python エラー対処:error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

playbook

ソース

- hosts: all
  become: yes
  tasks:

    - name: Install gcc
      yum: name=gcc state=latest

    - name: Create tmp directory
      file: path=/var/tmp/Python-2.7.10 state=directory

    - name: Download Python
      get_url: >
        url=https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
        dest=/var/tmp/Python-2.7.10.tgz
        creates=/usr/local/bin/python
      environment:
        LANG: C
        LC_ALL: C
        LC_MESSAGES: C

    - name: Unarchive Python
      unarchive: src=/var/tmp/Python-2.7.10.tgz dest=/var/tmp/ copy=no

    - name: Install Python
      command: >
        {{ item }}
        chdir=/var/tmp/Python-2.7.10/
        creates=/usr/local/bin/python
      with_items:
        - './configure CFLAGS=-fPIC --enable-shared --prefix=/usr/local/'
        - make
        - make install

    - name: Link Python lib
      file: src=/usr/local/lib/libpython2.7.so.1.0 dest=/lib64/libpython2.7.so.1.0 state=link

説明

Install gcc

前述したとおり、gccが無ければエラーになるのでyumでインストールしています。

Create tmp directory

この後にUnarchive Pythonを実行した際に保存先のディレクトリが必要だったのでここで予め作っています。

Download Python

Pythonのソースをダウンロードします。すでに存在する場合はダウンロードしません。

Unarchive Python

tgzを解凍します。copy=yesの場合はAnsibleを実行しているホストのファイルを参照します。今回はサーバー上のファイルを参照したいためcopy=noとしています。これを実行した際、ファイルが存在するはずなのに'No such file or directory'というエラーに遭遇したため、environmentを追加しました。

参考:Ansible の unarchive で No such file or directory

Install Python

ここではcommandを使ってconfiguremakemake installを実行しているだけです。その際、chdirでソースの置かれているディレクトリに移動しています。これらのコマンドはよく使うのでAnsibleのデフォルトの機能であるのかと思っていましたが、調べた時はちょっとわからなかったです。createsを指定していて、すでに/usr/local/bin/pythonが存在している場合はスキップされます。

Link Python lib

冒頭に書いたエラーの対策としてシンボリックリンクを貼っています。