2008년 5월 15일 목요일

ssh 터널링을 이용한 remote machine( 여기서는 localhost 의 colinux 에 띄운 lisp ) 에 slime 접근

win32 의 SBCL 지원은 아직 구린편. 특히 thread 미지원때문에 웹서버등으로 활용하는게 불가능 하다. 그래서 colinux+clbuild 콤보로 lisp 을 설치하고 사용중인데 X 포워딩을 하려면 X 서버에 Xming 까지 깔아야 하니 귀찮고.. emacs 를 띄우려고 하니 콘솔에서 띄우면 뭔가 부족하고.. 특히나 지금 쓰는 LCD 가 좆구려서 putty 를 띄웠을때 가독성이 개판이라 어쩔수 없이 win32 쪽에서 emacs 를 띄우고 colinux 의 lisp ( 다시말해 원격지의 lisp ) 에 slime-connect 를 걸어서 사용하는 방법을 사용하기로 했다.

먼저 colinux 쪽에서 swank 서버를 돌리자. 아직 수작업으로만 해봤다. .sbclrc 에 넣기는 좀 글코... 흠... 적절한 방법을 찾아보자.

./clbuild lisp
(require 'swank)
(swank:create-server)


요기까지 진행을 했다면 colinux 의 4005 포트에 슬라임 연결이 가능한 상태. 실사용시엔 :dont-close 등을 써야 할텐데 아직 써보진 않았다. 그런데 slime 은 로컬에서의 접근만 받도록 바인딩되어있으니 터널링이 필요하다. win32 쪽에서 콘솔을 열어서 plink 를 이용해서 이 colinux 의 4005 포트를 win32 쪽의 4005 로 터널링을 해주자.

plink -L 4005:localhost:4005 yoonkn@localhost

이제 win32 쪽의 4005 포트로 접근을 하면 colinux 쪽의 4005 포트로 접속되게 된다. 따라서 emacs 를 띄워서 slime-connect 로 localhost 로 붙으면 결국 colinux 쪽 lisp image 에 붙게 된다. 우왕ㅋ굳ㅋ. 그러나 문제점이 남아있는데 win32 쪽 emacs 의 파일경로와 colinux 쪽 lisp 의 파일경로가 같지 않다는점. 서로 다른 머신이니 당연하다. tramp-mode 를 써서 colinux 쪽으로 접근을 하자. 양쪽이 보는 path 가 아직도 서로 다르니 약간의 추가작업이 필요하다. 이문서를 참고하자. 현재 내 세팅은 아래와 같다. 지금 내 colinux 이미지의 호스트네임이 ubuntu 더라. 참고하자.

(pushnew (slime-create-filename-translator :machine-instance "ubuntu"
                                           :remote-host "localhost"
                                           :username "yoonkn")
         slime-filename-translations)


이제 모든 준비가 완료됐다. slime-connect 로 lisp image 에 연결하자. 로컬호스트로 터널링을 해놓았으니 localhost 의 4005 포트로 접근을 하면 colinux 쪽의 lisp image 쪽으로 연결된다.

M-x slime-connect

소스편집을 위해 win32 쪽에서 eshell 을 띄워서 tramp-mode 를 통해 colinux 장비의 파일/디렉토리에 접근하자. 굳이 eshell 을 띄울 필요는 없지만 eshell 을 통해 tramp 모드를 쓰는것은 내 스타일.

M-x eshell
cd /yoonkn@localhost:


이제 자연스럽게 쓰면된다. dired-mode 도 문제없고 C-c C-k 등으로 컴파일도 정상. M-. 로 소스브라우징도 오키. 그외 테스트를 해볼만한게 또 있을까??


----
좃스팟에 글을 쓰고 그대로 copy-paste 해봤다. 흠... 포매팅이 약간 깨지는 문제가 있긴 한데 뭐 이정도면 쓸만 한걸?

댓글 없음: