「puppet」の編集履歴(バックアップ)一覧はこちら
puppet - (2009/02/25 (水) 18:51:12) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
#right(){Last Update &date()}
*Puppet
Linuxのシステム管理ツール。
多数のLinuxを管理者の定義した管理ポリシー(manifest)に従わせることができ、
まさに操り人形。
ファイルの配布、サービスの起動/停止、パッケージのインスト、等々を集中管理。
Cfengineの後継と目されていて、柔軟なmanifestの定義が魅力。
Rubyで作られている。
最新は0.24系。
**リンク
-[[本家サイト>http://reductivelabs.com/trac/puppet]]:
-[[puppet wiki (パペウィキ)>http://trac.mizzy.org/puppet]]:本家のドキュメントを日本語化している
-[[オープンソースなシステム自動管理ツール Puppet>http://gihyo.jp/admin/serial/01/puppet]]:全18回の技術評論社のWEB記事
-[[Puppetを導入してみました>http://blog.nicetrip.org/ruby/puppet%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F]]:
-[[Puppet の競合 Chef のファーストインプレッション>http://trac.mizzy.org/public/wiki/ChefFirstImpression]]:Chefは手間が掛かりそう
-[[ネットワーク上でのシステム管理を容易にするPuppet>http://www.itmedia.co.jp/enterprise/articles/0808/25/news014.html]]:ITmediaの記事
-[[だ!日記 - ロンドンより>http://www.madoro.org/nikki/tag/puppet]]
-[[システム自動管理ツールPuppetを使ってみた>http://labs.unoh.net/2008/02/puppet.html]]
-[[ネットワーク上でのシステム管理を容易にするPuppet>http://sourceforge.jp/magazine/08/08/21/0210246]]
-[[Puppet使い始めました>http://l-w-i.net/m/20080504_01.txt]]
-[[Puppetって?>http://projects.tsuntsun.net/~nabeken/Puppet.html]]
-[[Hideki's Blog 2nd>http://zephel.com/archives/linuxunix/puppet/]]
-[[Puppet(システム自動設定ツール)の導入を考える>http://kurusugawa.jp/blog/archives/category/puppet]]
-[[Lucie EC2 の Puppet 設定を置くためのリポジトリ>http://github.com/yasuhito/ec2-puppet/tree/master]]
**書籍
-[[Pulling Strings with Puppet>http://www.amazon.com/dp/1590599780]]
**ダウンロード
-[[EPELのRHEL5(i386)用RPM>http://download.fedora.redhat.com/pub/epel/5/i386/]]:puppet、puppet-server、facterをDLできる
&ref(http://ecx.images-amazon.com/images/I/51f9DjcytaL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg)
**注意点
-RedHat EL5.2標準でインストールされる[[ruby-1.8.5はメモリリークするらしい>https://reductivelabs.com/trac/puppet/wiki/PuppetRedHatCentos]]。&br()ruby-1.8.6以上を使うのが良いらしい。
-0.24.7でpuppetrunを実行すると"Failed to load ruby LDAP library."のエラーになる。&br()最新版で修正されているかは未確認。
**サーバー側のインストールと設定
環境はRedHat EL5.2 Server(x86)のCDから構築した。
EPELより以下をDLしてyumでインストールした。
-puppet-server-0.24.7-4.el5.noarch.rpm
-puppet-0.24.7-4.el5.noarch.rpm
-facter-1.5.2-2.el5.noarch.rpm
-ruby-augeas-0.2.0-1.el5.i386.rpm
-ruby-shadow-1.4.1-7.el5.i386.rpm
-augeas-libs-0.3.6-2.el5.i386.rpm
インストール後、/etc/puppet/puppet.confに以下の記述を追加。
#highlight(shell){
[puppetmasterd]
autosign = true}
ちなみに、puppetmasterd --genconfig するとパラメータを全部見せてくれる。
その後、
#highlight(shell,linenumber){
% touch /etc/puppet/manifests/site.pp →空のマニフェストを作成
% chkconfig puppetmaster on
% service puppetmaster start}
としてpuppetmasterdを常駐起動する。puppetmasterdはpuppetユーザーで起動される。
***サーバー側のファイルサーバー設定
puppetでファイルを配布させることができる。
例えば、/root/puppetfiles/ディレクトリを配布ファイルの置き場所とする。
/etc/puppet/fileserver.confを以下のように設定すると、
#highlight(shell){
[files]
path = /root/puppetfiles
allow = *.test.com}
puppet://puppet-server/files/ で /root/puppetfiles/ がアクセスできるようになる。
**クライアント側のインストールと設定
環境はRedHat EL5.2 Client(x86)のCDから構築した。
EPELより以下をDLしてyumでインストールした。
-puppet-0.24.7-4.el5.noarch.rpm
-facter-1.5.2-2.el5.noarch.rpm
-ruby-augeas-0.2.0-1.el5.i386.rpm
-ruby-shadow-1.4.1-7.el5.i386.rpm
-augeas-libs-0.3.6-2.el5.i386.rpm
インストール後、/etc/puppet/puppet.confの[puppetd]セクションに以下の記述を追加。
#highlight(shell){
[puppetd]
...
server = puppet-server.test.com
runinterval = 1800}
ちなみに、puppetd --genconfig するとパラメータを全部見せてくれる。
その後、
#highlight(shell,linenumber){
% chkconfig puppet on
% service puppet start}
でpuppetdを常駐起動させる。puppetdはrootユーザーで起動される。
すると、puppetdはpuppetmasterdに証明書(CA)のサインを要求しにいく。
サーバー側のpuppetmasterdはautosign設定になっているのでクライアントの証明書にサインする。
以後、puppetdは30分に1回(runinterval=1800)、puppetmasterdにマニフェストをリクエストし、自分のコンピュータ内でマニフェストと異なっている所をチェックして補正するようになる。
**マニフェストの例
実例を交えてマニフェストの設定例。
***File
/root以下に例えばreadme.txtファイルを配布しておきたい、という場合。
#highlight(shell){{
file { "/root/readme.txt":
owner => "root",
group => "root",
mode => 440,
source => "puppet://puppet-server/files/root/readme.txt",
} }}
ユーザーが配布されたreadme.txtを書き換えたり、削除したりしても、puppetが復活させてくれる。
***Service
dhcpサービスは勝手に立ち上げられてると困るので止めさせたい、という場合。
#highlight(shell){{
service { "dhcpd":
name => "dhcpd",
enable => false,
ensure => false,
} }}
ユーザーがservice dhcpd startしたら停止させられるし、
chkconfig dhcpd onしたらoffにさせられる。
***Package
必ずインストールしておいて欲しいパッケージ(仮にパッケージ名はxyzとする)がある場合。
#highlight(shell){{
package { "xyz":
name => "xyz",
ensure => installed,
} }}
但し、yumで参照できるレポジトリにxyzのrpmが存在すること。
***FileとServiceとPackageの組み合わせ
-xyzパッケージを必ずインストールさせたい
-xyzパッケージはサービスとして動くので必ずサービス起動させておきたい
-xyzサービスの設定ファイル/etc/xyz/xyz.confは同じものを皆に配布したい
-/etc/xyz/xyz.confを変更したらサービスを再起動させたい
#highlight(shell){{
package { "xyz":
name => "xyz",
ensure => installed,
}
file { "/etc/xyz/xyz.conf":
owner => "root",
group => "root",
mode => 600,
source => "puppet://puppet-server/files/etc/xyz/xyz.conf",
notify => Service["xyz"],
require => Package["xyz"]
}
service { "xyz":
name => "xyz",
enable => true,
ensure => true,
require => File["/etc/xyz/xyz.conf"]
} }}
#right(){Last Update &date()}
*Puppet
Linuxのシステム管理ツール。
多数のLinuxを管理者の定義した管理ポリシー(manifest)に従わせることができ、
まさに操り人形。
ファイルの配布、サービスの起動/停止、パッケージのインスト、等々を集中管理。
Cfengineの後継と目されていて、柔軟なmanifestの定義が魅力。
Rubyで作られている。
最新は0.24系。
#contents()
**リンク
-[[本家サイト>http://reductivelabs.com/trac/puppet]]:
-[[puppet wiki (パペウィキ)>http://trac.mizzy.org/puppet]]:本家のドキュメントを日本語化している
-[[オープンソースなシステム自動管理ツール Puppet>http://gihyo.jp/admin/serial/01/puppet]]:全18回の技術評論社のWEB記事
-[[Puppetを導入してみました>http://blog.nicetrip.org/ruby/puppet%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F]]:
-[[Puppet の競合 Chef のファーストインプレッション>http://trac.mizzy.org/public/wiki/ChefFirstImpression]]:Chefは手間が掛かりそう
-[[ネットワーク上でのシステム管理を容易にするPuppet>http://www.itmedia.co.jp/enterprise/articles/0808/25/news014.html]]:ITmediaの記事
-[[だ!日記 - ロンドンより>http://www.madoro.org/nikki/tag/puppet]]
-[[システム自動管理ツールPuppetを使ってみた>http://labs.unoh.net/2008/02/puppet.html]]
-[[ネットワーク上でのシステム管理を容易にするPuppet>http://sourceforge.jp/magazine/08/08/21/0210246]]
-[[Puppet使い始めました>http://l-w-i.net/m/20080504_01.txt]]
-[[Puppetって?>http://projects.tsuntsun.net/~nabeken/Puppet.html]]
-[[Hideki's Blog 2nd>http://zephel.com/archives/linuxunix/puppet/]]
-[[Puppet(システム自動設定ツール)の導入を考える>http://kurusugawa.jp/blog/archives/category/puppet]]
-[[Lucie EC2 の Puppet 設定を置くためのリポジトリ>http://github.com/yasuhito/ec2-puppet/tree/master]]
**書籍
-[[Pulling Strings with Puppet>http://www.amazon.com/dp/1590599780]]
**ダウンロード
-[[EPELのRHEL5(i386)用RPM>http://download.fedora.redhat.com/pub/epel/5/i386/]]:puppet、puppet-server、facterをDLできる
&ref(http://ecx.images-amazon.com/images/I/51f9DjcytaL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA240_SH20_OU01_.jpg)
**注意点
-RedHat EL5.2標準でインストールされる[[ruby-1.8.5はメモリリークするらしい>https://reductivelabs.com/trac/puppet/wiki/PuppetRedHatCentos]]。&br()ruby-1.8.6以上を使うのが良いらしい。
-0.24.7でpuppetrunを実行すると"Failed to load ruby LDAP library."のエラーになる。&br()最新版で修正されているかは未確認。
**サーバー側のインストールと設定
環境はRedHat EL5.2 Server(x86)のCDから構築した。
EPELより以下をDLしてyumでインストールした。
-puppet-server-0.24.7-4.el5.noarch.rpm
-puppet-0.24.7-4.el5.noarch.rpm
-facter-1.5.2-2.el5.noarch.rpm
-ruby-augeas-0.2.0-1.el5.i386.rpm
-ruby-shadow-1.4.1-7.el5.i386.rpm
-augeas-libs-0.3.6-2.el5.i386.rpm
インストール後、/etc/puppet/puppet.confに以下の記述を追加。
#highlight(shell){
[puppetmasterd]
autosign = true}
ちなみに、puppetmasterd --genconfig するとパラメータを全部見せてくれる。
その後、
#highlight(shell,linenumber){
% touch /etc/puppet/manifests/site.pp →空のマニフェストを作成
% chkconfig puppetmaster on
% service puppetmaster start}
としてpuppetmasterdを常駐起動する。puppetmasterdはpuppetユーザーで起動される。
***サーバー側のファイルサーバー設定
puppetでファイルを配布させることができる。
例えば、/root/puppetfiles/ディレクトリを配布ファイルの置き場所とする。
/etc/puppet/fileserver.confを以下のように設定すると、
#highlight(shell){
[files]
path = /root/puppetfiles
allow = *.test.com}
puppet://puppet-server/files/ で /root/puppetfiles/ がアクセスできるようになる。
**クライアント側のインストールと設定
環境はRedHat EL5.2 Client(x86)のCDから構築した。
EPELより以下をDLしてyumでインストールした。
-puppet-0.24.7-4.el5.noarch.rpm
-facter-1.5.2-2.el5.noarch.rpm
-ruby-augeas-0.2.0-1.el5.i386.rpm
-ruby-shadow-1.4.1-7.el5.i386.rpm
-augeas-libs-0.3.6-2.el5.i386.rpm
インストール後、/etc/puppet/puppet.confの[puppetd]セクションに以下の記述を追加。
#highlight(shell){
[puppetd]
...
server = puppet-server.test.com
runinterval = 1800}
ちなみに、puppetd --genconfig するとパラメータを全部見せてくれる。
その後、
#highlight(shell,linenumber){
% chkconfig puppet on
% service puppet start}
でpuppetdを常駐起動させる。puppetdはrootユーザーで起動される。
すると、puppetdはpuppetmasterdに証明書(CA)のサインを要求しにいく。
サーバー側のpuppetmasterdはautosign設定になっているのでクライアントの証明書にサインする。
以後、puppetdは30分に1回(runinterval=1800)、puppetmasterdにマニフェストをリクエストし、自分のコンピュータ内でマニフェストと異なっている所をチェックして補正するようになる。
**マニフェストの例
実例を交えてマニフェストの設定例。
***File
/root以下に例えばreadme.txtファイルを配布しておきたい、という場合。
#highlight(shell){{
file { "/root/readme.txt":
owner => "root",
group => "root",
mode => 440,
source => "puppet://puppet-server/files/root/readme.txt",
} }}
ユーザーが配布されたreadme.txtを書き換えたり、削除したりしても、puppetが復活させてくれる。
***Service
dhcpサービスは勝手に立ち上げられてると困るので止めさせたい、という場合。
#highlight(shell){{
service { "dhcpd":
name => "dhcpd",
enable => false,
ensure => false,
} }}
ユーザーがservice dhcpd startしたら停止させられるし、
chkconfig dhcpd onしたらoffにさせられる。
***Package
必ずインストールしておいて欲しいパッケージ(仮にパッケージ名はxyzとする)がある場合。
#highlight(shell){{
package { "xyz":
name => "xyz",
ensure => installed,
} }}
但し、yumで参照できるレポジトリにxyzのrpmが存在すること。
逆に削除したい場合、ensure => absent とする。
アップデータしたい場合、ensure => latest とする。
***FileとServiceとPackageの組み合わせ
-xyzパッケージを必ずインストールさせたい
-xyzパッケージはサービスとして動くので必ずサービス起動させておきたい
-xyzサービスの設定ファイル/etc/xyz/xyz.confは同じものを皆に配布したい
-/etc/xyz/xyz.confを変更したらサービスを再起動させたい
#highlight(shell){{
package { "xyz":
name => "xyz",
ensure => installed,
}
file { "/etc/xyz/xyz.conf":
owner => "root",
group => "root",
mode => 600,
source => "puppet://puppet-server/files/etc/xyz/xyz.conf",
notify => Service["xyz"],
require => Package["xyz"]
}
service { "xyz":
name => "xyz",
enable => true,
ensure => true,
require => File["/etc/xyz/xyz.conf"]
} }}
**puppetrun
クライアントからpuppetdがマニフェストを定期的にリクエストするPULL型がpuppetの通常の使われ方である。
一方、サーバーからマニフェストの実行を強制するPUSH型も可能である。
PUSH型のためのコマンドがpuppetrunである。
以下はPUSH型にするためのクライアント側の設定例。
puppet-server.test.comがpuppetmasterdが動作するサーバーとする。
/etc/puppet/namespaceauth.conf
#highlight(shell){
[puppetrunner]
allow puppet-server.test.com}
/etc/puppet/puppet.conf
#highlight(shell){
[puppetd]
...
listen = true}
これで、クライアント側のpuppetdはサーバー側からのpuppetrunコマンドを受け付けるようになる。
PUSH型だけでPULL型を行わないようにしたい場合、/etc/sysconfig/puppetを編集して、
#highlight(shell){
PUPPET_EXTRA_OPTS=--no-client}
とする。
本当はこの設定も/etc/puppet/puppet.confの[puppetd]セクションに書きたい所だが。。。
設定後、クライアント側のpuppetdを再起動し、サーバー側から、
#highlight(shell){
% puppetrun --host client001.test.com}
と実行するとクライアント側がマニフェストを取りに行くのが分かる。
ちなみに--allオプション、--classオプションはLDAPでノード管理していないと使えない。