Symfoware

Symfowareについての考察blog

コンソール起動時に GVM can't reach the internet so going offline. Re-enable online with:

GVMを使用して、UbuntuにGroovyをインストールしました。
Ubuntu 12.10にGroovy 2.1.9をインストールする(GVM:Groovy enVironment Manager使用)


その後、端末を起動すると、こんなエラーが表示されるように・・・

GVM can't reach the internet so going offline. Re-enable online with:

$ gvm offline disable




指示通り、「gvm offline disable」を実行すると普通にgvmが使用できるようになるのですが、
やっぱり気になってしょうがない。

検索してみると、同じ現象が発生している人がいるようですが、解決策は出てないようです。
Going offline although internet connection is present


しょうがないので、原因を調べてみました。




gvm-init.sh



端末起動時に実行されるgvm-init.shのソースはこちら。

https://github.com/gvmtool/gvm/blob/master/src/main/bash/gvm-init.sh


53行目:gvm_check_offlineが失敗した時、
「GVM can't reach the internet so going offline. Re-enable online with:」
というメッセージを表示しています。

gvm_check_offlineは、197行目から呼び出されています。
渡している値は
「curl -s "${GVM_SERVICE}/app/version" -m 1」を実行した結果。

GVM_SERVICEは、http://api.gvmtool.netのようですので、端末で

curl -s "http://api.gvmtool.net/app/version" -m 1


を実行してみます。



$ curl -s "http://api.gvmtool.net/app/version" -m 1
$



・・・結果が表示されない。

-mオプションを調べてみると、
curl.1 man ページ


-m, --max-time <seconds>

処理全体にかけられる時間の上限(秒)を指示します。 ネットワークやリンクのダウンによりバッチジョブが
何時間も滞ってしまうことを防ぐのに役立ちます。
7.32.0 からは、 10 進小数も許容されるようになりました。
ただし、実際の時間の精度は,指定された 10 進数の精度にいくらでも追随するわけではありません
【10 進数と内部の 2 進データの違いから生じる誤差の意味で?】。
--connect-timeout もご覧ください。
多重付与:上書き




ということで、私のネットワーク環境では、1秒以下で結果を取得できないようです。
-m 1を-m 10に変更して実行してみます。


$ curl -s "http://api.gvmtool.net/app/version" -m 10
1.3.12



今度はバージョン情報が取得出来ました。
これが原因だったようです。






対処方法



gvm-init.shの該当箇所を変更することにしました。
gvm-init.shをエディタで開きます。


$ vi ~/.gvm/bin/gvm-init.sh




190行目付近。
-m 1の記載を-m 10に変更します。


# determine if up to date
GVM_VERSION_TOKEN="${GVM_DIR}/var/version"
if [[ -f "$GVM_VERSION_TOKEN" && -z "$(find "$GVM_VERSION_TOKEN" -mtime +1)" ]]; then
    GVM_REMOTE_VERSION=$(cat "$GVM_VERSION_TOKEN")

else
    GVM_REMOTE_VERSION=$(curl -s "${GVM_SERVICE}/app/version" -m 10)
    gvm_check_offline "$GVM_REMOTE_VERSION"
    if [[ "$GVM_FORCE_OFFLINE" == 'true' ]]; then
        GVM_REMOTE_VERSION="$GVM_VERSION"
    else
        echo ${GVM_REMOTE_VERSION} > "$GVM_VERSION_TOKEN"
    fi
fi




これで端末起動時にofflineメッセージが表示されなくなりました。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/11/30(土) 16:58:50|
  2. Java
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
次のページ