Puppet管理 · 2 min read · Feb 07, 2026

Ubuntu上のPuppetによる構成自動化と集中管理

Ubuntu上のPuppetによる構成自動化と集中管理

著者: Kent Brede

http://reductivelabs.com/trac/puppet/wiki/InstallationGuideに基づく

はじめに

これは、Puppetのサーバーコンポーネント(puppetmaster)を1台のマシンにインストールし、Puppetクライアント(puppetd)を別のマシンにインストールする方法についてのステップバイステップのチュートリアルです。その後、Puppetが正常に動作していることを確認するための簡単なテストを行います。

Puppetに不慣れな方のために説明すると、Puppetは、ネットワーク上で動作するさまざまな*nixフレーバーの管理を集中化することを可能にする構成自動化ツールです。Puppetは、ファイル、パッケージ、ユーザー、サービス、cron、マウントなど、システムの重要な側面の中央管理をサポートしています。より完全な説明については、Reductive Labsを訪れてください。

背景

このインストールはUbuntu 6.06 LTS Serverで行われますが、ほとんどのDebian/Ubuntuフレーバーでわずかな修正を加えることで動作するはずです。

この記事執筆時点では、Ubuntu用の現在のPuppetパッケージはFeistyにあります。現在のDebianパッケージはUnstableにあります。

このチュートリアルでは、example.comをドメイン名として使用します。サーバーにはホスト名「puppet」とIP 192.168.10.1が与えられます。クライアントのホスト名は「pclient」でIP 192.168.10.2です。

1. ネットワーク要件

DNSがネットワークに設定されていない場合は、サーバーとクライアントの両方のhostsファイルに両方のマシンのエントリが含まれていることを確認してください。このシナリオでは、次のエントリが/etc/hostsに追加されます。お好みのテキストエディタを使用して、以下の行に似た自分のネットワーク設定を反映する行を追加してください。

192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient

サーバーはポート8140で動作します。2台のマシン間でポート8140をブロックするファイアウォールがないことを確認してください。

2. Aptの設定

必要なパッケージの多くはuniverseリポジトリにあります。以下の行が”sources.list”でコメントアウトされていない場合は、お好みのテキストエディタを使用して、サーバー上でそれらを見つけてコメントを解除してください。

puppet:# vim /etc/apt/sources.list

# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe

以前のバージョンのUbuntuを使用しているため、FeistyからPuppetパッケージを簡単に取得できるようにaptを設定しましょう。必要に応じて、ソースを調整してOSバージョンを反映させてください。このセクションの手順に不慣れな場合は、Apt-Howtoのセクション3.10を参照してください。

“sources.list”を開き、次の2行を追加します。

puppet:# vim /etc/apt/sources.list

deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe

ソースリストを更新します。

puppet:# apt-get update

上記の手順を「pclient」でも実行します。

次に、FeistyからPuppetセットアップに必要なパッケージを取得するためにaptを設定しますが、他のすべてのパッケージはDapperリポジトリから取得できるようにします。「preferences」ファイルに次の行を追加します。

サーバーで:

puppet:# vim /etc/apt/preferences

Package: *
Pin: release a=dapper
Pin-Priority: 700

Package: facter
Pin: release a=feisty
Pin-Priority: 500

Package: puppet
Pin: release a=feisty
Pin-Priority: 500

Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500

クライアントで:

pclient:# vim /etc/apt/preferences

Package: *
Pin: release a=dapper
Pin-Priority: 700

Package: facter
Pin: release a=feisty
Pin-Priority: 500

Package: puppet
Pin: release a=feisty
Pin-Priority: 500

3. ソフトウェア要件

Puppetのインストールに備えて、サーバーとクライアントの両方にいくつかのライブラリとパッケージをインストールする必要があります。この記事執筆時点では、このセットが最初にインストールされていないと、依存関係のループが発生します。

puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8

pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8

4. クライアントのインストール

FeistyからPuppetとFacterをインストールします。

pclient:# apt-get -t feisty install facter puppet

5. サーバーのインストール

Puppet、Facter、およびPuppetmasterをインストールします。インストール後のスクリプトはサーバーを起動しようとし、エラーが発生しますが、心配しないでください。ステップ6でマニフェストを作成します。

puppet:# apt-get -t feisty install facter puppet puppetmaster

…..
Puppet構成管理ツールマスターサーバーを起動しています
マニフェスト /etc/puppet/manifests/site.pp は存在する必要があります [失敗]

