maehachi08 Anything Blog

2012年04月20日
Puppetインストール

システム自動管理ツール

『あーWebサーバ5台作っといてや!構成は今のやつと同じで。』なんて言われた時、あなたはどうやって既存サーバと同じ構成のサーバを構築しますか?ちゃんと更新されているのか分からない設計書や設定シートを探しますか?それとも既存サーバの設定ファイルをsosreportコマンドで固めて取ってきて確認しますか?どちらにしろ、あらゆる作業ミスがまとわりつきます。
同じ構成でIPアドレスやホスト名の部分のみ変えてコピーを同期させるスクリプトを組むもいいでしょう。まぁ使い捨てで勿体無いし、車輪の再発明のような気もします。

サーバの構成を統合的に自動管理できるツールとしてはPuppetChefなどがあります。
今回はPuppetを紹介したいと思います。

Puppetとは

本家サイトによると、Puppetはパッチ管理やコンプライアンスのコンフィグレーションや配布といったシステム管理者を取り巻くITライフサイクルにおける業務を補助するIT自動化ソフトウェアです。Puppetを使うと、何度もこなすタスクを簡単に自動化でき、即座に適用すべきものも素早くデプロイでき、オンプレミスだろうがクラウドだろうが10台規模から1000台規模まで変更管理を得意とします。

Puppetはオープンソース版と商用版を用意しています。あなたはここでこれら2つの違いを確認でき、あなたの組織に最適なのはどちらか決めることができます。

yumレポジトリの設定

今回はyumでPuppetをインストールするので、必要なレポジトリを登録しておきます。

# yum install yum-priorities
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * rpmforge: fr2.rpmfind.net
 * updates: ftp.nara.wide.ad.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package yum-plugin-priorities.noarch 0:1.1.30-10.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================
 Package                        Arch            Version                   Repository     Size
==============================================================================================
Installing:
 yum-plugin-priorities          noarch          1.1.30-10.el6             base           22 k

Transaction Summary
==============================================================================================
Install       1 Package(s)

Total download size: 22 k
Installed size: 28 k
Is this ok [y/N]: y
Downloading Packages:
yum-plugin-priorities-1.1.30-10.el6.noarch.rpm                         |  22 kB     00:00
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-2.el6.centos.7.x86_64 (@anaconda-CentOS-201112102333.x86_64/6.2)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : yum-plugin-priorities-1.1.30-10.el6.noarch                                 1/1

Installed:
  yum-plugin-priorities.noarch 0:1.1.30-10.el6

Complete!

リポジトリ設定ファイルを編集します。

# vi /etc/yum.repos.d/dlutter.repo

# cat /etc/yum.repos.d/dlutter.repo
[dlutter-rhel5]
name=Unsupported RHEL5 packages (lutter)
baseurl=http://people.redhat.com/dlutter/yum/rhel/5/$basearch/
enabled=1
gpgcheck=0

Puppetのインストール

CentOS6.2にPuppetをインストールします。
今回はPuppetクライアント(puppet)とPuppetサーバ(puppet-serever)をインストールします。

# yum install puppet puppet-server
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * updates: rsync.atworks.co.jp
dlutter-rhel5                                                      |  951 B     00:00
dlutter-rhel5/primary                                              | 4.8 kB     00:00
dlutter-rhel5                                                                       15/15
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package puppet.noarch 0:0.24.5-1.el5 will be installed
--> Processing Dependency: ruby(abi) = 1.8 for package: puppet-0.24.5-1.el5.noarch
--> Processing Dependency: facter >= 1.1.4 for package: puppet-0.24.5-1.el5.noarch
--> Processing Dependency: ruby >= 1.8.1 for package: puppet-0.24.5-1.el5.noarch
--> Processing Dependency: /usr/bin/ruby for package: puppet-0.24.5-1.el5.noarch
---> Package puppet-server.noarch 0:0.24.5-1.el5 will be installed
--> Running transaction check
---> Package facter.noarch 0:1.5.0-2.el5 will be installed
---> Package ruby.x86_64 0:1.8.7.352-4.el6_2 will be installed
---> Package ruby-libs.x86_64 0:1.8.7.352-4.el6_2 will be installed
--> Processing Dependency: libreadline.so.5()(64bit) for package: ruby-libs-1.8.7.352-4.el6_2.x86_64
--> Running transaction check
---> Package compat-readline5.x86_64 0:5.2-17.1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================
 Package                Arch         Version                    Repository           Size
==========================================================================================
Installing:
 puppet                 noarch       0.24.5-1.el5               dlutter-rhel5       486 k
 puppet-server          noarch       0.24.5-1.el5               dlutter-rhel5        23 k
Installing for dependencies:
 compat-readline5       x86_64       5.2-17.1.el6               base                130 k
 facter                 noarch       1.5.0-2.el5                dlutter-rhel5        38 k
 ruby                   x86_64       1.8.7.352-4.el6_2          updates             532 k
 ruby-libs              x86_64       1.8.7.352-4.el6_2          updates             1.6 M

Transaction Summary
==========================================================================================
Install       6 Package(s)

