要件
謝辞
- 伊藤直也さんが書かれた「入門Chef Solo - Infrastructure as Code」
- 3/19 にパソナテックで開催された Chef ハンズオンセミナー講師の堀田氏(@jhotta)
準備
- 要件を整理して recipe に落とし込む
- cookbook は少ない方が良いらしいけど、今回はお試しということで要件ごとに cookbook を用意することにする
要件 | リソース | cookbook |
---|---|---|
不要なサービス停止 | service | def_setting |
SELinux 停止 | template | def_setting |
root アカウントによる ssh ログイン停止 | template | def_setting |
グループ serveradmin とユーザー hoge の作成すること | group + user | create_user |
yum のプラグインとして yum-fastestmirror と yum-priorities をインストール | package | yum_setting |
追加リポジトリは rpmforge を追加 | cookbook_file + package | yum_setting |
パッケージは vim-enhanced と screen | package | packages_install |
手順
対象 node
- 対象 node 上で chef-solo を実行するユーザーを作成
- 上記のユーザーは管理ワークステーションからパスワード無しにてログイン出来るようにしておく
- 上記のユーザーは対象 node にてパスワード無しで sudo が利用出来るようにしておく
管理用ワークステーション
1. chef-solo が利用出来るようにする(こちらを参考)
2. knife-solo のインストール
sudo gem install knife-solo
3. ~/.chef/knife.rb を設定する
knife[:solo_path] = '/tmp/chef-solo'
4. 新規 chef リポジトリの作成
cd ~ knife solo init chef-repo
5. 対象 node にて chef が利用出来るようにする
knife solo prepare chefsolo@${対象node}
それぞれの cookbook の recipe
- resource の template と cookbook_file をゴッチャにしてしまっているので注意
cookbook を作成する
cd chef-repo/site-cookbooks/ knife cookbook create create_user -o ./ knife cookbook create def_setting -o ./ knife cookbook create yum_setting -o ./ knife cookbook create app_setting -o ./
def_setting
# sshd の root ログインの停止 service "sshd" do supports :status => true, :restart => true, :reload => true action [:enable, :start] end template '/etc/ssh/sshd_config' do source 'ssh/sshd_config.erb' owner 'root' group 'root' mode '0600' notifies :reload, 'service[sshd]' end # SELinux を無効化 template '/etc/selinux/config' do source 'selinux/config' owner 'root' group 'root' mode '0644' end # 不要なサービスの停止 %w{cpid apmd atd auditd autofs avahi-daemon avahi-dnsconfd bluetooth cups dhcdbd firstboot gpm hidd ip6tables iptables isdn mcstrans mdmonitor netfs nfslock pand pcscd portmap readahead_early restorecond rpcgssd rpcidmapd yum-updatesd xfs}.each do |service_name| service service_name do action [:disable, :stop] end end
create_user
# serveradmin グループを作成 group "serveradmin" do gid 1001 end # hoge ユーザーを作成 user "hoge" do comment "Test User" uid 1002 gid 1002 home "/home/hoge" shell "/bin/bash" password "$1$Icg/iil8$DOq45aRmvzrSjwdrZOYuC." end
- password は下記のコマンドにて作成する
openssl passwd -1
yum_setting
- 昨日の Chef ハンズオンで質問する前に書いたレシピなので rpmforge の RPM を cookbook_file で転送してインストールしている...
# yum-fastestmirror yum-priorities のインストール %w{yum-fastestmirror yum-priorities}.each do |package_name| package package_name do action [:install] end end # CentOS-Base.repo の設定 template "/etc/yum.repos.d/CentOS-Base.repo" do source 'yum.repos.d/CentOS-Base.repo.erb' owner 'root' group 'root' mode '0644' end # rpmforge リポジトリのインストール rpmforgefile="rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm" cookbook_file "/tmp/#{rpmforgefile}" do mode 0644 checksum "2df746e6fa066607c3a177578472f6dbb1a7fc6b8e53b79a2373d6ce9774da17" end package "rpmforge" do action :install source "/tmp/#{rpmforgefile}" provider Chef::Provider::Package::Rpm end # rpmforge の設定 template "/etc/yum.repos.d/rpmforge.repo" do source 'yum.repos.d/rpmforge.repo.erb' owner 'root' group 'root' mode '0644' end
- checksum は下記のようにして取得する
sha256sum rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
packages_install
# パッケージのインストール %w{vim-enhanced screen}.each do |package_name| package package_name do action :install end end
まとめ
- knife-solo を使って OS をインストールしたてのサーバー(対象 node)を chef で設定出来る
- knife solo prepare で対象 node にて chef が利用出来るようにする
- あとは cookbook 作って recipe 書いて適用
- 対象 node で chef を実行するユーザーに対してパスワード無しで sudo が使える権限を与える必要がある
- 今後はサーバーを手動で設定するのは禁止だなと...
- 昨日のハンズオンで質問した内容を生かして recipe を修正したい
- template を file へ
- cookbook_file を http_request に