redmine-centos-ansible で Redmine 3.2 のインストールが失敗する (CentOS 7.1)
最近 Redmine をちょくちょくいろんなサーバーにインストールしています。そんなとき便利なのが RedmineをCentOSに自動インストールためのAnsibleプレイブック です。
本来 こちらの手順 にしたがって、割と長い工程でインストールしないといけないのですが、上記の Ansible Playbook ならわずか 5 コマンドでインストールが完了します。
超ベンリなんですが、最近なぜかインストールできなくなっていました。原因は簡単だったんですが、しばらくハマりましたので、解決法をご紹介しておきます。
環境
- Hyper-V 上の VM もしくは Windows 上の Vagrant(VirtualBox)
- CentOS 7.1 (x64)
- Redmine 3.2
現象
RedmineをCentOSに自動インストールためのAnsibleプレイブック の手順でコマンドを叩いていくと、最後の ansible-playbook -i hosts site.yml
でエラーが発生します。
# yum install -y epel-release
# yum install -y ansible git
# git clone https://github.com/farend/redmine-centos-ansible.git
# cd redmine-centos-ansible
# ansible-playbook -i hosts site.yml
エラー内容はこんな感じ。
# ansible-playbook -i hosts site.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default).
This feature will be removed in a future release. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [redmine-servers] *********************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [system : SELinuxの状態確認] ***************************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "The conditional check 'result.rc not in [0' failed. The error was: template error while templating string: unexpected '}', expected ']'. String: {% if result.rc not in [0 %} True {% else %} False {% endif %}"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @site.retry
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1
“SELinuxの状態確認” でエラー (fatal) になってるなー、と思って、 /etc/sysconfig/selinux
で SELINUX=disalbed
にして再起動しても効果なく、 getenforce
すれば SELinux はちゃんと無効になっているし、 Ansible のタスクを一部除外してみたりなんかしてもことごとくエラーでした。
原因と解決法
結論から言うと Ansible のバージョンが 2.0 系だったのが原因でした。
細かいところまで調べ切れていませんが、おそらくこのプレイブックが 1.9 以下の環境で作成されていて、 2.0 系で変更になった機能でひっかかっているのだと思います。後方互換がないのはイケてないですね…。
そういえば最初にこの Ansible Playbook 使った時はまだ 1.9 系だった気が…。調べてみるとインストールされていたバージョンは 2.0.2.0-1.el7 でした。
ということで一旦 Ansible をアンインストールして、 1.9 系を再インストールします。
# yum -y remove ansible
# yum -y install ansible1.9.noarch
これで再度 ansible-playbook -i hosts site.yml
を行ったところ、無事インストールが完了しました。めでたしめでたし。
なお、環境によって 1.9 系のリポジトリ名が違うかもしれません。再インストール前に yum search ansible
などで検索してください。
おまけ
参考までに Vagrant ファイルとプロヴィジョニング用スクリプトを掲載しておきます。
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-7.1"
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.network "private_network", ip: "192.168.33.121"
config.vm.provision "shell", path: "provision.sh"
end
provision.sh (プロビジョニング用シェルスクリプト)
#!/bin/sh
set -e
set -x
yum install -y epel-release
yum install -y ansible1.9.noarch git
git clone https://github.com/farend/redmine-centos-ansible.git
cd redmine-centos-ansible
ansible-playbook -i hosts site.yml