Total download size: 2.8 M
Installed size: 8.3 M
Is this ok [y/N]: y
Downloading Packages:
(1/6): compat-readline5-5.2-17.1.el6.x86_64.rpm                    | 130 kB     00:00
(2/6): facter-1.5.0-2.el5.noarch.rpm                               |  38 kB     00:00
(3/6): puppet-0.24.5-1.el5.noarch.rpm                              | 486 kB     00:01
(4/6): puppet-server-0.24.5-1.el5.noarch.rpm                       |  23 kB     00:00
(5/6): ruby-1.8.7.352-4.el6_2.x86_64.rpm                           | 532 kB     00:01
(6/6): ruby-libs-1.8.7.352-4.el6_2.x86_64.rpm                      | 1.6 MB     00:03
------------------------------------------------------------------------------------------
Total                                                     349 kB/s | 2.8 MB     00:08
警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
 Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
 Package: centos-release-6-2.el6.centos.7.x86_64 (@anaconda-CentOS-201112102333.x86_64/6.2)
 From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : compat-readline5-5.2-17.1.el6.x86_64                                   1/6
  Installing : ruby-libs-1.8.7.352-4.el6_2.x86_64                                     2/6
  Installing : ruby-1.8.7.352-4.el6_2.x86_64                                          3/6
  Installing : facter-1.5.0-2.el5.noarch                                              4/6
  Installing : puppet-0.24.5-1.el5.noarch                                             5/6
  Installing : puppet-server-0.24.5-1.el5.noarch                                      6/6

Installed:
  puppet.noarch 0:0.24.5-1.el5             puppet-server.noarch 0:0.24.5-1.el5

Dependency Installed:
  compat-readline5.x86_64 0:5.2-17.1.el6       facter.noarch 0:1.5.0-2.el5
  ruby.x86_64 0:1.8.7.352-4.el6_2              ruby-libs.x86_64 0:1.8.7.352-4.el6_2

Complete!

既定ファイル類の削除

Puppetはインストールした段階で/etc/puppetディレクトリにファイルやディレクトリを作成します。
こららをそのままにした状態でPuppetサーバを起動すると予期しない設定が反映されてしまう可能性があります。
そこで、一度、これらのファイルやディレクトリを他のディレクトリに退避します。

# cd /etc/puppet
# ls -l
合計 20
-rw-r--r-- 1 root root 2552 12月  9 07:58 2011 auth.conf
-rw-r--r-- 1 root root  381  9月  9 08:14 2011 fileserver.conf
drwxr-xr-x 2 root root 4096  1月 21 07:45 2012 manifests
-rw-r--r-- 1 root root  853  9月 10 01:54 2011 puppet.conf

# cp -Rp /etc/puppet/ /root/default-backup

マニフェスト作成(/etc/hosts編)

Puppetサーバは、マニフェストファイルが存在すれば起動することが出来ます。
まずは、manifestsディレクトリを作成します。

# cd /etc/puppet

# mkdir -p /etc/puppet/manifests

# cd manifests

# vi site.pp

# cat site.pp
file { '/etc/passwd':
        owner => apache,
        group => apache,
}

puppet.conf設定

ベースとなるpuppet.confをコピーします。

# cp /root/default-backup/puppet.conf /etc/puppet/puppet.conf

puppetサーバの起動

最初はフロントエンドで起動してみましょう。

# puppetmasterd --no-daemonize  --verbose --debug

puppetクライアントの起動

最初はフロントエンドで起動してみましょう。
ここまでの手順では以下のようにエラーが出ます。

# puppetd --server pachi  --no-daemonize --verbose
dnsdomainname: Unknown host
dnsdomainname: Unknown host
notice: Starting Puppet client version 2.7.9
dnsdomainname: Unknown host
dnsdomainname: Unknown host
err: Could not retrieve catalog from remote server: getaddrinfo: Name or svice not known
notice: Using cached catalog
err: Could not retrieve catalog; skipping run
err: Could not send report: getaddrinfo: Name or service not known

これは証明書の問題です。
puppetサーバは、インストール時にサーバ名をCNにした証明書を作成します。このサーバ名は、hostnameコマンドを引いているようでDSNに登録されているFQDNではありません。従ってFQDNでホスト名.ドメイン名といったサーバ名を付けてクライアントからアクセスするとホスト名.ドメイン名の証明書はないとエラーになります。以下のコマンドでホスト名.ドメイン名の証明書を作成します。

# puppetca --generate pachi.localdomain
warning: You have configuration parameter $certname specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
notice: pachi.localdomain has a waiting certificate request
notice: Signed certificate request for pachi.localdomain
notice: Removing file Puppet::SSL::CertificateRequest pachi.localdomain at '/var/lib/puppet/ssl/ca/requests/pachi.localdomain.pem'
notice: Removing file Puppet::SSL::CertificateRequest pachi.localdomain at '/var/lib/puppet/ssl/certificate_requests/pachi.localdomain.pem'

再度puppetクライアントを起動します。

# puppetd --server pachi  --no-daemonize --verbose
warning: You have configuration parameter $certname specified in [puppetmasterd], which is a deprecated section. I'm assuming you meant [master]
notice: Starting Puppet client version 2.7.9
info: Caching catalog for pachi
info: Applying configuration version '1329925987'
notice: Finished catalog run in 0.05 seconds