オープンソースなシステム自動管理ツール Puppet

第2回Puppetのインストールから起動まで

第1回では、システムの自動管理がなぜ必要なのか、ということと、Puppetの概要についてお話しました。今回はPuppetをインストールして起動するまでの手順についてご説明します。

Puppetのインストール

Puppetのインストール方法は、以下の3つのうちのいずれかから選択できます。

  • パッケージシステムによるインストール
  • RubyGemsによるインストール
  • tarballからのインストール

パッケージシステムによるインストールが最もお勧めです。

インストールの前提条件

PuppetはRubyでできているため、当然Rubyが必要です。Puppetのtarballに含まれるREADMEには、Ruby 1.8.1以降が必要と記載されています。

また、Facterというライブラリのバージョン1.1.1以降が必要です。このライブラリは、システムに関する情報(プロセッサアーキテクチャ、利用OSとそのバージョン、ドメイン名、FQDN、IPアドレスなど)を収集するための、クロスプラットフォームなRubyライブラリです。

ただし、パッケージシステムによるインストールの場合、通常は依存関係を自動的に解決してくれますので、RubyやFacterを明示的にインストールする必要はありません。

また、2007年7月16日現在、Puppetの最新バージョンは0.23.0ですが、まだ安定していないようですので、0.22.xの使用をお勧めします。

パッケージシステムによるインストール

以下のOSでは、パッケージシステムによるインストールが可能です。

  • Debian GNU/Linux
  • RedHat Enterprise Linux/CentOS
  • SuSE Linux
  • Gentoo Linux
  • Fedora
  • FreeBSD
  • OpenBSD
  • Solaris

