ど素人のchef体験記 1

Linuxをコンソールから扱うのに不自由はないけれど、chefは「何それ?」状態な私。
とりあえず、やったことをまとめることにする。

覚書しとかないと本当混乱しちゃって覚えられなさそう。
未だにクックブックとかレシピとか、その辺の用語が覚えられていないし…。

続編があると見込んで、タイトルに"1"って付けておく。

参考図書

伊藤直也さんの「入門Chef Solo」をKindle版で購入して読んでいます。

検証環境

使用マシンはWindows 7
その上でVirtualBoxを動かしてCentOS 6を起動。
knife soloでリモート環境が必要な時はAmazon EC2インスタンス(CentOS6)立てて使用。

やったこと

参考図書を読みながらコマンドを実際に打って動作確認。
Vagrantに関する所は、OSが入れ子になって行くためマシン(Windows 7)のメモリ等が足りなくなりそうなので読んだだけ。
knife soloのところまでは読んだ。
本とは別に、起動済みのEC2インスタンスにknife soloでとりあえずwordpressを動かすというのも試した。

はまったところ

参考図書で「#3 nginxをChef Solo で立ち上げたい」の通りにやっていたらエラー発生。
理由は、CentOSリポジトリではnginxをサポートしていなかったから。
最初はエラー画面をよく見ないで(VirtualBoxで起動したコンソール上でやっていたため、more等で大量に出るメッセージをちゃんと読んでなかったから)、どこか手入力した設定ファイルが間違っているんだと思っていた。
何度か実行して、| more でしみじみと画面を眺めたら、yumでそんなパッケージないみたいなエラーが出ていたと思う。

解決には、nginxのサイトに行き、CentOS用のyum用設定を行う。
http://nginx.org/en/linux_packages.html#stable

  • knife-soloコマンドが有効にならない

参考図書の「#5 リモートから chef-solo を実行する ― knife-solo」で、knife-soloのインストールでこんがらかった。
とりあえずgem install knife-soloで入れたが、knife solo --helpで結果が帰らず、次に0.3.0をインストールする方法を試したがbundlerがなんちゃらというエラーが出たと思う。
rubygemsとか詳しくないので、初めてのことにハテナ。

何度も実行して、画面メッセージの通りにgem cleanup knife-soloを実行したところ、初めて2バージョンインストールされていたことに気付いた。
その後もknife soloが使えなかったので、ネットを探した。

すると、chefのバージョンが新しいとknife-soloが動かないという情報あり。
ここが参考になった。
http://qa.atmarkit.co.jp/q/3107

で、結局chefを11.4.4に落とし、knife-soloは0.4.0という組み合わせで無事動いた。

この時、gem uninstall chefとgem uninstall knife-soloして、入れ直した。
バージョン指定でのインストールは-vオプションで可能。

knife soloを使ってEC2上にwordpress(セキュリティ無視)

chefを使って簡単にサーバの設定を経験する、という意図で実施。
公開されているクックブックを利用してとりあえず起動させてみようと言うレベルでやってみた。

クックブックはここからダウンロードした。
https://github.com/opscode-cookbooks

とりあえずwordpressをダウンロードして実行。
apache2が見つからないと怒られた。

先ほどのサイトでapache2をダウンロードして設置、実行。
また足りないと怒られた。

で、結局以下のクックブックを設置したところ、ちょっと先に進んだ。
apache2 build-essential mysql openssl php wordpress xml

今度はmysqlの設定が足りない、とのこと。
githubのページを見に行くと、jsonファイルへの記述方法が載っていた。

wordpressを実行するためのjsonは、下記になる。

{"run_list":[
        "recipe[wordpress::default]"
]}

そこへmysql用の下記の記述をどう追記したものか、悩んだ。

{
  "mysql": {
    "server_root_password": "iloverandompasswordsbutthiswilldo",
    "server_repl_password": "iloverandompasswordsbutthiswilldo",
    "server_debian_password": "iloverandompasswordsbutthiswilldo"
  },
  "run_list":["recipe[mysql::server]"]
}

単純に追記したらjsonファイルがおかしいみたいなエラーが出た。
mysqlwordpressからincludeされて実行されているから、jsonでrun_listの記述がなくて良いと思ったから、どう書いて良いのか悩んだ。
だが、chefはインストール済みだったらだったで対処してくれるようにできていることを思い出した。
だから、結果、下記のように記述して無事実行できるようになった。

{
  "mysql": {
    "server_root_password": "iloverandompasswordsbutthiswilldo",
    "server_repl_password": "iloverandompasswordsbutthiswilldo",
    "server_debian_password": "iloverandompasswordsbutthiswilldo"
  },
  "run_list":["recipe[mysql::server]"],
  "run_list":["recipe[wordpress::default]"]
}

これでwordpressが起動し、管理画面に入れるようになった。

このjsonファイルの編集のところ、夢にも出て来たよ。
","が足りなくてエラーになったりもしたんだけれども、jsonファイルについても知識が足りずになかなか解決しなかった。
夢の中で『jsonファイルの形式を思い出したら","で区切るのが普通だから、そりゃあ","必要だろうよ』という結論に至り、納得した。
寝ている時に頭の中のデータを整理するって本当なんだね。