Sage notebook 서버 설치



Sage

소개는 Sage (mathematics software), Wikipedia에 잘 정리되어 있다. 간단하게 Sage를 경험해보고 싶다면 Sage Cell Server에서 다음 내용을 입력하고 Evaluate버튼을 눌러보면 된다. (샘플은 여기에서 가져왔다.)

Sage online 서비스들

Sage Notebook을 사용하기 위해 반드시 프로그램을 다운받아서 설치해야 하는 것은 아니다. SageMathCloud를 이용하면 더 편리한 UI를 경험할 수 있다. SageMathCloud는 현재 beta 운영 중이며 무료로 가입할 수 있다. 계정별로 저장공간 5,000MB가 제공되고 공유되는 1개의 CPU와 8GB의 메모리를 연산에 사용할 수 있다. 더 많은 저장 공간이 필요하면 Settings의 안내에 따라 요청할 수 있으며 지금까지는 무료로 제공된다.

우리나라에서는 성균관대학교와 KAIST에서 Sage Notebook을 호스팅 중이며, 성균관대학교 수학과에서는 5.11 버전을 운영 중이며 여기에서 가입 후 사용할 수 있다. KAIST의 것은 여기에서 5.8 버전을 운영 중이지만 가입 링크가 열려있지 않고 Cell Server도 현재 시점에서는 다운되어 접속이 되지 않는다.

Sage 설치

소스로부터 빌드하기

소스로부터 빌드하려고 했으나 GNU Fortran compiler를 찾길래 그냥 관두고 빌드된 바이너리를 설치하는 것으로 변경하였다. 누군가 말했던가? 셋업하느라 시간 쏟지 말고 연구에 집중하라고…

바이너리 설치 1 – Mac app으로 설치

Download Binaries for Apple Mac OSX에서 sage-6.3-x86_64-Darwin-OSX_10.9_x86_64-app.dmg을 찾아서 다운로드한다. KAIST mirror에서 받으면 속도가 심야시간에 제법 잘 나온다. KAIST mirror의 링크: sage-6.3-x86_64-Darwin-OSX_10.9_x86_64-app.dmg. 받은 dmg 파일을 마운트 한 후 App을 실행하면 끝. dmg파일은 약 800MB이지만 그 안에 압축된 전체 크기는 3GB가 넘으니 필요한 경우가 아니라면 사용할 때 dmg를 마운트해서 sage를 실행하는 것이 좋을 것 같다. 필요한 데이터들은 dot_sage(~/.sage) 안에 모두 생성된다. 로컬에서 혼자 사용하는 용도라면 이 방법이 제일 편리하고 아래 내용을 읽어야 할 필요도 없다. “-app”이 붙지 않은 배포를 받았다면 mount하여 실행하거나 적당한 위치로 sage 디렉토리를 복사하면 된다. 복사 후 터미널에서 sage -notebook port=8880 명령으로 Notebook을 실행할 수 있다. 간단하게 외부에서도 접속하게 실행만 해둔다면 sage -notebook interface='' port=8880 automatic_login=False명령만으로 간단하게 호스팅할 수 도 있다.

바이너리 설치 2 – Sage Notebook 서버 설치

이 글의 목적은 서버에 Sage Notebook을 설치하여 온라인으로 사용할 준비를 하는 것이다. 아래부터의 내용이 이 글을 남기는 목적이다. 나중에 참고 또는 복붙하려고..

서비스 계정 생성

