itamae具体例10選〜寒空のlinuxコマンドを添えて〜


# 目的

訳あって、既存のitamaeを読みながらitamaeを使わずに環境構築をしていました。
検索で「itamaeコード　itamae」とか「linuxコマンド　itamae」とかよく打っていたのですが、記事は「実行できることとitamaeコードまとめ」のようなものが多く、すぐにはlinuxコマンド=itamaeコードがパッと結びつけられませんでした。なので、自分の作業に沿ってになりますが、セットで書いていきたいと思います。

もし「itamaeってなんだ！」の場合は[こちら](http://qiita.com/zaru/items/8ae6182e544aac6f6d79#%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%81%AE%E5%95%8F%E9%A1%8C)。

# iptablesとSELinuxを停止＆無効化
ファイアーウォールを無効化、セキュリティ管理してくれるモジュールを無効化します。


＞itamaeでのこれは・・・

```
service 'iptables' do
  action [:disable, :stop]
end

include_recipe 'selinux::disabled'
```

＞こう！

```
$ /etc/rc.d/init.d/iptables stop # 一時停止：再起動時に再び有効化される
$ chkconfig iptables off         # 無効化：再起動時しても無効のままになる
$ setenforce 0                   # selinuxを無効化
```
[引用](http://d.hatena.ne.jp/uriyuri/20080704/1215164085)

# 外部リポジトリを追加。
epelリポジトリとかremiリポジトリを追加します。

＞itamaeのこれは・・・

```ruby
package 'http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm' do
  not_if 'rpm -q epel-release'
end

package 'http://rpms.famillecollet.com/enterprise/remi-release-6.rpm' do
  not_if 'rpm -q remi-release'
end
```

＞こう！

```
rpm -q epel-release
rpm -q remi-release
```

ちなみに、yumを自動探索の設定はremote_fileのようなものでファイルを用意しておいて変更を加えます。owner・groupを設定することでroot権限で実行できます。「それさえもコマンドだ！」という方は[こちら](http://qiita.com/KurosawaTsuyoshi/items/9a2b61af6e13dfa5641b)。

```
remote_file "/etc/yum.repos.d/remi.repo" do
  owner "root"
  group "root"
  source "./templates/etc/yum.repos.d/remi.repo"
end
```

# gitをインストール


＞セイ！

```
package "git" do
  action :install
end
```

＞ヤァッ！

```
yum -y install git
```

# redisをインストール

＞これは・・・

```
package "redis" do
  action :install
end
```

＞こう！

```
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum --enablerepo=epel install redis
```
[参照](http://qiita.com/hayashikun/items/01b0658b8fc2a57a47c3)

ただ、さきほどあった「外部リポジトリを追加。」をしておけば、rpm -ivh〜のほうはしなくても、`yum --enablerepo=epel install redis`だけでいけます。

# 変数を使った条件分岐
itamae実行時にファイルを読み込むと変数を扱えます。
[こちら](http://qiita.com/zaru/items/8ae6182e544aac6f6d79#%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%81%AE%E5%95%8F%E9%A1%8C)で説明されていますが、環境ごとにファイルを用意してitamaeコマンド時指定してあげることで、環境ごとの設定にすることができます。

nodes/development.jsonを用意して以下のように書いてあげて

```
{
	"env": "development"
}
```

itamaeで以下のように書いてあげると、itamaeコマンドでnodes/development.jsonを指定した時だけredisが起動されます。

```
# 本番環境は外部のRedisサーバを使用するため起動しない
if node[:env] == "development" then
  service 'redis' do
    action [:enable, :start]
  end
end
```

＞コマンドではこう！

```
/etc/init.d/redis start
chkconfig redis on
```

# root権限で、ファイルのコピーと権限変更
root権限でファイルを変更し、権限を変更する時。

＞これは・・・

```
template "/etc/nginx/nginx.conf" do
  owner "root"
  group "root"
  mode "644"
  source "./templates/etc/nginx/nginx.conf.erb"
end
```

＞こう！

```
# ソース内容 ./templates/etc/nginx/nginx.conf.erb
# 指定先 /etc/nginx/nginx.conf
〜コピペでもなんでも。〜　# 指定先にソース内容を反映。
sudo chmod 644 /etc/nginx/nginx.conf
```

# 新しいディクトリを作成して、コピー、

```
directory "/etc/nginx/ssl"
remote_directory "./files/etc/nginx/ssl" do
  action :create
  path "/etc/nginx/ssl"
  source "./files/etc/nginx/ssl"
  mode "600"
  owner "root"
  group "root"
end
```

```
〜mkdirしてなんやらして〜 #/etc/nginx/sslをディレクトリ作成
〜コピペして〜 #./files/etc/nginx/sslの内容を/etc/nginx/sslへコピー
chmod 600 /etc/nginx/ssl/
```


# ファイル削除（コマンド実行）
executeを使えば、コマンドを実行できます。

＞例えばファイルを削除のこれは、

```
execute "remove default conf files" do
  user "root"
  command "rm -rf /etc/nginx/conf.d/*.conf"
end
```

＞こう！

```
sudo rm -rf /etc/nginx/conf.d/*.conf
```


# インストール（条件付きでコマンド実行）
not_ifを使えば、`npm ls -g n | grep n@`の出力がなければ、

```
execute "install n" do
  user "root"
  command "npm install -g n"
  not_if "npm ls -g n | grep n@"
end
```