File을 Synchronize 해 주는 Tool이 여러가지가 있습니다. 예전에는 Allway Sync와 혹은 DSYNCHRONIZE를 이용했었는데요, Windows에서만 돌아가야 하는 불편함이 있었습니다.
오늘 소개하려는 Unison은 Platform에 거의 제한을 받지 않도록 설계되어 있습니다. 웹페이지에 보시면 아시겠지만, Solaris, Linux, OS X, Windows OS 등에서 잘 동작하는 것 같습니다.
제가 unison을 쓰고 있는 환경을 소개하면, 우선 무척 단순합니다. 제 PC는 Windows PC 도 있고, Linux PC 도 있습니다. 그리고 Linux로 돌고 있는 웹서버를 하나 두고 있습니다. 웹서버는 제가 운영하는 곳이 아니라, 제 3자 Hosting을 해 주는 회사를 이용하고 있습니다. 이런 환경속에서 File을 웹서버에 저장하면서 각 Client PC들이 서로 Synchronize 하고 있지요. 이 정도만 해도 파일을 서로서로 Sync 해주는데는 문제 없이 쓰고 있습니다.
제 환경을 실현시키기 위해서는 어떻게 했는지에 대한 기록을 여기에 해둡니다. 아마 다른 분들도 참고하시면 좋을 듯 싶습니다.
unison을 쓰기 위해서는 각 platform에서 동일한 version의 unison 프로그램이 돌아가야 한다는 것에 주의해야 합니다.
여기에 각 Platform 별로 어떻게 unison을 컴파일하고 Setting들을 해 주어야 하는지에 대해서 소개합니다.
1. Linux로 돌고 있는 웹서버
1.1. Ocaml Compiler 설치
우선 Linux로 돌고 있는 웹서버에 unison 프로그램을 설치 해야 합니다. 그런데, 이 unison은 OCaml 이라는 언어로 쓰여져 있습니다. 따라서, 웹서버가 OCaml Compiler를 지원해야 하는데, 지원하지 않는 경우가 대부분입니다. 다행스럽게도 OCaml Compiler는 Local로도 설치할 수 있습니다. 설치가 무척 쉬우니 Ocaml 사이트에 들어가셔서 다운로드 받고, tmp 디렉토리 하나 만드셔서 압축이 풀린 source 를 가지고 compile 및 install을 할 수 있습니다.
우선 ocaml 이 있는 디렉토리를 tmp/ocaml-3.11.1 이라고 하고, 설치할 디렉토리를 tmp/ocaml 이라고 정합니다.
그러면, 다음과 같이 실행합니다.
cd tmp/ocaml-3.11.1 ./configure -prefix tmp/ocaml make world make install
그리고 ~/.profile 혹은 ~/.bashrc 등에서 PATH에 tmp/ocaml/bin 을 추가해 줍니다.
이렇게 해서 ocaml compiler의 설치를 마감합니다.
1.2. unison
unison 사이트에 들어가셔서 다운로드 하고 압축을 풉니다.
unison을 다음과 같이 컴파일 합니다.
cd tmp/unison-xxxx make UISTYLE=text
그리고 ~/.profile 혹은 ~/.bashrc 등에서 PATH에 tmp/unison-xxx/ 을 추가해 줍니다.
2. Linux PC (Ubuntu)
2.1. Ubuntu에 Ocaml Compiler 설치
Ubuntu에 apt-get 혹은 synaptic tool을 이용하여 Ocaml Compiler를 설치 할 수 있습니다.
2.2 unison
1.2와 같은 과정을 거치지만, 컴파일시 gtk library를 이미 install 했다면, gtk 환경으로 unison을 만드는 것이 User interface 상 편리 합니다. 따라서, 이때는 make UISTYLE=gtk2 로 컴파일 해 줍니다.
2.3. 환경설정
unison을 실행하면, ~/.unison 디렉토리에 Profile을 생성합니다. 이 Profile을 보면 쉽게 수정할 수 있으니, 직접 수정하여도 되고, unison gtk 버전에서도 수정할 수 있습니다.
만일 SSH로 Server에 접근하여 Sync 하려면, Profile에 다음과 같이 추가해 줍니다.
root = ssh://<USERID>@<SITE NAME>//xxxx/xxxx
xxxx/xxxx는 directory 이름입니다.
3. Windows XP PC
3.1. Windows XP용 Binary 다운로드
Unison의 Windows 버전은 Karl M이라는 고마운 사람이 이미 Windows Binary 형태로 컴파일 해서 올려둡니다. 이것을 다운로드 받습니다. 사이트는 http://alan.petitepomme.net/unison/index.html 에 있습니다.
3.2. SSH를 이용하기 위해 Putty 설치
웹에 접근하기 위한 SSH 로는 Windows에 공개 프로그램인 PuTTY의 plink.exe를 이용합니다.
3.3. ssh.bat 파일 생성
unison을 설치한 같은 디렉토리에 다음과 같은 ssh.bat을 만들어 둡니다.
@"c:\Program Files\putTY\plink.exe" breadncup.com -ssh -l <USERID> -pw <Password> "unison -server -auto"
3.4.unison profile 수정
%USERPROFILE%\.unison 에 들어있는 Profile을 다음과 같이 수정합니다. [1. http://alliance.seas.upenn.edu/~bcpierce/wiki/index.php?n=Main.UnisonFAQOSSpecific#windows]
root = <Local Directory: For example, c:\Mydocs\abcd> root = ssh://<USERID>@<SITE NAME>/xxxx/xxxxx sshcmd = ssh.bat
xxxx/xxxx는 디렉토리 이름입니다.
위와 같이 해 두면, 위의 Profile의 정보에서 sshcmd에 있는 batch 파일을 수행하여 unison이 ssh 접속을 하도록 해 줍니다.
[update: 10/23/2009]
3.5. gtk library 이용하기
gtk 를 이용한 exe를 쓰기 위해서는 gtk library가 Path로 연결 되어 있어야 합니다. GTK+ For Windows를 이용하여 압축을 풀고 bin directory를 Path로 지정해 두면, union gtk for windows 를 이용할 수 있습니다.
4. Mac OS Leopard
Mac OS X은 이미 OpenSSH가 함께 있기 때문에 따로 Install 할 필요가 없습니다. 그러나, 상대 서버에 unison을 custom directory에 카피해 두었다면, 그것을 실행 할 수 있도록 sshcmd를 설정해 주는 것이 좋습니다. 그리고, Windows XP및 Linux등에서 발생할 수 있는 Carriage Return Code의 호환을 위해 서버를 auto로 launch 할 필요가 있습니다. 따로 sshcmd를 설정할 경우, Password를 자동으로 설정까지 해 준다면, 쉽게 Unison을 이용할 수 있습니다.
4.1 SSH Password 설정
우선 Mac OSX 에서 다음과 같이 설정합니다.
cd ~/.ssh ssh-keygen -b 1024 -t rsa scp id_rsa.pub <ID>@<REMOTE SITE>:.ssh
이제 Remote Site로 들어갑니다.
cd ~/.ssh cat id_rsa.pub >> authorized_keys mv id_rsa.pub id_rsa.pub.mac
이제 ssh <ID>@<REMOTE SITE>를 이용하면, password를 따로 입력하지 않아도 바로 들어 갈 수 있습니다.
4.2 Unison Profile 설정
다음과 같이 sshcmd를 추가해 줍니다. Mac OS X에서 Union의 Profile은 /Users/<ID>/Library/Application Support/Unison 에 생성이 됩니다.
root = <Local Directory> root = ssh://<USERID>@<SITE NAME>//xxxx/xxxxx sshcmd = /home/<MYID>/myssh.sh
4.3 SSH Script 설정
그럼, sshcmd에 이용할 script를 설정해 봅시다. 위치는 profile에서 정한 위치에 둡니다. 즉, /home/<MYID>에 myssh.sh 파일을 생성하여 다음을 입력합니다.
#!/bin/bash ssh <ID>@<REMOTE SITE> "<UNISON ABSOLUTE PATH>/unison -server -auto"
자, 이제 unison을 실행하여 file synchronization 을 확인합니다.
5. Unison을 debugging 하는 방법
특별히 debugging을 할 필요는 없지만, 세팅이나 기타 문제에 대해서 tracking을 하고 싶을때 다음과 같이 입력해 줍니다.
unison -debug verbose
[update: 08/02/2010]