chef server インストールメモ

chef自体の説明については省きます。最近話題なので使おうと思ったのですが、まずサーバインストールとクライアントインストールで見事にハマりました。この記事ではそーいう私の伝統芸能についてだけ書きます。勘違いがあったら教えてください。

# サーバは別の人が管理しててchefの使い方だけ知りたいとかいう人には用のない話になってます。

OSはUbunt 12.04.2 LTS、利用したchefのバージョンはserver が11.0.6-1、clientが11.4.0-1。ファイル名で言うと:
  • chef-server_11.0.6-1.ubuntu.12.04_amd64.deb
  • chef_11.4.0-1.ubuntu.11.04_amd64.deb
chef-serverについては、10系だとまた全然違う設定方法になっていたそうで (参考)、もしバージョンが違うものをインストールしてはまってググってここにたどり着いた人がいたら、さっさと帰った方が良いかもしれません。

○ とりあえずサーバについてはオープンソース版とホスティング版的なのがある

http://www.opscode.com/chef/

今回はオープンソース版の方をダウンロードしてインストールです。

○ サーバ: debパッケージがあるのでぶっこむ、だけ、のはずなんだけど

Ubuntu 12.04.2 LTS だと少なくともapt-get で入りません。えーんえーん

ここを元に設定します: http://docs.opscode.com/install_server.html

基本的には自分のOSバージョンにあったパッケージを取ってきてインストールっぽいです。CentOSではrpmですかね。Windowsはちょっとわかりません。今回はUbuntuでdebです。sudo dpkg -iで良い。/opt/chef-server とかに色々入ります。

ただ、びみょーにひっかかるところがあります。地味に大きかったのは、手元の色々とサービス走りまくってるワークステーションで試しに動かしてみようとやったらエラー吐きまくって動かなかった、ということ。良くある話なんですが、暗黙にいろんなサーバアプリを起動してポートを専有しまくって、テストツールやクライアントがそれらが全部正しく動作していることを前提にしてます。インストール時にはそういう警告は出ません。インストール後、sudo chef-server-ctl test する段階でイミフエラーが出たりもします。

具体的には、nginxとかpostgresqlとかの本体がchefの一部として入ってるっぽい感じ。組み込まれたソフトの設定は、インストール後には /etc/chef-server/chef-server-running.json で見ることができます。言われてみりゃそーだ、という話。ただし言われるまでハマると厳しい。せめて既に占有されてるポート辺りは検知してくれ頼む。

というわけで、chef-serverを入れるホストにはそういう競合するソフトは入れるのは(少なくとも遊ぶだけなら)避けるほうが吉。両方混在させる場合にはポートずらしたりすれば良いのだと思いますが、当然そういうところについては親切なドキュメントはあんまりないです (上記の設定変えて chef-server-ctl restrt するだけかねぇ)。最初、間違ってpostgresqlとか入れておいてやったら全くもう動作せず泣きそう、ということでサービス何でもぶっとばせるKVMインスタンスで動作検証していてようやくそーいう基本的なレベルの認識間違いに気づきました。apache2もだめですの。

"chef-server-ctl test" ですがパーミッション的な問題で sudo 必須。

○ クライアント

http://docs.opscode.com/install_workstation.html

こちらはサーバがホスティングサービスのものと共用っぽい。

ここも正直不親切な部分がちらちら……。軽い所では"knife configure -initial" とか (2013-04-11時点では) 色々間違ってます ("knife configure --initial"です。ハイフン)、瑣末ですが。パーミッションの問題で実は sudo 必要なんですさらに。

上記コマンドライン (sudo knife configure --initial) 入力後のデフォルトインプットも軒並み間違っていて (こちらによると10系との互換)、結構混乱します。11.0.6では例えば以下のようにやったらknife.rbを適切に作ってくれました (正確には sudo が必要なためパーミッションがおかしいです。後で sudo chown やったほうがよさげ)。

> sudo knife configure --initial
Overwrite /home/dmiyakawa/.chef/knife.rb? (Y/N) y
Please enter the chef server URL: [http://suitai.XXX:4000] https://suitai.XXX:443
Please enter a name for the new user: [dmiyakawa] 
Please enter the existing admin name: [admin] 
Please enter the location of the existing admin's private key: [/etc/chef/admin.pem] /etc/chef-server/admin.pem
Please enter the validation clientname: [chef-validator] 
Please enter the location of the validation key: [/etc/chef/validation.pem] /etc/chef-server/chef-validator.pem
Please enter the path to a chef repository (or leave blank): 
Creating initial API user...
Please enter a password for the new user: 
Created user[dmiyakawa]
Configuration file written to /home/dmiyakawa/.chef/knife.rb

これで合ってるかも実は不安ですが、一応エラー出ませんし。

ちょーどうでもいいですが、ここのpemファイルは (すぐ分かってくるのですが) 全部rsaの秘密鍵です。コマンドラインでサーバと通信する際にパスワード聞かれないしこの鍵をコピれと言っていることからサーバとの通信時に使うんでしょうね。後述するWeb UIから秘密鍵を入れ替えられるのを見ました。

# なお、鍵の情報自体はopenssl rsa -in (filename) -text -noout ってやると情報出ます。PEM形式使うPKI関連のファイルがたくさんあるのにpemって拡張子使う流儀はあんまり好きくないです (……というか自己署名の証明書と鍵では.crtと.key使ってるじゃん……なんでここはpemなの)

knife configure --initial 上最大の罠は (俺基準)、chef-serverで使われているnginxがデフォでhttpを弾くのに、なんでか上記のプロンプトではhttpのURLがデフォルトになっていて、さらにポートも間違ってるところでしょうか。4000なんて今使われてないよ。なかにだれもいませんよ

(なお手元ではDNSの設定で壮大にミスって更に色々困ってたんですが、chefには全く関係無いので省きます。/etc/hosts 等の設定次第ではhttp://(host):4000 のhostがすっちゃかめっちゃか)

knife.rb についてはパスがchef-server上の鍵の絶対パスを指定していて、だからサーバ-クライアントを分離させる場合にはそこも手で変更します。私のケースではchef-repo/.chef/ には
  • dmiyakawa.pem
  • knife.rb
  • chef-validator.pem
を入れました。

# (2013-04-11現在の) ドキュメント上では chef-validator.pem ではなく ORGANIZATION-validator.pem とありますが、これはホスティング版のサーバ使ってる時に何か別の文字列が入るってだけでしょうねぇ……説明がない

chef-serverが入っているホストとは別のマシンから"knife client list" と打って
  • chef-validator
  • chef-webui
"knife user list" と打って
  • admin
  • dmiyakawa

と出てきたので、上手く動いてるんだと信じます。

おまけですが、上で設定した chef server URL にブラウザアクセスするとWeb UI使えるような気がします。もちろん証明書が自己署名 (オレオレ) なので、外に公開するのなら /etc/chef-server/chef-server-running.json あたりで場所を変更してあげるのです。

めんどくさいのでこれで終わり。

○ まとめ

インストール出来ました。8888

毎度思うんですが、バグなのか自分のミスなのか、成功しきらないかぎりわからないのがドキドキしますね。

このブログの人気の投稿

LibreOfficeで表紙、目次、本体でフッターのページ番号のスタイルを変える

WiiUのコントローラが通信不良に陥った話

技術書典2 あ-03 『もわねっとのPythonの本』