여러대의 sage가 설치된 server들을 사용하여 server pool을 구성하기 위해서는 ssh로그인 가능한 계정이 필요하다. Sage에서 사용할 ssh 로그인용 계정을 하나 생성한다. UniqueID는 dscl . -list /Users UniqueID 명령으로 전체 UniqueID를 확인한 다음 중복되지 않도록 해야 한다. 이 계정은 Sage Notebook을 실행하는 계정으로도 사용될 것이다. (#으로 된 줄은 안해도 되는 줄)

Sage Notebook이 저장될 위치를 생성한다.

Sage 다운로드 및 설치

Download Binaries for Apple Mac OSX에서 sage-6.3-x86_64-Darwin-OSX_10.9_x86_64.dmg을 찾아서 다운받는다. KAIST mirror 링크는 sage-6.3-x86_64-Darwin-OSX_10.9_x86_64-app.dmg에 있다.

다운로드가 완료되면 다음 명령으로 전체 파일들을 /usr/local/sage-6.3 으로 복사한다.

23줄 부근의 SAGE_ROOT를 찾아서 다음과 같이 코멘트를 제거하고 다음과 같이 변경한다.

저장하고 sage가 설치된 위치에서 sudo vi notebook.py 명령으로 notebook.py 스크립트를 다음과 같이 생성해준다.

마지막으로 터미널에서 사용할 수 있도록 다음 명령으로 sage의 link를 만들어준다. 어느 계정에서나 Sage를 사용할 수 있고 필요하다면 자신만의 Sage Notebook을 사용할 수 있다. 각 계정에서 sage 명령을 처음 실행하면 ~/.sage 디렉토리가 생성되고 여기에 개인 설정이 저장된다. notebook() 명령으로 개인 노트북을 실행하면 ~/.sage 아래 notebook.sagenb 디렉토리가 생성되고 개별로 관리된다.

/usr/local/bin 위치가 없으면 하나 생성하거나 /usr/bin/sage에 만들어도 된다.

Sage 동작 확인

다음 명령을 실행하여 Sage Notebook을 실행해본다.

잠시 기다리면 Sage Notebook의 admin 계정의 비밀번호를 물어본다. 비밀번호를 설정하면 Open your web browser to http://0.0.0.0:8880과 같은 메세지가 출력된다. 웹 브라우저에서 http://localhost:8880을 열어 Username에는 admin, Password에는 좀전에 등록한 비밀번호를 입력한다.

notebook.py에서 opts['accounts']=False로 설정한 경우 로그인 화면에 Sign up for a new Sage Notebook account 링크가 표시되지 않고 사용자 가입이 제한된다. admin으로 로그인하여 Settings 메뉴에서 Manage Users

새 계정을 하나 생성하여 로그인 한 다음 새 worksheet를 하나 생성한다. 그리고 이 글의 제일 위에 있는 샘플을 하나 입력하여 실행해본다. 그래프가 잘 그려진다면 설치가 잘 된 것이다.

CTRL+C를 눌러서 Sage Notebook을 종료시킨다.

부팅될 때 Sage Notebook을 시작하기

OS X가 부팅될 때 Sage Notebook이 실행되도록 스크립트를 추가해준다.

StartupParameters.plist 파일 내용:

sagenb 파일 내용:

동작을 확인해본다.

여기까지 하면 어디서나 웹 브라우저에서 http://ip_address:8880 을 열어서 Sage Notebook을 사용할 수 있다.

웹사이트의 proxy 설정

http://ip_address:8880로 접속하는 것 보다 http://sagenb.mydomain.com으로 접속하는 것이 더 좋아보일 것이다.

localhost에서만 접속 가능하도록 notebook.pyinterface를 변경하고 Sage Notebook을 재시작한다.

Server app의 Websites에서 Sage Notebook을 위한 Web site를 하나 추가한다. (예: sagenb.mydomain.com) 그리고 다음 파일들을 생성한다.

/Library/Server/Web/Config/apache2/com.mydomain.sagenb.proxy.plist

/Library/Server/Web/Config/apache2/http_proxy_sagenb.conf

다음 명령으로 proxy를 로드한다.

정상적으로 로드되면 다음과 같은 메세지가 출력된다. vhid는 SSL을 사용하지 않으면 *:80_sagenb.mydomain.com으로 표시될 것이다.

이제 브라우저를 열고 http://sagenb.mydomain.com를 열어보면 된다.

com.mydomain.sagenb.proxy.plist에서 proxies 키를 사용하지 않는 이유는 이 글을 참고하기 바란다. 그리고 mydomain.com/sagenb와 같이 proxy mapping을 할 경우 정상적으로 웹페이지가 로드되지 않는다. ProxyHTMLURLMap을 사용할 경우 로드는 되지만 동작 중 비정상적으로 동작하는 경우가 있다고 한다. 시간적 여유가 된다면 $sage/local/lib/python2.7/site-packages/sagenb-0.10.8.2-py2.7.egg 아래의 코드들을 분석해서 절대 경로를 모두 상대 경로로 변경해주면 되겠지만… 누군가 해주길 기다려본다.

Server pool 사용

사용자가 많을 경우 sagenb을 여러 서버에서 분산하여 실행할 수 있다. server_pool 설정이 없을 경우 Sage Notebook을 실행 중인 계정-여기서는 sagenb-에서 Notebook이 실행된다. notebook.pyserver_pool에서 분산하여 실행할 서버들을 나열해주면 된다.

Sage Notebook은 server_pool에 연결된 사용자@서버로 ssh 연결을 하여 sage를 실행하고 notebook의 내용을 실행할 것이다. ssh 연결시 인증서를 사용해야 하므로 Sage Notebook을 호스팅하는 계정(예: sagenb)에서 rsa 인증서를 생성해주고 서버 풀의 각 계정의 ~/.ssh/authorized_key에 생성한 인증서의 public key를 추가해준다.

MacTex 설치

Sage Notebook에서 TeX를 사용할 수 있는데 MacTeX를 설치하고 경로만 설정해주면 된다.

Sage Notebook에서 TeX 명령을 사용할 수 있도록 Sage Notebook을 서비스하는 계정(sagenb)의 ~/.sage/init.sage 파일에 다음 줄을 붙인다. (파일이 없으면 생성한다.)

Sage Notebook에서 TeX를 사용하기 위해서는 추가로 ImageMagick이 요구된다. PDF 파일을 이미지로 변환하는데 사용되며 OS X에서 설치할 때는 Homebrew를 이용하면 쉽다. brew update; brew install imagemagick 명령으로 설치하면 의존성 패키지인 libtool과 함께 설치된다.

업데이트

서비스를 잠시 멈추고 터미널에서 sage -upgrade 명령을 실행한다.

GNU Octave 설치

Octave-Forge에서 Mac OS X용 binary installer를 다운로드 받아서 설치하면 쉽다. 모든 파일들은 /usr/local/octave/3.8.0 아래 설치되고 /Applications아래 GUI와 CLI 실행을 위한 앱이 추가된다.
실제 설치되는 경로를 Sage Notebook을 서비스하는 계정의 ~/.sage/init.sage 파일을 수정하여 경로를 추가해준다. (이 글의 내용에서는 /Users/sagenb/.sage/init.sage)

그리고 mkdir -p -p755 /usr/local/sage-6.3/local/share/sage/ext/octave/user 명령으로 ext 아래 octave/user 디렉토리를 만들어야 한다. sagenb 계정에서 읽을 수 만 있으면 되므로 755로 생성하면 된다. 왜 이게 필요한지 모르겠다. 이 스레드를 참고해서 octave interface의 생성자를 수정해봤지만 여전히 $SAGE_HOME/ext/octave 디렉토리를 필요로 한다. 어차피 user 에 쓰기 권한을 주는 것이 아니므로 그냥 생성해두고 인터페이스 스크립트를 수정하지 않았다.

링크

Sage (mathematics software), Wikipedia
Sage – Open-Source Mathematical Software System
Exploring Mathematics with Sage, P. Lutus
JustEnoughSageServer, Dan Drake
Mavericks Server Admin: Generate a key pair for SSH authentication