AnsibleをCentOSにインストール¶
Ansibleの入手¶
Ansibleは、Pythonモジュールです。
Pythonモジュールとして入手してインストールする方法と、CentOSのRPMパッケージとして入手してインストールする方法があります。
ここでは、RPMパッケージとしてインストールする方法を記載します。
Ansibleパッケージの入手とインストール¶
epelリポジトリからansibleパッケージをインストールします。
パッケージ | 確認日 | epelリポジトリ | epel-testingリポジトリ |
---|---|---|---|
ansible | 2016-01-28 | 1.9.4-1 | 2.0.0.2-1 |
2016-01に、Ansible 2.0がリリースされました。これからAnsibleを使い始めるのであれば、2.0から始めるのがよいかと思われます。
epelリポジトリの設定¶
epelリポジトリの設定が未であれば、epelリポジトリの設定を行うパッケージ(epel-release)をcentos-extraリポジトリ(標準で利用可能)からインストールします。
~$ sudo yum install epel-release
ansibleのインストール(CentOS 6編)¶
今回、ansibleはepel-testintリポジトリにある最新版(2.0.0)をインストールすることとし、以下のコマンドでインストールします。
~$ sudo yum --enablerepo=epel-testing install ansible ================================================================================ パッケージ アーキテクチャ バージョン リポジトリー 容量 ================================================================================ インストールしています: ansible noarch 2.0.0.2-1.el6 epel-testing 2.9 M 依存性関連でのインストールをします。: PyYAML x86_64 3.10-3.1.el6 base 157 k python-babel noarch 0.9.4-5.1.el6 base 1.4 M python-crypto x86_64 2.0.1-22.el6 base 159 k python-crypto2.6 x86_64 2.6.1-2.el6 epel 513 k python-httplib2 noarch 0.7.7-1.el6 epel 70 k python-jinja2 x86_64 2.2.1-2.el6_5 base 466 k python-keyczar noarch 0.71c-1.el6 epel 219 k python-paramiko noarch 1.7.5-2.1.el6 base 728 k python-pyasn1 noarch 0.0.12a-1.el6 base 70 k python-simplejson x86_64 2.0.9-3.1.el6 base 126 k python-six noarch 1.9.0-2.el6 base 28 k sshpass x86_64 1.05-1.el6 epel 19 k トランザクションの要約 ================================================================================ インストール 13 パッケージ
Windowsを管理ノードとするときのWinRM接続に使うpywinrmの入手とインストール¶
pythonパッケージである pywinrm は、CentOSの公式リポジトリにもEPELにも、その他のメジャーなRPMリポジトリにも見当たりません。そのため、pythonのパッケージ管理ツールpipを使ってインストールします。
また、インターネットに接続できない環境で簡単にpywinrmを利用できるよう、pywinrmからRPMパッケージを作成します。
pipのインストール¶
pipは、EPELリポジトリにあるので、yumでインストールします。
~$ sudo yum install python-pip
pipでpywinrmをインストール¶
~$ pip install pywinrm
pywinrmのRPMパッケージ作成¶
pythonモジュールにsetup.pyが含まれていれば、bdist_rpmでRPMパッケージを生成することができます。
ただし、RPMパッケージ名がpywinrmのようになります。CentOS系のRPMパッケージではPythonのモジュールはパッケージ名をpython-pywimrmのように接頭辞にpython-を付けています。CentOS系のパッケージ命名に合わせるため、bdist_rpmの--spec-onlyオプションでSPECファイルのみを生成し、それを修正してからrpmbuildします。
まず、pythonモジュールpywinrmをpipコマンドで入手します。
work$ pip install -d . work$ ls isodate-0.5.4.tar.gz pywinrm-0.1.1.tar.gz xmltodict-0.9.2.tar.gz
依存するPythonモジュールも一緒にダウンロードされました。なお、この依存するisodateとxmltodictはともにEPELリポジトリにあるので、RPM化するのはpywinrmだけです。
次に、ダウンロードしたpywinrmを展開し、bdist_rpmでSPECファイルのみを生成させます。
work$ tar xzf pywinrm-0.1.1.tar.gz work$ cd pywinrm-0.1.1 pywinrm-0.1.1$ python setup.py bdist_rpm --spec-only pywinrm-0.1.1$ ls dist pywinrm.spec
生成されたpywinrm.specファイルと、ダウンロードしたpywinrm-0.1.1.tar.gzを、rpmbuild作業場所へコピーします。
work$ cp pywinrm-0.1.1.tar.gz ~/rpmbuild/SOURCES/ work$ cp pywinrm-0.1.1/dist/pywinrm.spec ~/rpmbuild/SPECS/python-pywinrm.spec work$
python-pywinrm.specを編集します(RPMパッケージ名をpython-pywinrmに変更する修正)
@@ -1,13 +1,13 @@
-%define name pywinrm
+%define original_name pywinrm
%define version 0.1.1
%define unmangled_version 0.1.1
%define release 1
Summary: Python library for Windows Remote Management
-Name: %{name}
+Name: python-%{original_name}
Version: %{version}
Release: %{release}
-Source0: %{name}-%{unmangled_version}.tar.gz
+Source0: %{original_name}-%{unmangled_version}.tar.gz
License: MIT license
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
@@ -21,7 +21,7 @@
UNKNOWN
%prep
-%setup -n %{name}-%{unmangled_version}
+%setup -n %{original_name}-%{unmangled_version}
%build
python setup.py build
RPMを生成します。
~$ rpmbuild -ba ~/rpmbuild/SPECS/python-pywinrm.spec : ~$ ls ~/rpmbuild/RPMS/noarch python-pywinrm-0.1.1-1.noarch.rpm
できたRPMを、Ansible制御マシンへコピーしてインストールします。(またはインターナルなyumリポジトリへ置いてインストール)
~$ sudo yum localinstall python-pywinrm-0.1.1-1.noarch.rpm
Windowsを管理ノードとするときWinRM接続にActive Directoryユーザー認証するためのkerberosの入手とインストール¶
Active Directoryのドメイン参加Windowsへドメインユーザーで認証する場合、パスワード認証ではなくKerberos認証が必要です。
それには、CentOSのKerberos認証クライアントパッケージを入れて設定し、pythonモジュールのkerberosをインストールします。
CentOSのKerberos認証設定¶
Kerberos認証に必要なパッケージをインストールします。
~$ sudo yum install krb5-workstation
/etc/krb5.conf を編集します。デフォルトでサンプルのレルム名、KDCサーバー、ドメイン名対応が記載されているので、実際に使用するActive Directoryドメイン名に合わせて変更します。
@@ -4,7 +4,7 @@
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
- default_realm = EXAMPLE.COM
+ default_realm = BRAVO.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
@@ -12,11 +12,11 @@
forwardable = true
[realms]
- EXAMPLE.COM = {
- kdc = kerberos.example.com
- admin_server = kerberos.example.com
+ BRAVO.LOCAL = {
+ kdc = ad.bravo.local
+ admin_server = ad.bravo.local
}
[domain_realm]
- .example.com = EXAMPLE.COM
- example.com = EXAMPLE.COM
+ .bravo.local = BRAVO.LOCAL
+ bravo.local = BRAVO.LOCAL
また、Active DirectoryのDNSを参照するようにしておきます(/etc/resolv.conf のnameserverにActive Directory DNSサーバーのIPアドレスを記述)。
pythonモジュールのkerberosインストール¶
pythonモジュールのkerberosをインストールします。
~$ sudo yum install python-devel python-kerberos
Kerberos認証の動作確認¶
まず、制御マシン上でAnsibleのWinRM接続に使うActive DirectoryドメインユーザーのKerberos認証を実行しておきます。
~$ kinit foobar@BRAVO.LOCAL ~$ klist Ticket cache: FILE:/tmp/krb5cc_12345 Default principal: foobar@BRAVO.LOCAL Valid starting Expires Service principal 02/07/16 08:00:10 02/07/16 18:00:13 krbtgt/BRAVO.LOCAL@BRAVO.LOCAL renew until 02/14/16 08:00:10
接続確認用にインベントリファイル(~/work/hosts)を作成します。
[windows] neckar [windows:vars] ansible_user=foobar@bravo.local ansible_connection=winrm
ansibleコマンドで接続確認(win_ping)します。
work$ ansbile neckar -i ./hosts -m win_ping
接続確認のエラーと対応¶
Unspecified GSS failure¶
work$ ansbile neckar -i ./hosts -m win_ping neckar | FAILED! => { "failed": true, "msg": "ERROR! kerberos: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Cannot determine realm for numeric host address', -1765328141)), ssl: 401 Unauthorized." }
考えられる原因
- kinit でKerberos認証を実施していない
- 接続先の管理ノードがOS側で名前解決できない
→ インベントリファイルにansible_hostでIPアドレスを指定していましたが、Kerberos認証ではOS側でも名前解決が必要です。