::: IT인터넷 :::

sbt 기본 설정과 JVM에 자체 서명 인증서 설정하기

곰탱이푸우 2023. 7. 20. 08:20
sbt와 Scala 설치가 완료되면 sbt의 설정을 변경한다.
 
sbt와 Scala 설치 방법은 아래 포스팅을 참고한다.
 

sbt 1.9.0 버전과 Scala 2.12.18 설치하기

로컬의 Maven 저장소 설정이 마무리 되면, 개발하는 단말에 scala 개발 환경을 구성한다. Nexus에 Maven 저장소를 설정하는 방법은 아래 포스팅을 참고한다. Nexus에 Maven 저장소 설정 (for Scala Application) S

www.bearpooh.com

 
사용 환경에 따라 차이가 있으므로 필요한 부분만 골라서 설정한다.
sbt의 기본적인 설정을 진행하는 부분과 자체 서명 인증서를 사용하기 위한 설정으로 구분한다.
 
 

sbt 설정 변경

터미널에서 sbt를 사용하기 위한 설정을 적용한다.
 

sbt 저장소 설정 변경

sbt가 사용하는 저장소 경로를 기본 저장소 대신 사용자가 지정한 저장소를 사용하도록 변경한다.
 

.bashrc에 환경 변수 등록

아래와 같이 .bashrc 파일에 SBT_OPTS 환경 변수를 추가한다.
$ vi ~/.bashrc
export SBT_OPTS="-Dsbt.override.build.repos=true"

# 적용한 환경 변수 적용
$ source ~/.bashrc
 

sbtopts 파일 수정

sbt의 환경 설정을 관리하는 sbtopts 파일을 생성하고 아래와 같이 입력한다.
$ sudo mkdir /etc/sbt
$ sudo vi /etc/sbt/sbtopts

# 아래 내용 추가하고 :wq로 저장하고 종료
-Dsbt.override.build.repos=true

# 적용한 환경 변수 적용
$ source ~/.bashrc

 

 

저장소 경로 파일 생성

sbt가 사용자가 지정한 저장소를 바라보도록 설정했으므로, 사용할 저장소 주소 목록을 생성한다.
 
다음과 같이 ~/.sbt/repositories 파일을 생성한다.
$ vi ~/.sbt/repositories