6. サーバーの準備

サーバー(puppetmasterd)は、実行する前にマニフェストが必要です。クライアントに「/tmp/testfile」というファイルを作成するようPuppetに指示するマニフェストを書きましょう。

puppet:# vim /etc/puppet/manifests/site.pp

# 存在しない場合は「/tmp/testfile」を作成します。
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 644,
       owner  => root,
       group  => root
    }
}

# どのクライアントでクラスを実行するかをPuppetに指示します
node pclient {
    include test_class
}

今、Puppetサーバーを起動します。

puppet:# /etc/init.d/puppetmaster start

6. クライアントの準備

クライアントはデフォルトで、ネットワーク上の「puppet」というホスト名のサーバーに接続します。サーバーのホスト名が「puppet」でない場合は、puppetd設定ファイル「puppetd.conf」に指示を挿入する必要があります。この場合は必要ありませんが、デモンストレーションの目的で行います。

お好みのテキストエディタで「/etc/puppet/puppetd.conf」を開き、既存のファイルに「server = puppet.example.com」を追加します。以下の例を参考にしてください。

pclient:# vim /etc/puppet/puppetd.conf

[puppetd]
server = puppet.example.com

# すべてのログメッセージが正しいディレクトリに送信されることを確認します
# このディレクトリはpuppetユーザーによって書き込み可能でなければなりません
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run

7. キーの署名

2つのシステムが安全に通信するためには、署名されたSSL証明書を作成する必要があります。この次のステップでは、サーバーとクライアントの両方のマシンにログインしている必要があります。

クライアント側で実行します。

pclient:# puppetd –server puppet.example.com –waitforcert 60 –test

次のメッセージが表示されるはずです。

err: 証明書がありません; 機能が制限された状態で実行中です。
info: pclient.example.conの新しい証明書要求を作成しています
info: 証明書を要求しています
warning: このSSLセッションではピア証明書が検証されません
notice: 証明書を受信しませんでした

次に、サーバー側で、クライアントが証明書の署名を待っていることを確認するために次のコマンドを実行します。

puppet:# puppetca –list

pclient.example.con

次に、証明書に署名します。

puppet:# puppetca –sign pclient.example.com

署名されたpclient.example.com

すべてが正常に行われた場合、pclientに次のメッセージが表示されるはずです。

info: 証明書を要求しています
warning: ピア証明書がこのSSLセッションで検証されません
notice: 一時的な実行での–listenを無視しています
info: /etc/puppet/localconfig.yamlに構成をキャッシュしています
notice: 構成実行を開始しています
notice: //pclient/test_class/File[/tmp/testfile]/ensure: 作成されました
info: 状態ファイルを/var/lib/puppet/state/state.yamlに作成しています
notice: 0.11秒で構成実行が完了しました

8. テスト

ファイルが作成されたことを確認します。

pclient:# ls -l /tmp/testfile

-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile

テストとして、マニフェストを編集し、Puppetにファイルモードを変更するよう指示します。「mode => 644,」の行を「mode => 600,」に変更します。

puppet:# vim /etc/puppet/manifests/site.pp

# 存在しない場合は「/tmp/testfile」を作成します。
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 600,
       owner  => root,
       group  => root
    }
}

# どのクライアントでクラスを実行するかをPuppetに指示します
node pclient {
    include test_class
}

クライアントでPuppetを冗長モード(-v)で一度だけ(-o)実行します。

pclient:# puppetd -v -o

次のメッセージが表示されるはずです。これは/tmp/testfileがモード644から600に変更されたことを示しています。

notice: 一時的な実行での–listenを無視しています
info: 構成は最新です
notice: 構成実行を開始しています
notice: //pclient/test_class/File[/tmp/testfile]/mode: モードが’644’から’600’に変更されました
notice: 0.26秒で構成実行が完了しました

作業が正しく完了したことを確認します。

pclient:# ls -l /tmp/testfile

-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile

9. 結論

おめでとうございます。テストが完了し、動作するPuppetセットアップができました。次のステップは、機能的なマニフェストを作成し、さらにテストを行い、クライアント側でpuppetdデーモンを起動することです。Puppetdはデフォルトで30分ごとにサーバーを自動的にポーリングします。

pclient:# /etc/init.d/puppet start

詳細については、Reductive Labsを訪れてください。
フレンドリーで知識豊富なサポートを受けるには、Puppet Usersに参加するか、irc.freenode.netの#puppetに立ち寄ってください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。