ShareLaTeX 업그레이드하기

ShareLaTeX을 버전 0.2.0에서 GitHub의 현재 리비전으로 업그레이드하는 방법을 정리해 보자.

# 소스코드를 내려받을 디렉토리로 이동한다.
cd ~/usr/local/src

# NVM을 설치한다.
git clone https://github.com/creationix/nvm.git

# ShareLaTeX의 소스코드를 복사한다.
git clone https://github.com/sharelatex/sharelatex.git sharelatex-git

# git repository는 그대로 보관하고 설치할 디렉토리를 따로 만들자. sharelatex-git 디렉토리는 GitHub와 동기화하는데만 쓰자.
cp -a sharelatex-git sharelatex-current

# 설치할 디렉토리로 들어가서 필요한 npm 패키지들을 설치한다.
cd sharelatex-current
. ~/usr/local/src/nvm/nvm.sh
nvm install
nvm use
npm install

# 이제 grunt-cli 패키지를 설치한다.
npm install grunt-cli

# 이제 ShareLaTeX의 다른 패키지들을 내려받아서 설치한다.
node_modules/.bin/grunt install

다음 파일을 PATH가 있는 곳에 install-sharelatex-services라는 이름으로 생성한 후 chmod a+x install-sharelatex-services를 실행한다.

#!/bin/sh
SHARELATEX_PATH=~/usr/local/src/sharelatex-current
NVM_PATH=~/usr/local/src/nvm
. $NVM_PATH/nvm.sh

cd $SHARELATEX_PATH

grep 'name:' config/services.js | \
sed 's/.*name: "\(.*\)",/\1/' | \
while read service
do
        pushd $service
        echo "Installing Service $service"
        echo '  installing Node'
        nvm install
        nvm use
        echo '  installing Dependencies'
        npm install
        npm install grunt-cli
        node_modules/.bin/grunt install
        popd
done

이제 install-sharelatex-services를 실행한다.

install-sharelatex-services

설치를 마쳤으면 web/config/settings.defaults.coffee 파일을 config/settings.development.coffee로 복사한 후 이 파일의 설정을 환경에 맞게 수정한다. 그런 다음 제공되는 업그레이드 스크립트를 실행한다.

cd ~/usr/local/src/sharelatex-current
nvm use
node_modules/.bin/grunt migrate

마지막으로 다음의 startsharelatex 셸스크립트를 생성한 다음 실행하면 된다.

#!/bin/sh
SHARELATEX_PATH=~/usr/local/src/sharelatex-current
NVM_PATH=~/usr/local/src/nvm
GRUNT=$SHARELATEX_PATH/node_modules/.bin/grunt
. $NVM_PATH/nvm.sh

cd $SHARELATEX_PATH

export SHARELATEX_CONFIG=$SHARELATEX_PATH/config/settings.development.coffee

grep 'name:' config/services.js | \
sed 's/.*name: "\(.*\)",/\1/' | \
while read service
do
        echo "Running Service $service"
        (
                cd $service
                nvm use
                npm run start
        ) > ~/usr/local/var/log/sharelatex-$service.log&
done

참고로 다음과 같이 최상위 디렉토리에 제공되는 Gruntfile.coffee 스크립트를 이용해서 모든 서비스를 시작해 보려고 했으나 node와 grunt 프로세스를 무한대로 생성하는 문제가 있었다. 정확히 어떤 문제인지는 모르겠지만 각 서비스마다 Node의 버전이 다른데 최상위 디렉토리에 설치된 grunt로 실행을 해서 그런 것 같다.

# 다음의 명령은 제대로 실행되지 않는다.
cd ~/usr/local/src/sharelatex-current
nvm use
node_modules/.bin/grunt
이 칸을 비워 두세요.