連載
» 2014年10月08日 18時00分 公開

新人インフラ技術者のためのサーバー構築/運用自動化入門(3):Puppetのインストールと動作確認、トラブル対処法 (4/4)

[菅原亮, 岡本隆史,NTT OSSセンタ]
前のページへ 1|2|3|4       

コラム:証明書の不整合トラブルの解決法

 agent/master型では証明書の不整合トラブルが発生することがあります。これはホスト名が同じでも鍵データは毎回作っているため、agent側を再インストールした場合はmaster側で保管している鍵データと不整合を起こしてしまいます。

 今回のような検証だとmaster側を再インストールする場合もあるかもしれませんが、その場合もagent側が保管しているmasterの鍵データと不整合を起こします。不整合を起こした場合は保管している鍵データを削除するしかありません。

master側の鍵データ削除

 agent側を再インストールした場合は、master側の鍵データを削除しないと接続できません。master側で以下のコマンドラインのように鍵データを削除します。

# puppet cert list --all
 
+ "agent"   (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
+ "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
 
# puppet cert clean agent ←削除したいagentのホスト名(--allで全て削除可能)
 
Notice: Revoked certificate with serial 6
Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/ca/signed/agent.pem'
Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/certs/agent.pem'
 
# puppet cert list --all
+ "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:

agent側の鍵データ削除

 master側を再インストールして再構築し直した場合、「Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.」というエラーでagent側の鍵データを削除しないと接続できないことがあるでしょう。

 agent側の鍵データは以下のコマンドラインのように削除します。

# rm -rf /var/lib/puppet/ssl/*

 これでもエラーが解消しない場合は、前述のmaster側の鍵データ削除手順も併せて実行してみてください。


Puppetを動かしてみよう!

 せっかくPuppetが動くようになったのですから、実際に何か作業をさせてみましょう。連載第1回の「環境構築自動化の手順と評価検証、Puppetの基礎知識」で紹介しましたが、Puppetの作業はPuppet言語と呼ばれる言語で記述し、これをマニフェストと呼びます。

Puppetの仕組み概略(第1回より再掲)

 マニフェストについては次回詳しく説明しますので、ここではシンプルにファイルを一つだけ作るマニフェストを作ってみましょう。

 agent/master型のPuppetではmaster側にあるsite.ppファイル(/etc/puppet/manifests/site.pp)がagent側で実行されるマニフェストファイルになりますので、以下の内容をmaster側のsite.ppファイル(/etc/puppet/manifests/site.pp)に記述してください。

file { '/tmp/hello.txt':
  content => 'hello puppet',
}

 このマニフェストはtmpディレクトリ(/tmp)にhello.txtというファイル名で「hello puppet」という中身のテキストファイルを作成します。プログラミング経験のある方には“content”の末尾にあるカンマがタイプミスに見えるかもしれませんが、間違いではありませんので、その通り記述してください。

 保存したらテストしてみましょう。puppet applyコマンドを使うと、引数で指定したマニフェストを実行できます。Chefだとchef-applyに似ているコマンドです。--noopオプションを付加すると、マニフェスト実行はしますが、実際にシステムへの変更はしない“ドライラン”になります。

 それでは、master側で以下のようなコマンドラインを実行してテストしてみましょう。

# puppet apply /etc/puppet/manifests/site.pp --noop
 
Notice: Compiled catalog for builder in environment production in 0.04 seconds
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: current_value absent, should be file (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.02 seconds
master側

 「Warning: Could not retrieve fact fqdn」という警告が出るかもしれませんが無視して構いません。もし、何かしらエラーが出た場合は記述内容をよく見直してください。問題なければ--noopオプションを外して実際にファイルを作成してみましょう。

# puppet apply /etc/puppet/manifests/site.pp
Notice: Compiled catalog for builder in environment production in 0.04 seconds
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66'
Notice: Finished catalog run in 0.03 seconds
# ls -l /tmp/hello.txt
-rw-r--r-- 1 root root 12  8月  7 16:59 2014 /tmp/hello.txt
# cat /tmp/hello.txt
hello puppet
master側

 作成されましたね。今はmaster側でしたが、同じことをagent側でもできるようになっています。それではagent側でも実行してみましょう。agent側で以下のコマンドラインのように実行します。

# puppet agent -t --verbose
 
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for agent
Info: Applying configuration version '1407398971'
Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66'
Notice: Finished catalog run in 0.02 seconds
 
# ls -l /tmp/hello.txt
-rw-r--r--. 1 root root 12  8月  7 17:09 2014 /tmp/hello.txt
 
# cat /tmp/hello.txt
hello puppet
agent側

 agent側でも同じようにファイルが作成されましたね。

次回はHTTPサーバーのマニフェストの作り方

 次回はHTTPサーバーのセットアップを例にマニフェストの作り方を詳しく説明します。お楽しみに。

R子 う〜ん、う〜ん(悩)

K男 どうしたのかな?

R子 何回やっても「certificate verify failed」って出ちゃって動かないんです……(泣)

K男 ちゃんと説明した通りにセットアップしたかな?

R子 はい、新しいサーバーを開梱してすぐOSをインストールして、そのままPuppetを入れたのですが……。

K男 開梱してすぐOSインストールしてPuppet? インストールした後にNTPで時間合わせた?

R子 ……あ(汗)

K男 あれだけ時間合わせろと注意したのに! 人の話をちゃんと聞け〜!(おこ)

R子 ご、ごめんなさ〜い(泣)


 実機を使う場合、agent/master型では時間の合わせ忘れによるエラーが多いので注意しましょう。

著者プロフィール

菅原亮(すがはら りょう)

所属:NTT OSSセンタ シニア・エキスパート

1973年生まれ。10歳の時にプログラミングに目覚める。

1994年にFM-TOWNS上でLinuxを使い始めて以来、仕事趣味問わずOSSシステムを構築するようになる。

2012年よりOSSシステムの構築自動化に取り組み始め、昔の苦労を懐かしみつつ自動化の普及促進に取り組んでいる。

個人ではNTSyslog日本語対応版など主にWindows用アプリを手掛ける。趣味は家庭菜園と料理の手動構築で愛車はシルビア。


著者プロフィール

岡本 隆史(おかもと たかし)

所属:NTT OSSセンタ シニア・エキスパート

「楽をすること」に興味があり、単純作業はスクリプト・マクロなどでできるだけ自動化するようにしている。しかしながら、楽をするためにツールを作成する苦労も伴い、苦労が実っているどうかは定かではない。

楽をする仕組みを共有することこそ、その本質だと気付き、環境構築の自動化ツールの社内外への展開を行っている。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。