LoginSignup
10
4

More than 5 years have passed since last update.

sbtのインストール・プロキシ設定【Linux】

Last updated at Posted at 2017-03-23

プロキシ環境下のLinuxでのsbtインストール方法

  • 確認日: 2017/03/22
  • OS: Amazon Linux
  • sbt: 0.13.13

事前準備

  1. プロキシサーバー情報を確認
    • host (FQDN or IP)
    • port
  2. シェル変数に一時保存
    • 設定コードの ${proxy_host}:${proxy_port} 部分を都度書き換えるなら不要
    • logout すると消えるので、設定完了前に logout したら再実行が必要
プロキシサーバー情報
# 各自の環境に合わせて変更
proxy_host=192.168.12.34
proxy_port=8080

インストール

yumを使ったインストール方法

yumへのプロキシ設定

まずyumにプロキシ設定が必要
yumの設定ファイル /etc/yum.conf にプロキシ設定 proxy=http://<proxy_host>:<proxy_port> を書き込み

yumプロキシ設定
echo "proxy=http://${proxy_host}:${proxy_port}" | sudo tee -a /etc/yum.conf
# [出力] proxy=http://192.168.12.34:8080

curlへのプロキシ設定

リポジトリ情報の取得にcurlを使うためcurlにもプロキシ設定が必要
curlの設定ファイル ~/.curlrc にプロキシ設定 proxy=http://<proxy_host>:<proxy_port> を書き込み

curlプロキシ設定
echo "proxy=http://${proxy_host}:${proxy_port}" | tee -a ~/.curlrc
# [出力] proxy=http://192.168.12.34:8080

yumでインストール

yumのパッケージマネージャにBintrayのRPMリポジトリの追加が必要
詳細:sbt Reference Manual — Linux への sbt のインストール

yumによるsbtインストール
# リポジトリ追加
curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo
# [出力] bintray--sbt-rpm - packages by  from Bintray
# [出力] (後略)

# インストール
sudo yum install -y sbt
sbtインストール確認
which sbt
# [出力] /usr/bin/sbt

sbtプロキシ設定

sbtも起動時に依存jarを外部からダウンロードする必要があるためプロキシ設定が必要
プロキシ設定がされてない場合、Getting org.scala-sbt sbt 0.13.13 ... のメッセージで止まる

プロキシ設定をしていない場合、依存解決が終わらない
sbt
# [出力] Getting org.scala-sbt sbt 0.13.13 ...
# (このまま進まない)

設定ファイルに記載して常時反映させておく方法

sbtのインストールディレクトリに ある sbtopts ファイルにJavaシステムプロパティーオプション(-Dkey=value)を記述
sbtopts ファイルのpath計算(詳細は後述): $(dirname $(readlink $(which sbt)))/../conf/sbtopts

sbtプロキシ設定
cat <<- EOS | sudo tee -a $(dirname $(readlink $(which sbt)))/../conf/sbtopts
    # proxy options
    -Dhttp.proxyHost=${proxy_host}
    -Dhttp.proxyPort=${proxy_port}
    -Dhttps.proxyHost=${proxy_host}
    -Dhttps.proxyPort=${proxy_port}
EOS

[参考] 実行の都度設定する方法

毎回プロキシ設定を書くのは手間なので設定ファイルに書く上記の方法をおすすめします

sbt実行時にプロキシ設定する方法
sbt \
    -Dhttp.proxyHost=${proxy_host} \
    -Dhttp.proxyPort=${proxy_port} \
    -Dhttps.proxyHost=${proxy_host} \
    -Dhttps.proxyPort=${proxy_port}

補足

sbtの設定ファイルの場所について

