最近test-kitchenを使いはじめました。
redisioのcookbookを動かしたところ以下のようなエラーがでました。
STDERR: /etc/init.d/redislocalhost: line 28: ulimit: open files: cannot modify limit: Operation not permitted
could not open session
エラーメッセージを読む限りulimitを変更する権限がないおって感じのこといわれていると思います。
そもそもulimitとは
だいたいグーグル先生に聞くとシステムリソースを制限する設定を行うコマンド
という答えをいただきました。
では、今回問題となった/etc/init.d/redislocalhost
の28行目を見てみましょう。
$ kitchen login
$ vi /etc/init.d/redislocalhsot
27
28 ulimit -n 10032
29
つまりulimitの制限しているから問題のようです。
recipeとかをtemplate書き換えてtest-kitchen動かす環境だけulimitの行を取り除くってのも微妙なアプローチですね。
dockerとulimitについて
どうしてulimitを書くとエラーになるのかはこの記事にわかりやすく解説されていたのでお読みください。
で、解決策として、Problem running Apache/Ubuntu from docker #1900を見るとどうやらprivileged
オプションを渡して実行しているようです。
docker run -p :80 -privileged IMAGE apache2ctl -D FOREGROUND
kitchen-dockerでのprivilegedの指定
kitchen-dockerのgithubを眺めている方は気づいているかもしれませんが、kitchen-dcokerではprovilegedの指定のオプションがあります。
ということで、.kitchen.ymlなり.kitchen.local.ymlの記述のサンプルをのっけておきます。
$ vim .kitchen.yml
---
driver:
name: docker
provisioner:
name: chef_solo
platforms:
- name: centos-6.4
driver_config:
image: centos
platform: centos
dns: 8.8.8.8
socket: tcp://192.168.56.101:4243
privileged: true
suites:
- name: default
run_list:
- recipe[yum]
attributes:
上記にように記述すればulimitによるエラーは発生しなくなります。