2015年12月23日水曜日

Chef Workstationを構築する


サーバを用意する


ワークステーション用サーバを用意します。
ここではUbuntu 14.04を導入します。

ダウンロードする


下記URLからUbuntu用のChef Development Kitをダウンロードできます。

https://downloads.chef.io/chef-dk/ubuntu/

URLをコピーしておきましょう。



次のコマンドを使ってダウンロードします。

curl -L -O <URL>



インストールする


インストール方法は以下のURLに掲載されています。
https://docs.chef.io/install_dk.html

sudo dpkg -i <FILENAME>




検証する


正しくインストールされたかどうか、次のコマンドを実行して確認します。

chef verify





このような画面が表示されればOKです。


Rubyのパスを定義する


Chef Development Kitを導入するとRubyもインストールされるが、パスが通っていません。
以下のコマンドを実行して、シェルの起動スクリプトに環境変数がセットされるようにします。

echo 'eval "$(chef shell-init bash)"' >> ~/.profile
 

 
.profileの最後に次の行が追加されているはずです。
 
eval "$(chef shell-init bash)"
 
 
次のコマンドで.profileを読み込みます。

. .profile

次のコマンドでRubyのパスを確認します。

which ruby



/opt/chefdk/embedded/bin/rubyと表示されると思います。


Gitのインストール

オープンソースのバージョン管理システムであるGitをインストールします。
次のURLを開いて、インストールしたいOSの種類を選びます。

http://git-scm.com/downloads

Ubuntuは次のコマンドでGitをインストールできます。

$ sudo apt-get install git-all






エラーで止まってしまいました。
エラーをよく見るとHTTPサーバにうまくアクセスできていないようです。

   E: Failed to fetch https://xxxxx

ネットで検索してみたところ、以下の記事に解決策が掲載されていました。
https://gitlab.com/gitlab-org/omnibus-gitlab/issues/628


この記事によると、次の4つのステップでキャッシュをクリアしてapt-getコマンドを最新化すると良いようです。
  1. apt-get clean
  2. rm -rf /var/cache/apt/*
  3. rm -rf /var/lib/apt/lists/*
  4. apt-get update
うまく導入できると何もエラーがなくプロンプトが返ってきます。
gitコマンドを実行してみると動作するようです。




リポジトリの作成

次のコマンドを実行して各種設定ファイルが格納されるリポジトリを作成します。

chef generate app <APP_NAME>
この例では、APP_NAME=chef_repo




APP_NAMEと同じ名前のディレクトリが生成され、設定ファイルが格納されます。

.chefディレクトリを作成する

ホームディレクトリの下に/chef_repoというディレクトリが作成されているので、その下に.chefという隠しディレクトリを作成します。


$ mkdir -p ~/chef-repo/.chef

このディレクトリにはサーバにアクセスするための秘密鍵などを格納します。
GitにUploadされてはまずいので、.gitignoreファイルに除外指定します。

$ echo '.chef' >> ~/chef-repo/.gitignore

秘密鍵をダウンロードする


Chefサーバで組織とユーザを作成した際に生成される秘密鍵をダウンロードします。

$ scp <Chefサーバのアドレス>:<File path> .




chef-server-keyがユーザの秘密鍵、matsuos-org-keyが組織の秘密鍵です。


knife.rbファイルを作成する

ガイドに沿って、~/chef-repo/.chefの下にknife.rbファイルを作成し、以下のような内容に編集します。
赤字の部分は実際の環境に合わせて変更します。
 
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                'node_name'
client_key               '#{current_dir}/USER.pem'
validation_client_name   'chef-validator'
validation_key           '#{current_dir}/ORGANIZATION-validator.pem'
chef_server_url          'https://api.chef.io/organizations/ORG_NAME'
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ['#{current_dir}/../cookbooks']


node_nameにはChefサーバに登録したユーザ名を入力します。
client_keyにはChefサーバにユーザ登録する際に作成された鍵をダウンロードして保管しているパスを指定します。
validation_client_nameには組織名+”-validator”を入力します。
validation_keyにはChefサーバに組織を登録した際に作成された鍵をダウンロードして保管しているパスを指定します。
chef_server_urlにはChefサーバのホスト名を入力します。
名前解決できない場合は/etc/hostsに指定しておきます。
ORG_NAMEにはChefサーバに登録した組織名を入力します。




RubyをPATHに追加する


Chef Development KitにはRubyが含まれています。このRubyパスを$PATHにセットする必要があります。

.profileなどのシェル起動時に読み込まれる設定ファイルにこのパスを定義しましょう。

$ echo 'export PATH="/opt/chefdk/embedded/bin:$PATH"' >> ~/.profile && source ~/.profile
 
確認するために以下のコマンドを実行してみます。

$ which ruby

/opt/chefdk/embedded/bin/ruby
このように今設定したPATHが表示されればOKです。


SSL証明書を取得する

~/chef-repoに移動します。
次のコマンドを実行します。
 
$ knife ssl fetch
 

~/chef-repo/.chef/trusted_certsというディレクトリの下に証明書が保管されました。
 
 

インストールの検証

Chef Development Kitが正しく導入されたかどうかテストします。
 
~/chef-repoに移動し次のコマンドを実行します。
 
 
$ knife client list
 
 

先ほどのknife.rbに指定したvalidation_client_nameが返って来れば成功です。



コミュニティブックをインポートする

Cookbookは一から作ると大変なので、まずは公開されているCookbookをインポートしてみましょう。

knife cookbook site search <NAME>

Opscode Community(https://supermarket.chef.io/)からNAMEに指定した名前のCookbookを検索してくれます。



次のコマンドを使うと、詳細を確認できます。バージョン関係も詳しく表示されます。

knife cookbook site show <NAME>



Berkshelfを使ってCookbookをインポートする



Berksfileというファイルは~/chef-repo/cookbooks/chef-repoの下に作成されています。


Berksfileには次のようにインポートしたいCookbook名を指定します。

source 'https://supermarket.chef.io'
cookbook 'yum'
cookbook 'python'
cookbook 'nginx'
cookbook 'postgresql'


berksコマンドを実行するとインポートされます。


依存関係があるCookbookも自動的にインポートされます。

インポートされたCookbookはホームディレクトリの下の.berkshelf/cookbookディレクトリの下に保管されます。













0 件のコメント:

コメントを投稿