こんにちは、ほっかいです。
サーバを渡り歩いていて、うっかり
aptitude install <パッケージ名>
と入力しちゃいそうになること、多いですよね。
"Chef勉強会@Engine Yardさんに行ってきた - 実はhokkai7go" - http://d.hatena.ne.jp/lncr_ct9a/20130223/1361597781
で、すっかりChefにどっぷりハマッてしまった身としては、
うっかり aptitude コマンドで何かをインストールすると、後悔の念にとらわれます。
そこで、次のコマンドたちでChefでのおいしい管理上に乗せてしまいます。
(最近出た id:naoya さんの電子書籍や、他の方の blog を読んでいるともっとさっくりできそうな気もしています...)
chef ではインストールだけじゃなくて、サービスの起動停止についてのレシピも書けます。
chef での管理までの道のりとして、
- インストールを楽にする
- サービス管理を楽にする
の2ステップがあると思っています。
いっきにこの2ステップを踏むこともできるんですが、ただでさえchefのコマンド体系とか覚えるの大変なので無理せず…
管理方針です
- 大規模なサーバ管理はしていないので、今回は chef-solo で。
- rubyはRVMで入れる
- chefはgemとして入れる
RVMのインストール
\curl -L https://get.rvm.io | bash
rvm requirements で必要なパッケージ確認
rvm requirements
rvm requirements で出てきたパッケージたちを仕方なく aptitude で入れる(既に rvm 入っているサーバならやらない)
$ aptitude install (コピペしたパッケージたち)
gemset つくる
rvm ruby-1.9.3-pxxx@chef --create
chefとknife-github-cookbooksというgemをインストール
gem i chef knife-github-cookbooks -V --no-ri --no-rdoc
gem コマンドには、 -V (詳細表示)しないと進んでんだか止まってんだかわからなくて気持ち悪い
サーバ上で ri やら rdoc を参照することは皆無なので、--no-ri --no-rdoc でスキップ
(レシピ先輩Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
ありがとう)
chef-repo ディレクトリを chef で使うリポジトリとして生成する
knife solo init chef-repo
cd chef-repo
chef-repo を コミット対象に ( knife-github-cookbooks で github からの recipe を入れるときに modified や untracked な状態だと 進めない)
git add .
最初のコミット
git commit -m "First commit"
僕は git commit -v でエディタを開いて、コミットメッセージを入れるほうが好きです。
diff やブランチ名を確認できるので。
ここでは例として、apt cookbook を入れる
knife cookbook github install cookbooks/apt -o ./cookbooks/
cat ~/.ssh/<鍵の名前> >> ~/.ssh/authorized_keys 的なコマンドで… パーミッションに注意...
knife で調理前の下ごしらえを
knife solo コマンドは、見た感じsshコマンドに似ています。この例ではlocalhost に接続してますが、
ローカルマシンから、リモートを指定して(xargsとか使って複数指定も可) prepare や cook をするみたいです。
knife solo prepare <ユーザー名>@localhost
実行したいレシピをnodes/localhost.json に書く
vi nodes/localhost.json
cookbook_path を指定する
vi solo.rb
cook する!!!
よいサーバー管理者のみなさんの扱う ssh のポートはたいてい、22じゃないよね? -p オプションでポート指定
knife solo cook <ユーザー名>@localhost nodes/localhost.json (-p xxxxx)
(^o^)