関連記事
- Chefを使ってより効率的にサーバを管理しよう。まずは用語から
- Berkshelfを使って外部クックブックをノードに適用する。
- クックブックを作成してノードに適用する。- その1
- クックブックを作成してノードに適用する。- その2
- ChefでCentOS 6.7 + rbenv + ruby 2.3.0の環境を構築する。
- ChefでCentOS 6.7 + Vim 7.4 + luaを設置する。
luaをインストール
- luaを有効にしたVimを設置するためlua関連ライブラリをインストールする。
- lua-develはyumで設置する。
- luajitを設置するとluaをより高速で使える。gitリポジトリを取得してtarballで設置する。
クックブックを生成
% bin/knife cookbook create lua -o site-cookbooks
レシピを作成
- site-cookbooks/lua/recipes/default.rb
package'lua-devel'doaction:installendsrc_filepath="#{Chef::Config['file_cache_path']}/luajit"git"#{src_filepath}"dorepositorynode['lua']['luajit_url']user'root'group'root'endbash'install_luajit'docwd::File.dirname(src_filepath)code<<-EOH cd #{src_filepath} make && make install EOHend
実行一覧に追加
% bin/knife node run_list add dev 'recipe[lua]' -z
Vim 7.4をインストール
クックブックの生成
- Berkshelfファイルにクックブックを追加する。
% vi Berkshelf
... snip ...
cookbook 'vim'
- cookbooksの配下に保持する。
bin/berks vendor cookbooks
Attributes
- cookbooks/vim/attributes/default.rb
- install_methodがpackageの場合、yumで設置される。
- install_methodがsourceの場合、ソースコンパイルで設置される。
...snip...default['vim']['install_method']='package'
- cookbooks/vim/attributes/source.rb
- CentOS 6以上ではlua-develに依存される。
...snip...default['vim']['source']['configuration']="--without-x --enable-pythoninterp --enable-rubyinterp --enable-tclinterp --enable-luainterp --enable-perlinterp --enable-cscope --with-features=huge --prefix=#{default['vim']['source']['prefix']}"ifplatform_family?'rhel','fedora'ifnode['platform_version'].to_i>=6default['vim']['source']['dependencies']=%w( ctags gcc lua-devel make ncurses-devel perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-Embed perl-ExtUtils-ParseXS python-devel ruby-devel tcl-devel )...snip...
- lua-devel、luajitの設置した後、Vimをソースコンパイルで設置するとluaを有効にしたVimが設置されるわけだ。
実行一覧に追加
% bin/knife node run_list add dev 'recipe[vim]' -z
Environmentsについて
- 開発、ステージング、本番環境に関するAttributeはここに書いておく。
Environmentsのコマンド
- コマンド一覧
% bin/knife environment
FATAL: Cannot find subcommand for: 'environment'
Available environment subcommands: (for details, knife SUB-COMMAND --help)
** ENVIRONMENT COMMANDS **
knife environment compare [ENVIRONMENT..](options)
knife environment create ENVIRONMENT (options)
knife environment delete ENVIRONMENT (options)
knife environment edit ENVIRONMENT (options)
knife environment from file FILE [FILE..](options)
knife environment list (options)
knife environment show ENVIRONMENT (options)
- 開発環境の生成
% bin/knife environment create dev -d "The development environment." -z
- 開発環境の編集
- node['lua']['luajit_url']を定義
- Vimのクックブックの中に定義されたnode['vim']['install_method']をオーバーライド
% bin/knife environment edit dev -z
{"name": "dev",
"default_attributes": {"user": "vagrant",
"group": "vagrant",
"lua": {"luajit_url": "http://luajit.org/git/luajit-2.0.git"}},
"override_attributes": {"vim": {"install_method": "source"}}}
- 開発環境の詳細
% bin/knife environment show dev -z
chef_type: environment
cookbook_versions:
default_attributes:
group: vagrant
lua:
luajit_url: http://luajit.org/git/luajit-2.0.git
user: vagrant
description:
json_class: Chef::Environment
name: dev
override_attributes:
vim:
install_method: source
Attributesの優先順位
- 公式ドキュメントに詳細に書かれていた。
- https://docs.chef.io/environments.html
ノードの環境を設定
- chef_environmentを_defaultからdevへ変更する。
% bin/knife node edit dev -z
- ノードの環境を確認
% bin/knife node show dev -z
Node Name: dev
Environment: dev
FQDN:
IP: dev
Run List: recipe[yum-epel], recipe[yum-update], recipe[mariadb], recipe[ruby-env], recipe[lua], recipe[vim]
Roles:
Recipes:
Platform:
Tags:
実行結果
- ノードに適用
% bin/knife solo cook dev
Running Chef on dev...
Checking Chef version...
Installing Berkshelf cookbooks to 'cookbooks'...
Resolving cookbook dependencies...
Using yum-epel (0.6.5)
Using vim (2.0.1)
Using yum (3.10.0)
Vendoring vim (2.0.1) to cookbooks/vim
Vendoring yum (3.10.0) to cookbooks/yum
Vendoring yum-epel (0.6.5) to cookbooks/yum-epel
Uploading the kitchen...
Generating solo config...
Running Chef: sudo chef-solo -c ~/chef-solo/solo.rb -j ~/chef-solo/dna.json
Starting Chef Client, version 12.7.2
Compiling Cookbooks...
Converging 22 resources
Recipe: yum-epel::default
* yum_repository[epel] action create
* template[/etc/yum.repos.d/epel.repo] action create (up to date)
* execute[yum clean metadata epel] action nothing (skipped due to action :nothing)
* execute[yum-makecache-epel] action nothing (skipped due to action :nothing)
* ruby_block[yum-cache-reload-epel] action nothing (skipped due to action :nothing)(up to date)
Recipe: yum-update::default
* execute[yum-update] action run
- execute yum -y update
Recipe: mariadb::default
* cookbook_file[/etc/yum.repos.d/MariaDB.repo] action create (up to date)
* yum_package[MariaDB-server] action install (up to date)
* yum_package[MariaDB-client] action install (up to date)
* yum_package[MariaDB-devel] action install (up to date)
Recipe: ruby-env::default
* yum_package[gcc] action install (up to date)
* yum_package[git] action install (up to date)
* yum_package[openssl-devel] action install (up to date)
* yum_package[readline-devel] action install (up to date)
* git[/home/vagrant/.rbenv] action sync (up to date)
* template[.bash_profile] action create (skipped due to not_if)
* directory[/home/vagrant/.rbenv/plugins] action create (up to date)
* git[/home/vagrant/.rbenv/plugins/ruby-build] action sync (up to date)
* execute[rbenv install 2.3.0] action run (skipped due to not_if)
Recipe: lua::default
* yum_package[lua-devel] action install (up to date)
* git[/var/chef/cache/luajit] action sync (up to date)
* bash[install_luajit] action run
- execute "bash""/tmp/chef-script20160223-16690-9llm95"
Recipe: vim::source
* yum_package[bzip2] action install (up to date)
* yum_package[ctags, gcc, lua-devel, make, ncurses-devel, perl-devel, perl-ExtUtils-CBuilder, perl-ExtUtils-Embed, perl-ExtUtils-ParseXS, python-devel, ruby-devel, tcl-devel] action install
- install version 5.8-2.el6 of package ctags
- install version 5.10.1-141.el6_7.1 of package perl-devel
- install version 0.27-141.el6_7.1 of package perl-ExtUtils-CBuilder
- install version 1.28-141.el6_7.1 of package perl-ExtUtils-Embed
- install version 2.2003.0-141.el6_7.1 of package perl-ExtUtils-ParseXS
- install version 2.6.6-64.el6 of package python-devel
- install version 1.8.7.374-4.el6_6 of package ruby-devel
- install version 8.5.7-6.el6 of package tcl-devel
* remote_file[/var/chef/cache/vim-7.4.tar.bz2] action create
- create new file /var/chef/cache/vim-7.4.tar.bz2
- update content in file /var/chef/cache/vim-7.4.tar.bz2 from none to d0f5a6
(new content is binary, diff output suppressed)
- restore selinux security context
* bash[install_vim] action run
- execute "bash""/tmp/chef-script20160223-16690-1hrglcr"
Running handlers:
Running handlers completeChef Client finished, 5/26 resources updated in 01 minutes 33 seconds
- ノードのVimを確認
- ssh devで接続して、vim --versionで確認する。
- luaに有効の場合 +luaが表示される。
% ssh dev
$ vim --version
... snip ...
+dialog_con +lua +rightleft +windows
... snip ...
参考
- https://docs.chef.io/
- Chef実践入門