Vagrantとか使う上ではまるProxyの話
「Vagrantでknife-solo+Serverspecなboxを作っていた話」のおまけ的な話です。
VagrantとかChefとか使ってるとネットに様々アクセスすると思いますが、
企業によってはネットへのアクセスにProxyを使ってる所も多いかと思います。
これが非常に毎回色々はまるのでいくつか。
といっても汎用的な話はたいがいググったら他にもっと良いサイトが出るので、
自分のケースを書こうと思います。
①Vagrantにpluginをインストールする時
Windowsの環境設定で環境変数に
変数名:http_proxy
変数値:http://proxy_url:proxy_port
②VagrantBoxを作った話(http://a3no.hatenablog.com/entry/2013/09/08/230712)から
Boxを作る際には2つ設定。
1つはgem installの際で、rootになった後に
# export http_proxy=http://proxy_url:proxy_port
しておけば良いです。
直接操作する系は大体これでいける(必要ならhttps_proxyも)。
例えばaptやyumも直接叩く場合はこれでいいです。
もう1つはChefのインストールの時。
こちらはスクリプトの中でwgetしてるのでwgetcを編集しておく必要があります。
~wgetrcを作るか、/etc/wgetrcを開いて以下を追記します。
use_proxy = on http_proxy = http://proxy_url:proxy_port https_proxy = http://proxy_url:proxy_port ftp_proxy = http://proxy_url:proxy_port
上記のBoxの場合、配布することも考えていたので汎用性のために
wgetrcの設定はインストールが終わったら自分は消しています。
以上はBoxを作成する際に必要なことですが、Boxを使う際には更に以下が必要です。
knife-solo実行ユーザの~/.ssh/configに設定を追記しています。
Host *.domain.com *.domain.jp *.domain.co.jp Port 22 User execuser ProxyCommand nc -X connect -x proxy_url:proxy_port %h %p
Hostの後のdomainはデプロイ先、Userは自分のログインユーザです。
ログインユーザや接続先を設定するのでBoxを作る時というよりは、
box addして使い始める時に最初に設定する感じです。
③デプロイされる側のBox
デプロイされる側のBoxは用途によってOSが変わったり
既に一部のツールがインストール済みのものを使ったり様々です。
それらに最初から各種Proxyの設定をするのは非常に面倒です。
設定も上記のwgetrcに加えてaptやcurlrc、bashrc等々、種類も様々。
そこで、このサイトで紹介している方法を参考というか採用しました。
vagrantfileに読み込むスクリプトを記載して起動時に設定しています。
そのままじゃなくてもう少し追加して今こんな感じですね。
#!/usr/bin/env bash HTTP_PROXY="proxy_url:proxy_port" HTTPS_PROXY="$HTTP_PROXY" # Exit if already bootstrapped [ -f /etc/bootstrapped ] && exit echo "Setting HTTP Proxy for /etc/environment" cat << EOM >> /etc/environment http_proxy="http://$HTTP_PROXY/" https_proxy="http://$HTTPS_PROXY/" EOM if [ -d /etc/apt ]; then echo "Setting HTTP Proxy for /etc/apt/apt.conf" [ ! -f /etc/apt/apt.conf ]; touch /etc/apt/apt.conf cat << EOM >> /etc/apt/apt.conf Acquire::http::proxy "http://$HTTP_PROXY/"; Acquire::https::proxy "http://$HTTPS_PROXY/"; EOM elif [ -f /etc/yum.conf ]; then echo "Setting HTTP Proxy for /etc/yum.conf" cat << EOM >> /etc/yum.conf proxy=http://$HTTP_PROXY/ EOM #for dns-resolve configuration /usr/bin/sudo /sbin/service network restart else echo "no Ubuntu/CentOS" fi echo "Setting HTTP Proxy for cURL in Vagrant user directory" if [ -d /home/vagrant ]; then cat << EOM >> /home/vagrant/.curlrc proxy = "http://$HTTP_PROXY/" EOM fi if [ -f /etc/wgetrc ]; then cat << EOM >> /etc/wgetrc https_proxy = http://$HTTPS_PROXY/ http_proxy = http://$HTTP_PROXY/ ftp_proxy = http://$HTTP_PROXY/ use_proxy = on EOM fi date > /etc/bootstrapped
もっと良いやり方あったり間違ってたりするかもしれませんが、
とりあえず参考になれば。