Chefを使ってnginxを入れる際にChef::Exceptions::ChecksumMismatchが出た時の対処法
移転しました。
CookBookにコメントでChecksumを調べて変えろ、って書いてあるけど、どうやって変えるのかちょっと悩んだのでメモ。
ずっと以前からお世話になっているこのnginx用のcookbook。
nginx Cookbook - Chef Supermarket
ナニも考えずにそのまま最新版のnginxバージョンを指定してChefを動かすと以下のようなエラーが出る。
Chef::Exceptions::ChecksumMismatch ---------------------------------- Checksum on resource (b5608c) does not match checksum on content (23cca1) Resource Declaration: --------------------- # In /var/chef/cache/cookbooks/nginx/recipes/source.rb 58: remote_file nginx_url do 59: source nginx_url 60: checksum node['nginx']['source']['checksum'] 61: path src_filepath 62: backup false 63: end 64:
詳しくcookbook読むとchecksumをバージョンごとに変えろよ、とご丁寧に書いてある。
ひとまずこちらのrepositoryを自分のGitHubアカウントにフォークする。
https://github.com/miketheman/nginx
右上のフォークボタンを押す。
自分のローカルにクローンする
git clone <自分のとこにフォークしたrepository>
マスターブランチに移動する
git checkout master
attributes/source.rb のchecksumのデフォルト値を変更する
default['nginx']['source']['checksum'] = '23cca1239990c818d8f6da118320c4979aadf5386deda691b1b7c2c96b9df3d5'
更新する値は以下のコマンドで調べる。?には入れる予定のバージョン番号
curl http://nginx.org/download/nginx-?.?.?.tar.gz | shasum -a 256
でてきた文字列をそのままattributes/source.rbの上記の場所にコピー&ペーストして自分のrepositoryに上げる。
Berksfileのnginxの行を変更する
cookbook 'nginx', git: 'https://github.com/<GitHubのユーザー名>/nginx.git'
berks をアップデートしてアップロードする。--forceしないと、上げてくれない。
berks update berks upload --force nginx
後はsudo chef-clientとかして反映させればOk。
デフォルト値を変更するのが正しいのかどうかはちょっと不明。もっと正しい方法をご存知であればコメントください。
tango-ruby.hatenablog.com