サーバを用意する
ワークステーション用サーバを用意します。
ここでは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コマンドを最新化すると良いようです。
- apt-get clean
- rm -rf /var/cache/apt/*
- rm -rf /var/lib/apt/lists/*
- 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 件のコメント:
コメントを投稿