[memo]Chef Server環境セットアップ手順

2015年11月時点で個人勉強で構築した手順です。無くさないよう、ここで記載します。

最小構成でインストールしたCentOS7.1にChef Server 12.2をインストール手順です。

## 本手順で作成される環境
|ソフトウェア|バージョン|
|:------------|----------------------------:|
|Chef-Server  |  chef-server-core-12.2.0-1  |
|OS           | CentOS7.1                   |
|workstation  | Ubuntu15.04                 |
|node         | Centos7.1                   |

## CentOSの設定
### SELinuxを無効にする
/etc/sysconfig/selinuxを編集

```
SELINUX=disabled
```
変更後、CentOSを再起動

```
reboot
```
再起動後、SELinuxは無効になっているかを確認

```
getenforce
```

`Disabled`であればOK。

### firewalldでHTTPSを許可
デフォルトzoneにhttpを追加する

```
firewall-cmd --zone=public --add-service=https --permanent
```
`success`が出力

追加した設定を反映

```
firewall-cmd --reload
```
`success`が出力

httpでのアクセスが許可されたか確認

```
firewall-cmd --zone=public --list-services
```
`dhcpv6-client https ssh`が出力、https追加されたことを確認

## Chef Serverの導入
今回はCentOS7上で構築するので、以下通りになる。ほかの環境であれば、[chef公式パッケージダウンロードページ](https://downloads.chef.io/chef-server/)
### パッケージのインストール
```
wget https://web-dl.packagecloud.io/chef/stable/packages/el/7/chef-server-core-12.2.0-1.el7.x86_64.rpm
rpm -ivh chef-server-core-12.2.0-1.el7.x86_64.rpm
chef-server-ctl reconfigure
```
**注意点**

上記rpmインストール完了後に、chef-server-ctlコマンドが使用可能になる。実行前に、hostnameの情報を確認すべき。
場合によって、/etc/hostsを編集し、`IP　host.domain`のエントリーを追記。

### Web UIのインストール
```
chef-server-ctl install opscode-manage
chef-server-ctl reconfigure
opscode-manage-ctl reconfigure
```
これで、ブラウザからアクセス可能になる。

**補足**

今回の場合`localhost.domain = chef-server.sjteam`
なので、https://chef-server.sjteam  
もちろんDNS登録していないので、自分解決。また、https://ip_of_chef_server:443

### administrator権限のユーザを作成
```
chef-server-ctl user-create user_name first_name last_name email password --filename FILE_NAME
例：
chef-server-ctl user-create kaminari.y Kaminari Y kaminari.y@jsteam.co.jp ilovechef --filename /etc/chef/kaminari.pem
```

### 所属組織を作成
```
chef-server-ctl org-create short_name "full_organization_name" --association_user user_name --filename ORGANIZATION-validator.pem
例
chef-server-ctl org-create sjteam "sjteam LAC, Inc." --association_user kaminari --filename /etc/chef/sjteam-validator.pem
```
**これでChef Serverの設定はほぼ完了となる。以下のWorkstation側**

## ==========================================================================

## Workstationの設定

### chef clientのコマンド類のインストール
```
curl -L https://www.opscode.com/chef/install.sh | bash
```
rootユーザで実行、sudoでエラーになる。

### Chef Serverとの連携の鍵を設置
前述に、Chef Serverの`/etc/chef/`以下に*.pemファイルが作成され、このファイルはWorkstationの`~/.chef/`以下に設置
rloginでscp転送したので、手順は割愛

### cookbookの雛形取得
github上から取得するので、Workstationにgitをインストールしていない場合、ここでインストール。
ほかの方法でも良いですが、今後cookbookの修正・管理を考え、ぜひgitを導入したほうが良い。
gitの導入方法はここで割愛

```
git clone git://github.com/opscode/chef-repo.git
```
上記より、cookbookの雛形を取得

### knifeの設定
```
knife configure -i
```
そして以下通りになる(参考)

```
WARNING: No knife configuration file found
Where should I put the config file? [/home/kaminari/.chef/knife.rb]
Please enter the chef server URL: [https://kaminari-chef-client:443] https://chef-server.sjteam:443
Please enter a name for the new user: [kaminari] admin
Please enter the existing admin name: [admin] kaminari
Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] /home/kaminari/.chef/kaminari.pem
Please enter the validation clientname: [chef-validator] sjteam-validator
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] /home/kaminari/.chef/sjteam-validator.pem
Please enter the path to a chef repository (or leave blank): /home/kaminari/chef-repo
Creating initial API user...
Please enter a password for the new user:
```

最後にエラーになったが、`~/.chef/knife.rb`が作成された。別に手動で作成、修正も効くので、エラーを無視。
最終に修正した結果は以下を参考

```
log_level                :info
log_location             STDOUT
node_name                'kaminari'
client_key               '/home/kaminari/.chef/kaminari.pem'
validation_client_name   'sjteam-validator'
validation_key           '/home/kaminari/.chef/sjteam-validator.pem'
chef_server_url          'https://chef-server.sjteam/organizations/sjteam'
syntax_check_cache_path  '/home/kaminari/.chef/syntax_check_cache'
cookbook_path [ '/home/kaminari/chef-repo/cookbooks' ]
```
**注意点**

ここで`chef_server_url`をhttps://host.domain/organizations/実際のorganization  を変更する必要があります。

### SSL疎通設定
knifeの証明書関連の設定
```
knife ssl fetch https://chef-server.sjteam
```
ちなみに、workstaionの`/etc/hosts`にもChef Serverのエントリー追記を忘れずに！

### 設定部分完了
ここまで成功していると、以下のコマンドが使えるようになっている。
```
knife user list
knife client list
```

## node登録
knifeで操作できるように、テストnodeを作成し、Chef Serverに登録
ここはCentOS7.1インストール完了後に、bootstrapを用いて実施

```
knife bootstrap IP -x user -P password -N node_name --run-list 'role[base_common]'
```
|オプション|値|
|:--------------------|----------------------------:|
|IP     | nodeのIPアドレス  |
|user            | node上実行権限あるユーザ名(sudoの場合、--sudoが必要)  |
|password   | 説明不要                 |
|node_name          | chef-serverに登録するときの名前                   |
|run-list  | nodeにchef-client後、実施したいrecipe |

上記完了後に、Chef ServerにNode登録

```
chef-client
```
エラーがなければ

```
knife node list
```
`web-server`が出力される。

# 以上