SummerWind

Web, Photography, Space Development

Chef soloとHTTP Proxy

外部への通信にHTTP Proxyの接続が必要なLinuxサーバーに対して、Chef soloを実行するのにちょっと苦労したのでメモ。

Linuxの場合、HTTP Proxy接続を通して外部に通信するようにするには、一般的に環境変数HTTP_PROXYやHTTPS_PROXYを設定してコマンドを実行する。しかし、Chef soloを実行した場合、各コマンドにあたる処理は全て sudoコマンド経由で起動されてしまうため、HTTP_PROXYやHTTPS_PROXYといった環境変数が落とされてしまう。その結果、HTTP Proxyを通した接続にならずにセットアップに失敗する、というのが今回の問題。

この問題を回避するには、sudoersの設定を変更するといった方法もあるようなのだけど、セキュリティ的にあまりよろしくない。この問題に数時間ほどかけて取り組んだ結果、knife-solo のバージョンを 0.3.0 pre5 以降に更新すればよいということが分かった。

$ gem install knife-solo -v 0.3.0.pre5 --pre

このバージョンのknife-soloから、--sudo-command というsudoコマンドを指定できるオプションが追加されている。ここに -E オプションつきのsudoコマンドを指定してあげれば、環境変数を引き継いだ状態で、Chefの処理を走らせることができる。

$ knife solo cook --sudo-command 'sudo -E' [USER@]HOSTNAME [JSON]

ただ、これだけだとChefのremote_fileが実行されるときにProxyを経由しないので、knife.rbに以下の設定を追加する必要があった。

$ vim .chef/knife.rb

http_proxy "http://your.proxy.com:8080"
https_proxy "http://your.proxy.com:8080"

これでHTTP Proxyが必要な環境でもChef soloがちゃんと走るようになった。あと、今回の問題とは関係ないのだけど、knife-soloの-sオプションは、任意のスクリプトを実行させることができるので、これも便利。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。