2011年12月5日月曜日

RPM ベースで Puppet を動かしてみる

どうも、サイオス 那賀です。

Puppet は、構内ホストをクロスプラットフォームに集中管理するためのソフトウェアです。ユーザやパッケージの存否、設定等々を、複数のノードに一括して適用することができるようになります。

Scientific Linux 6.1 において、ごく簡単な動作を確認するまでの手順を紹介します。ここでは puppet master 側のホストの FQDN を "master.vnat", puppet 側を "node1.vnat" とします。

まず、固有のパッケージをインストールするところまでは、master, node1 とも共通です。

SELinux は permissive, もしくは disabled にします。現行のパッケージ (puppet-2.6.12-1.el6) では、enforcing だとエラーになります (Bug 726061 – puppetmaster fails on startup due to missing SSL/CA directory)。

[root@master ~]# setenforce permissive
[root@master ~]# getenforce
Permissive

デフォルトのポート番号が分からないので、iptables も、ひとまず切っておきます (8139 かな? 何その Realtek の NIC チップみたいな番号は)。

[root@master ~]# service iptables stop

パッケージは EPEL から入れますので、レポジトリ設定を入れておきます。ちなみに EPEL (Extra Packages for Enterprise Linux) とは、Fedora を元にして RHEL が作られる際に取り込まれなかったパッケージ群を、RHEL やその互換ディストリビューションのために有志が提供してくださっているプロジェクトです。

[root@master ~]# rpm -Uvh http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm

ここから、puppet master と puppet とで、インストールするパッケージが異なってきます。まず、puppet master です。"puppet-server" パッケージをインストールし、puppet master サービスを起動します。

[root@master ~]# yum install -y puppet-server
[root@master ~]# service puppetmaster start

次に puppet の側です。"puppet" パッケージを入れます。

[root@node1 ~]# yum install -y puppet

puppet が puppet master を指すように設定します。この設定ファイルは init のスクリプトに渡すものですので、/etc/sysconfig/ 以下に入っています。

[root@node1 ~]# cp /etc/sysconfig/puppet /etc/sysconfig/puppet.orig
[root@node1 ~]# vi /etc/sysconfig/puppet
[root@node1 ~]# diff -uNr \
 /etc/sysconfig/puppet.orig /etc/sysconfig/puppet
--- /etc/sysconfig/puppet.orig
+++ /etc/sysconfig/puppet
@@ -1,5 +1,5 @@
 # The puppetmaster server
-#PUPPET_SERVER=puppet
+PUPPET_SERVER=master.vnat

 # If you wish to specify the port to connect to do so here
 #PUPPET_PORT=8140

puppet から puppet master への設定変更の確認インターバルが、デフォルトでは 30 分と長いです (実運用としてはむしろ短いのですが)。テスト用に、puppet master への変更が即座に反映されるよう、5 秒を指定します。こちらの設定ファイルは、puppet のプログラム自身が読む方ですので、/etc/puppet/ 以下に入ります。設定ファイルの "main" セクション内に、"runinterval" パラメータを追加します。

[root@node1 ~]# cp \
 /etc/puppet/puppet.conf /etc/puppet/puppet.conf.orig
[root@node1 ~]# vi /etc/puppet/puppet.conf
[root@node1 ~]# diff -uNr \
 /etc/puppet/puppet.conf.orig /etc/puppet/puppet.conf
--- /etc/puppet/puppet.conf.orig
+++ /etc/puppet/puppet.conf
@@ -11,6 +11,8 @@
     # The default value is '$confdir/ssl'.
     ssldir = $vardir/ssl

+    runinterval=5
+
 [agent]
     # The file in which puppetd stores a list of the classes
     # associated with the retrieved configuratiion.  Can be loaded in

puppet サービスを起動します。

[root@node1 ~]# service puppet start

puppet master 側で、puppet からの接続を受け入れてあげます。

[root@master ~]# puppetca --list
  node1.vnat (13:C6:9C:8A:4A:5B:59:2B:EA:61:E0:87:E6:43:96:85)
[root@master ~]# puppetca --sign node1.vnat
notice: Signed certificate request for node1.vnat
notice: Removing file Puppet::SSL::CertificateRequest node1.vnat
 at '/var/lib/puppet/ssl/ca/requests/node1.vnat.pem'

動作を試してみます。デフォルトの puppet manifest ファイルに、ユーザの存在を保証させるリソースを記述します。

[root@master ~]# cat <<EOF > /etc/puppet/manifests/site.pp
user { "hoge":
  ensure     => present,
  uid        => '567',
  gid        => 'wheel',
  shell      => '/bin/sh',
  home       => '/var/hoge/',
  managehome => true,
}
EOF
[root@master ~]# service puppetmaster reload

ユーザ、追加されたかな?

[root@node1 ~]# id hoge
uid=567(hoge) gid=10(wheel) 所属グループ=10(wheel)
[root@node1 ~]# grep hoge /etc/passwd
hoge:x:567:10::/var/hoge/:/bin/sh
[root@node1 ~]# ls -ld /var/hoge/
drwx------. 4 hoge wheel 4096 11月 XX 16:23 2011 /var/hoge/

良いようですね。ではまた。

参考リンク:

# Puppet のヘンテコ設定言語を思うと、Ruby DSL を用いる Chef の方が筋が良さそうだなぁ…

0 件のコメント:

コメントを投稿