ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記

日本→シンガポール→ベルリンへと流れ着いたソフトウェアエンジニアのブログ

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
右上のフォークボタンを押す。
f:id:tango_ruby:20160307185359p:plain


自分のローカルにクローンする

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

tango-ruby.hatenablog.com