$(dirname $(readlink $(which sbt)))/../conf/sbtopts で得られるパスの設定ファイルがどう呼ばれているか

  1. sbt コマンド (/usr/bin/sbt)は /usr/share/sbt/bin/sbt のエイリアス

    • $(readlink $(which sbt)) で取得可能
    sbtのインストールディレクトリ確認
    which sbt
    # [出力] /usr/bin/sbt
    
    readlink /usr/bin/sbt
    # [出力] /usr/share/sbt/bin/sbt
    
    echo $(readlink $(which sbt))
    # [出力] /usr/share/sbt/bin/sbt
    
    ls -l /usr/share/sbt/bin
    # [出力] total 1200
    # [出力] -rwxr-xr-x 1 root root    5156 Jan  4 23:30 sbt
    # [出力] -rw-r--r-- 1 root root 1210231 Jan  4 23:53 sbt-launch.jar
    # [出力] -rwxr-xr-x 1 root root    6915 Sep 16  2016 sbt-launch-lib.bash
    
  2. ${sbt_home}/conf/sbtopts ファイルに書かれているオプションが自動で渡されて実行される

    • sbtコマンドのソースコード@GitHub

      sbt
      # (前略)
      
      . "$(dirname "$(realpath "$0")")/sbt-launch-lib.bash"
      
      # (中略)
      
      declare -r sbt_opts_file=".sbtopts"
      declare -r etc_sbt_opts_file="${sbt_home}/conf/sbtopts"
      declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt"
      
      # (中略)
      
      # Here we pull in the global settings configuration.
      [[ -f "$etc_sbt_opts_file" ]] && set -- $(loadConfigFile "$etc_sbt_opts_file") "$@"
      
      #  Pull in the project-level config file, if it exists.
      [[ -f "$sbt_opts_file" ]] && set -- $(loadConfigFile "$sbt_opts_file") "$@"
      
      #  Pull in the project-level java config, if it exists.
      [[ -f ".jvmopts" ]] && export JAVA_OPTS="$JAVA_OPTS $(loadConfigFile .jvmopts)"
      
      run "$@"
      
    • .sbtopts ファイルが存在すればそちらも使われる

  3. ${sbt_home}sbt-launch-lib.bash で定義されている

    • sbt-launch-lib.bashsbt コマンドと同一ディレクトリに存在
      • sbtの中の . "$(dirname "$(realpath "$0")")/sbt-launch-lib.bash" で実行されている
    sbt-launch-lib.bash
    # (前略)
    
    declare -r sbt_bin_dir="$(dirname "$(realpath "$0")")"
    declare -r sbt_home="$(dirname "$sbt_bin_dir")"
    
    # (後略)
    
    • sbt コマンドのあるディレクトリの1つ上が ${sbt_home}

      • つまり /usr/share/sbt/
      • $(dirname $(readlink $(which sbt)))/../ で取得可能
      ${sbt_home}確認
         realpath $(dirname $(readlink $(which sbt)))/../`
         # [出力] /usr/share/sbt
      
  4. sbtの設定ファイル(sbtopts)は conf ディレクトリ内

    • つまり /usr/share/sbt/conf/sbtopts
    • $(dirname $(readlink $(which sbt)))/../conf/sbtopts で取得可能
    confディレクトリの確認
    ls -l /usr/share/sbt/
    # [出力] total 8
    # [出力] drwxr-xr-x 2 root root 4096 Mar 22 05:05 bin
    # [出力] drwxr-xr-x 2 root root 4096 Mar 22 05:05 conf
    
    ls -l /usr/share/sbt/conf/
    # [出力] total 8
    # [出力] -rw-r--r-- 1 root root  147 Aug 11  2015 sbtconfig.txt
    # [出力] -rw-r--r-- 1 root root 1083 Mar 23 07:11 sbtopts
    
    realpath $(dirname $(readlink $(which sbt)))/../conf/sbtopts
    # [出力] /usr/share/sbt/conf/sbtopts
    

プロキシ設定がちゃんと効いているかの確認方法

  1. debugオプション有りで sbt 起動
    • sbt -debug
  2. Javaオプションにシステムプロパティが含まれているか確認

    該当システムプロパティ
    -Dhttp.proxyHost=192.168.12.34
    -Dhttp.proxyPort=8080
    -Dhttps.proxyHost=192.168.12.34
    -Dhttps.proxyPort=8080
    
debugオプション有りの場合の出力(プロキシ設定なし)
[process_args] java_version = '1.7.0_131'
# Executing command line:
java
-Xms1024m
-Xmx1024m
-XX:ReservedCodeCacheSize=128m
-XX:MaxPermSize=256m
-jar
/usr/share/sbt/bin/sbt-launch.jar

Getting org.scala-sbt sbt 0.13.13 ...

(後略)
debugオプション有りの場合の出力(プロキシ設定あり)
[process_args] java_version = '1.7.0_131'
# Executing command line:
java
-Xms1024m
-Xmx1024m
-XX:ReservedCodeCacheSize=128m
-XX:MaxPermSize=256m
-Dhttp.proxyHost=192.168.12.34
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=192.168.12.34
-Dhttps.proxyPort=8080
-jar
/usr/share/sbt/bin/sbt-launch.jar

Getting org.scala-sbt sbt 0.13.13 ...

(後略)
10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4