読者です 読者をやめる 読者になる 読者になる

ほわいとぼーど

ぷろぐらまのメモ帳

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

もっと良いやり方あったり間違ってたりするかもしれませんが、
とりあえず参考になれば。