各OSでの具体的なインストール手順について、順に見ていきます(ただし、すべての手順を筆者は試したわけではありませんので、ここに書かれた手順そのままではインストールできないこともあるかもしれません。ご了承ください⁠⁠。

Debian GNU/Linuxでのインストール

Debian GNU/Linux では、Puppetは標準パッケージとしてメンテナンスされていますので、以下の様にapt-getを実行するだけでインストールが完了します。

% sudo apt-get install puppet puppetmaster

詳細はPuppet本家のドキュメントをご参照ください。

Red Hat Enterprise Linux/CentOS でのインストール

Red Hat Enterprise Linux 4, 5や、CentOS 4, 5では、DAG RPM Repositoryやそのミラーリポジトリを利用することにより、yumでインストールすることができます。例えば、理化学研究所のミラーからインストールする場合には、

[dag]
name=DAG RPM Repository
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://ftp.riken.go.jp/pub/Linux/dag/RPM-GPG-KEY.dag.txt

といった内容で /etc/yum.repos.d/dag.repoファイルを作成し、

$ sudo yum install puppet puppet-server

と実行することでインストールできます。

また、David Lutterkort氏がメンテナンスしているyumリポジトリからインストールすることも可能です。こちらの方がより新しいバージョンがメンテナンスされているようです。

あわせてPuppet本家のドキュメントもご参照ください。

SUSE Linuxでのインストール

SUSE Linuxの場合には、software.openSUSE.orgのリポジトリからインストールすることが可能です。

適切なリポジトリをYaSTのインストールソースに追加し、

$ sudo yast -i puppet puppet-server

と実行することで、インストールすることができます。

openSUSE 10.2の場合には、zypperを利用して以下の手順でインストールすることも可能です。

$ sudo zypper sa http://software.opensuse.org/download/systemmanagement:/misc/openSUSE_10.2
$ sudo zypper update
$ sudo zypper install puppet puppet-server

あわせてPuppet本家のドキュメントもご参照ください。

Gentoo Linuxでのインストール

オフィシャルのPortageツリーでebuildが提供されています。デフォルトではpuppetとfacterはマスクされていて、そのままではインストールできませんので、/etc/portage/package.keywordsに、

app-admin/puppet ~x86
dev-ruby/facter ~x86

という記述を追加し、

$ sudo emerge puppet

と実行してインストールします。

あわせてPuppet本家のドキュメントもご参照ください。

Fedoraでのインストール

Fedora Core 4, 5, 6の場合はFedora Extrasで、Fedora 7の場合はFedora Updatesでパッケージが配布されており、特に何も設定しなくても、以下の様にコマンドを実行することでインストールできます。

$ sudo yum install puppet puppet-server

FreeBSDでのインストール

オフィシャルなパッケージが提供されていますので、以下の様にコマンドを実行することでインストールできます。

$ sudo pkg_add ftp://ftp8.jp.freebsd.org/pub/FreeBSD/ports/packages/All/puppet-0.22.3.tbz

あわせてPuppet本家のドキュメントもご参照ください。

OpenBSDでのインストール

オフィシャルなパッケージが提供されていますので、以下の様にコマンドを実行することでインストールできます。

$ export PKG_PATH=ftp://ftp.jp.openbsd.org/pub/OpenBSD/4.1/packages/`machine -a`/
$ sudo pkg_add ruby-puppet

あわせてPuppet本家のドキュメントもご参照ください。

Solarisでのインストール

Solarisの場合は、Blastwaveアーカイブを利用することにより、以下の手順でインストールできます。

$ cd /tmp
$ ftp unix.hensa.ac.uk
Connected to legunix.mirrorservice.org.
220 UK Mirror Service FTP server version 1.4 ready
Name (unix.hensa.ac.uk:miya): anonymous
331 Guest login ok: please send your email address as the password
Password:
ftp> cd sites/blastwave.org
ftp> get pkg_get.pkg
ftp> get wget-i386.bin
ftp> get wget-sparc.bin
ftp> quit
$ sudo pkgadd -d pkg_get.pkg   
$ sudo mv wget-`uname -p`.bin /opt/csw/bin/wget
$ sudo chmod +x /opt/csw/bin/wget
$ PATH=$PATH:/opt/csw/bin:/opt/csw/sbin
$ sudo pkg-get -U
$ sudo pkg-get install puppet

あわせてPuppet本家のドキュメントもご参照ください。

RubyGemsによるインストール

ご利用のOSでパッケージが提供されていない場合には、RubyGemsを利用して、以下の様にインストールすることができます。

$ sudo gem install --remote --source http://reductivelabs.com/downloads puppet

tarballからのインストール

パッケージシステムとRubyGemsを利用する以外にも、tarballを直接ダウンロードして、同梱されているinstall.rbを実行することでインストールすることもできます。

# facterのインストール
$ wget http://reductivelabs.com/downloads/facter/facter-latest.tgz
$ gzip -d -c facter-latest.tgz | tar xf -
$ cd facter-*
$ sudo ruby install.rb

# puppetのインストール
$ wget http://reductivelabs.com/downloads/puppet/puppet-latest.tgz
$ gzip -d -c puppet-latest.tgz | tar xf -
$ cd puppet-*
$ sudo ruby install.rb

Puppet起動前の準備

では、インストールが済んだところで、Puppetを起動してみましょう。

起動前の準備として、パッケージからインストールした場合には、/etc/puppet 以下にファイルやディレクトリができていますが、これらをすべて削除するか、別ディレクトリへ退避してください。これはPuppetサーバ、Puppetクライアントの双方で行います。

Ppuppetは基本的に、全く設定をせずに起動させることができます。逆に自分の知らない設定がされていることによって、うまく起動しなかったり、意図した通りに動作しないことがありますので、まずは一度既存の設定ファイル等をすべて削除し、あらためて必要な設定を施していくことをお勧めします。

Puppetサーバの起動

Puppetサーバを起動させるためには、マニフェストが必須となります。

マニフェストとは、前回の記事でも触れましたが、独自の宣言型言語によって、システムのあるべき状態を記述したファイルです。

今回は起動するだけですので、以下の様に空のマニフェストを作成します。

$ sudo mkdir -p /etc/puppet/manifests
$ sudo touch /etc/puppet/manifests/site.pp

では、実際に起動してみます。Puppetサーバ側では、puppetmasterdというデーモンを起動します。初回の起動時には--mkusersオプションをつけることにより、puppetユーザ/puppetグループが作成され、puppetmasterdプロセスのオーナは、このユーザ/グループに設定されます。

$ sudo puppetmasterd --verbose --mkusers
info: Starting server for Puppet version 0.22.4
notice: /puppetconfig/puppet/Group[puppet]/ensure: created
notice: /puppetconfig/puppet/User[puppet]/ensure: created
info: Parsed manifest in 0.00 seconds
info: Creating a new certificate request for server.example.com
info: Creating a new SSL key at /etc/puppet/ssl/private_keys/server.example.com.pem
info: Autosign is enabled but /etc/puppet/autosign.conf is missing
info: Signing certificate for CA server
info: Signing certificate for server.example.com
info: Listening on port 8140
notice: Starting Puppet server version 0.22.4 

2回目以降の起動や、パッケージからのインストールで自動的にpuppetユーザ/puppetグループが作成されている場合には、--mkusersオプションは必要ありません。

$ sudo puppetmasterd --verbose
# puppetmasterd --verbose --nonode
info: Starting server for Puppet version 0.22.4
info: Parsed manifest in 0.00 seconds
info: Creating a new certificate request for server.example.com
info: Creating a new SSL key at /etc/puppet/ssl/private_keys/server.example.com.pem
info: Autosign is enabled but /etc/puppet/autosign.conf is missing
info: Signing certificate for CA server
info: Signing certificate for server.example.com
info: Listening on port 8140
notice: Starting Puppet server version 0.22.4 

--verboseオプションをつけることにより、puppetmasterdはフォアグラウンドで起動し、内部で何が行われているのかメッセージ出力してくれます。--verboseオプションがない場合には、メッセージが出力されず、バックグラウンドで起動します。

Puppetクライアントの起動

次にPuppetクライアント側で、puppetdというデーモンを起動します。--serverオプションでPuppetサーバを指定します。--verboseオプションはpuppetmasterdの場合と同様の動作となります。

$ sudo puppetd --server server.example.com --verbose
info: Creating a new certificate request for client.example.com
info: Creating a new SSL key at /etc/puppet/ssl/private_keys/client.example.com.pem
warning: peer certificate won't be verified in this SSL session
notice: Did not receive certificate  

Puppetサーバ/クライアント間は、SSLv3認証を利用しますので、初回起動時には証明書を作成し、Puppetサーバに対して署名するようリクエストします。

Puppetサーバ側では、以下の様なメッセージが表示されます。

notice: Allowing unauthenticated client client.example.com(192.168.10.18) access to
puppetca.getcert
info: Autosign is enabled but /etc/puppet/autosign.conf is missing
notice: Host client.example.com has a waiting certificate request   

/etc/puppet/autosign.confを設定することで、自動で署名することも可能ですが、今回は手動で署名します。フォアグラウンドで動いているpuppetmasterdを停止するか、別ターミナルで以下の様にコマンドを実行し、署名リクエストの確認と署名を行います。

$ sudo puppetca --list
client.example.com
$ sudo puppetca --sign client.example.com

puppetmasterdを停止させた場合には、ここでもう一度起動します。

少し待つと、Puppetクライアント側で以下の様に表示され、証明書に署名されたことが通知されます。

notice: Got signed certificate
notice: Starting Puppet client version 0.23.0
err: Could not retrieve configuration: Could not find client.example.com with names
client.example.com, client
err: Could not run Puppet::Network::Client::Master: Cannot connect to server and there is no cached configuration  

エラーはPuppetサーバ上のマニフェストに、このPuppetクライアント用の設定がないために表示されていますが、マニフェストは空ですので、出て当然のエラーということになります。

以上がPuppetのインストールから起動までの流れとなります。次回は具体的なマニフェストを作成して、実際に簡単なシステム管理を行う手順についてご説明したいと思います。

おすすめ記事

記事・ニュース一覧