[repositories]
local
ivy-remote-scalasbt: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/,
                     [organization]/[module]/(scala_[scalaVersion]/)
                    (sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
ivy-remote-sbt-ivy: https://scala.jfrog.io/artifactory/ivy-releases, 
                    [organization]/[module]/(scala_[scalaVersion]/)
                    (sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
ivy-remote-typesafe-ivy: https://scala.jfrog.io/ui/native/ivy-releases/, 
                         [organization]/[module]/(scala_[scalaVersion]/)
                         (sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
maven-public: https://저장소주소:포트/repository/maven-public/
maven-release: https://저장소주소:포트/repository/maven-releases/
maven-snapshot: https://저장소주소:포트/repository/maven-snapshots/
 

프록시 설정

프록시 서버를 경유해야 하는 경우 아래와 같이 프록시 설정을 추가한다.
http.nonProxyHosts, https.nonProxyHosts에 내부 주소를 등록한다.
 
누락되는 경우 sbt 라이브러리 로딩에 상당한 시간이 소요된다.
$ vi ~/.bashrc

# 아래 내용을 한줄에 입력한다.
export JAVA_OPTS="-Dhttp.proxyHost=프록시서버주소 -Dhttp.proxyPort=프록시서버포트
                  -Dhttps.proxyHost=프록시서버주소 -Dhttps.proxyPort=프록시서버포트
                  -Dhttp.nonProxyHosts=*.bearpooh.com|192.168.*|172.*|10.*|localhost|[::1]
                  -Dhttps.nonProxyHosts=*.bearpooh.com|192.168.*|172.*|10.*|localhost|[::1]"

# 적용한 환경 변수 적용
$ source ~/.bashrc

 

메모리 설정 변경

sbtopts 파일에 메모리 관련 설정을 추가한다.
thrift build나 unittest에서 OOM(Out of Memory)으로 실패되는 케이스를 방지한다.
$ sudo vi /etc/sbt/sbtopts

# 아래 내용을 추가하고 :wq로 저장하고 종료
-mem 1024
-J-Xmx2G

 

 

JVM에 자체서명 인증서 설정

Nexus에 Maven 저장소를 설정하는 방법은 아래 포스팅을 참고한다.
 

Nexus에 Maven 저장소 설정 (for Scala Application)

Spark 어플리케이션 개발을 위해 Scala 개발 환경을 구성해야 하는 상황에 직면했다. Scala는 Java 기반의 함수형 언어이며, 빌드하면 Jar 파일이 생성된다. 생성 된 Jar 파일은 개발 단계에 따라 아래와

www.bearpooh.com

 
Nexus의 Maven 저장소를 사용하기 위한 자체 서명 인증서 적용 방법은 아래 포스팅을 참고한다.

인증서 다운로드 도구 설치

lessif.com에서 제공하는 InstallCert 파일을 사용하며 자세한 내용은 아래 링크를 참고한다.
InstallCert 파일을 다운로드하고 컴파일한다.
$ curl -O https://gist.githubusercontent.com/lesstif/cd26f57b7cfd2cd55241b20e05b5cd93/raw/InstallCert.java
$ javac InstallCert.java
$ java -cp ./ InstallCert 서버주소  # 또는 서버주소:포트
 
java -cp 명령으로 인증서를 컴파일하면 jssecacerts 파일이 생성된다.
 
 

JVM에 인증서 설정하기

JVM의 신뢰 인증서 목록에 에 자체 서명 인증서를 추가한다.
또한 해당 인증서를 생성하는데 사용한 rootca 인증서를 추가한다.
JVM의 cacerts 경로는 JDK 1.8 버전 기준이다.
 
기본적인 방법은 아래 문서를 참고한다.
# jssecacerts 파일을 사용하고 비밀번호는 changeit이다.
$ keytool -exportcert -keystore jssecacerts -storepass changeit \
  -file output.cert -alias 서버주소-1

# 기존에 등록된 별칭 (alias)가 있으면 삭제한다.
$ sudo keytool -delete  -alias 서버주소-1 -keystore ${JAVA_HOME}/jre/lib/security/cacerts \
  -storepass changeit

# 서버 인증서 등록
$ sudo keytool -importcert -trustcacerts -keystore ${JAVA_HOME}/jre/lib/security/cacerts \
  -storepass changeit -file output.cert -alias 서버주소-1

# rootca 인증서 등록
$ sudo  keytool -importcert -trustcacerts -keystore ${JAVA_HOME}/jre/lib/security/cacerts \
  -storepass changeit -file 파일경로/rootca.crt -alias 서버주소
 

sbt의 인증서 설정 변경

JVM의 trustStore 설정 추가

sbt 설정 파일인 sbtopts에 JVM의 trustStore 옵션을 추가한다.
$ sudo vi /etc/sbt/sbtopts

# 마지막 줄에 추가하고 :wq로 저장하고 종료
-Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts
-Djavax.net.ssl.trustStorePassword=changeit
 
 
 

SSL 인증서 검증 미사용 설정

자체 서명 인증서를 사용하는 경우 sbtopts 파일에 인증서 검증 옵션을 해제하는 설정을 추가한다.
$ sudo vi /etc/sbt/sbtopts

# 마지막 줄에 추가하고 :wq로 저장하고 종료
-Dmaven.wagon.http.ssl.insecure = true
-Dmaven.wagon.http.ssl.allowall = true
-Dmaven.wagon.http.ssl.ignore.validity.dates = true
 
만약 위의 wagon 옵션이 동작하지 않으면 환경변수로 등록한다.
$ vi ~/.bashrc

# 아래 내용을 한줄에 입력한다.
export SBT_OPTS="-Dsbt.override.build.repos=true
                -Dmaven.wagon.https.ssl.insecure=true -Dmaven.wagon.https.ssl.allowall=true
                -Dmaven.wagon.http.ssl.ignore.validity.dates=true"

# 적용한 환경 변수 적용
$ source ~/.bashrc
 
wagon 설정 관련 내용은 아래 문서를 참고한다.