kerl

kerl은 여러 버전의 Erlang/OTP (이하 'erlang')을 보다 손쉽게 빌드하고 설치 및 관리하기 위한 툴이다.

굳이 kerl을 몰라도 macOS에서는 brew만으로도 쉽게 erlang 패키지를 설치하고 사용할 수 있다. 리눅스에서도 배포판에 따라 apt-get이나 yum 등의 패키지 관리 시스템을 통해 쉽게 설치할 수 있다.

하지만 때때로 내가 원하는 버전으로, 내가 원하는 기능만을 포함하여 직접 erlang을 빌드할 필요가 생긴다. 하나 더 이유를 들자면, 리눅스나 맥의 패키지 관리 시스템에서 최신 버전을 제공하지 못할 때가 있다. 현재 우분투 16.10에서의 erlang 기본 설치 버전은 18.x로, erlang 최신 버전인 19.1 보다는 구식이다. 맥은 이보다 상황이 좋지만 brew에서 최신 버전을 지원해줄 떄까지 손가락만 빨고 있어야 한다.

그리고 kerl을 사용해서 동시에 여러 버전을 빌드해서 설치하고, 필요에 따라 골라 쓰고 쉽게 삭제할 수 있다. node.js 사용자라면 nvm을 생각하면 이해하기 쉬울 것이다.

다음은 우분투에서 kerl을 이용해 erlang을 빌드, 설치, 사용, 삭제하는 방법을 간략하게 설명한다. 사전에 apt-get으로 설치해야 하는 패키지들이 있는데, 아쉽게도 체계적으로 정리하지 못했다. 다음은 설치한 패키지들 중 일부이다. gcc, make 등 빌드 툴은 이미 설치한 것으로 가정한다.

  • libncurses5-dev
  • libssl-dev
  • unixodbc-dev
  • libgtk2.0-dev, libwxbase2.8, libwxgtk2.8-dev (버전 정보가 달라질 수 있다)

이외에 curl, git도 사용할 수 있는 상태여야 한다.

kerl 설치

curl로 kerl을 다운로드 받아 실행옵션을 주고 사용한다. kerl의 실체는 쉘스크립트이다.

$ curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
$ chmod +x kerl

erlang release 확인

빌드 가능한 erlang release 정보를 확인할 수 있다. 이 정보는 $HOME/.kerl/ 밑에 저장된다. 앞으로 kerl을 이용한 다운로드 소스 파일, 빌드 파일은 모두 여기에 저장된다.
그리고 앞으로 새로운 버전이 릴리즈 될 때마다 kerl update releases 명령으로 release 정보를 업데이트할 수 있다.

$ kerl list releases
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A R13B01 R13B02-1 R13B02 R13B03 R13B04 R13B R14A R14B01 R14B02 R14B03 R14B04 R14B R14B_erts-5.8.1.1 R15B01 R15B02 R15B02_with_MSVCR100_installer_fix R15B03-1 R15B03 R15B R16A_RELEASE_CANDIDATE R16B01 R16B02 R16B03-1 R16B03 R16B 17.0-rc1 17.0-rc2 17.0 17.1 17.3 17.4 17.5 18.0 18.1 18.2 18.2.1 18.3 19.0 19.1
Run 'kerl update releases' to update this list from erlang.org

kerl list releases 외에도 kerl list builds, kerl list installations 명령으로 현재 빌드와 설치 내역을 확인할 수 있다.

빌드

kerl build 다음에 빌드할 release 정보를 지정해주고 그 다음에 빌드 이름을 지어서 실행한다.

$ kerl build 19.1 r19_1

KERL_CONFIGURE_OPTIONS 환경 변수로 erlang 빌드 전에 configure 실행 시 옵션을 추가할 수 있다.

$ KERL_CONFIGURE_OPTIONS="--with-dynamic-trace=dtrace" kerl build 19.1 r19_1_dtrace

자세한 옵션은 erlang 소스 압축 파일을 풀어 그 안의 configure --help 명령을 실행하여 확인하면 된다.

설치

에러 없이 빌드가 잘 되면, kerl install 명령으로 설치한다. 설치할 디렉토리를 지정해준다.

$ kerl install r19_1 /somewhere/you/want

활성화

설치된 erlang의 erl 등을 사용할 수 있도록 $PATH 환경 변수에 등록하는 등의 작업을 진행한다. erlang 설치 시 activate 쉘스크립트가 kerl에 의해 추가된다.

$ source /somewhere/you/want/activate

비활성화하고자 할 때에는 kerl_deactivate를 실행한다.

삭제

kerl delete 명령으로 빌드 및 설치본을 삭제할 수 있다.

$ kerl delete build r19_1
$ kerl delete installation r19_1

기타

kerl status 명령으로 현재 사용 가능한 빌드, 설치본, 활성화된 설치본을 확인할 수 있다.

$ kerl status
Available builds:
19.1,r19_1
19.1,r19_1_dtrace
----------
Available installations:
r19_1 /somewhere/you/want/r19_1
r19_1_dtrace /somewhere/you/want/r19_1_dtrace
----------
The current active installation is:
/somewhere/you/want/r19_1
There's no Dialyzer PLT for the active installation

kerl active 명령으로 현재 활성화된 설치본에 대한 정보를 확인할 수 있다.

$ kerl active
The current active installation is:
/somewhere/you/want/r19_1
$ kerl_deactivate
$ kerl active
No Erlang/OTP kerl installation is currently active

끝으로, kerl deploy 명령으로 현재 활성화된 설치본을 다른 서버에 복사해서 설치할 수 있다. 네트워크 전송은 ssh/scp를 사용한다. 물론 타겟 서버에도 필요한 패키지들이 사전에 설치되어 있어야 실행 시 오류가 발생하지 않는다.

kerl deploy user@target.host /remote/directory

끝으로

erlang 빌드를 위해 ubuntu에 사전에 설치해야 하는 패키지들의 목록을 정리하지 못한게 아쉽다. 그리고 KERL_CONFIGURE_OPTIONS 환경변수에 넣을 수 있는 옵션들을 정리하고 싶은 욕심이 있었으나, 아직 erlang 실행 환경에 익숙치 않아 좀 더 이해도가 높아진 다음에 정리 보강하고자 한다.