前回に引き続きPuppetです。
インストール後からもう1度進めたいと思いますが、前回の疑問点をさらっと。
PuppetはSSL通信が基本なのでサーバー側での署名が必要になるのですが、/etc/sysconfig/network で設定しているホスト名以外のもので認識してしまうという事があるようだ。
署名していれば通信はできるんだけど・・・
なんか腑に落ちない!
という事で、どうしてそうなるのか調べてみた。
調べてみたと言っても、自力とは言えないのだが・・・(´・ω・`)
参考サイト
YAMAGUCHI::weblog
hostnameに翻弄された日
やまぐちさんのウェブを参照したところ、rc.dで読み込んでいるスクリプトが怪しく grep で引っ張ってみたら犯人はZabbixが生成したrc.d以下のスクリプトでした。
もう使っていなかったのでZabbixはアンインストールしてみると、rc.dのスクリプトもなくなったのですが、Puppetサーバーで証明書をCleanして、もう1度認証をするとまた以前のZabbixほにゃららなホスト名で署名される・・・。
なんでやねーん。という事で、Puppetという名の付くものは全て削除(ちゃんと確認してから)して、アンインストールもしました。
んで、いまここ! という状態である。
まずインストールが完了した!としましょう
/etc/puppet/puppet.conf
agent 側のディレクティブに Puppet server を記述
server = secure
テストの為に、Puppetサーバー側でもAgentを起動、PuppetクライアントでもAgentを起動しています。
別サーバーのクライアント側からの通信は上手くいきました。
# puppet agent -t --verbose --server secure Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
しかし、Puppetサーバー側のAgentからエラーがでました。原因は前とおなじくHostnameが一致しないというものです。
まだ悪夢は終わってはいなかった!!
Error: Could not retrieve catalog; skipping run Error: Could not send report: Server hostname 'secure' did not match server certificate; expected one of secure.zabbix
グーグル師匠を探し回っても答えがでないと途方にくれてしまう。
どこからこのホストネームが読み込まれているのか。
[root@secure]# hostname -A secure [root@secure]# hostname -i 192.168.0.1 [root@secure]# hostname -s secure [root@secure]# hostname -f secure [root@secure]# hostname -v gethostname()=`secure' secure
どこかからか読み込まれているのです。
これを読んだあなた。
どうか真相を暴いてください。
それだけが私の望みです。
と思っていたら見つかった!!
読み込まれている訳ではいなくて、そうなるように設定していたようだ。
まさかのところにその答えはあった。
/etc/resolv.conf:search zabbix
なるほどね!
# puppet agent -t --verbose --server secure Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for secure Info: Applying configuration version '1415058653' Info: Creating state file /var/lib/puppet/state/state.yaml Notice: Finished catalog run in 0.01 seconds
サクッといきました!
さっきのクライアント側のテスト結果とちょっと表示が違うんじゃない?というのはクライアント側はまだ署名していないのだ。署名をすれば大丈夫です。
resolve.conf のsearchで何故ドメインとして認識されていたのかも何となくわかったので、良かったとしよう。
あー、スッキリした。
ではでは、簡単なマニフェストを作成して動かしてまみます。
# cat /etc/puppet/manifests/site.pp file { '/tmp/hello.txt': content => 'hello puppet world', }
まずはPuppetサーバ側で、サーバとAgentの両方で試してみます。
# puppet apply /etc/puppet/manifests/site.pp --noop Notice: Compiled catalog for secure in environment production in 0.11 seconds Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content: current_value {md5}19ee62e0c6b5f00aaf9b02280c0dad66, should be {md5}2f9a7210e7b5ef6bd4e455907a9df94f (noop)
# cat /tmp/hello.txt hello puppet # rm /tmp/hello.txt rm: remove 通常ファイル `/tmp/hello.txt'? y
# puppet agent -t --verbose Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for secure Info: Applying configuration version '1415059431' # cat /tmp/hello.txt hello puppet world
続いて離れている方のクライアント側のAgentで。
# puppet agent -t --verbose Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for centos Info: Applying configuration version '1415059431' Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content: --- /tmp/hello.txt 2014-11-03 13:10:54.634000062 +0900 +++ /tmp/puppet-file20141104-15251-aqk21m-0 2014-11-04 09:05:55.109999955 +0900 @@ -1 +1 @@ -hello puppet \ No newline at end of file +hello puppet world \ No newline at end of file Info: Computing checksum on file /tmp/hello.txt Info: /Stage[main]/Main/File[/tmp/hello.txt]: Filebucketed /tmp/hello.txt to puppet with sum 19ee62e0c6b5f00aaf9b02280c0dad66 Notice: /Stage[main]/Main/File[/tmp/hello.txt]/content: content changed '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' to '{md5}2f9a7210e7b5ef6bd4e455907a9df94f' Notice: Finished catalog run in 0.05 seconds [root@centos]# cat /tmp/hello.txt hello puppet world#
両方とも上手くいきました。これでやっとマニフェストに進めます。
マニフェストの記述を見ていると、なんとなくDockerを思い出しますね。
またDockerか!
でもDockerFileを見ていても、インスコ後やっとけスクリプトに似ているなぁと思ったので、似てて当然ぞなもし。
何か作ろうかなぁとネット上のサンプルを見ながら、マニフェストの構成を頭に入れていってるのだけれど、vagrant というやつと連携しているものばっかりで参考にならん。
そしてaptが多い!
vagrant をちょっと見たらまたもやDockerだ。
何を調べていってもDockerが出てくるってどういうことよ~。
そういう時代なのだなあ。
運用方法ですが、マニフェストを更新したとして、Puppetを起動しておけば勝手に更新されていくので、管理されているAgentの入ったサーバーはマニフェストに書いてある通りの状態になり、管理しているバージョンになっているっていう事が可能です。
いろいろと連携しているようですし、基本的な記述形式を覚えたらvagrantとかも一緒に見ていくのがいいかもしれませんね。vagrantはまだ全くさわっていないので、また今度です。
これで4章、5章と完了しました。
Related Posts
- MetasploitをDebian8にインストールして、いくつかのテストをしてみました。
- DebianにWebハニーポットのGlastopfをインストールしてみます
- OpenVAS v7をDebian 8にインストールしました。