최근에 fuse 에 관심을 가지게 되어서, sshfs 를 맥에서 사용하게 되었다. 내 사무실에는 아이맥을 메인으로 쓰고, 뒷편에 우분투 리눅스가 있다. 아이맥은 1TB 의 하드 디스크에 거의 업무용 파일만 있지만, 우분투 리눅스에는 8TB 의 하드디스크에 비업무용(?) 파일들로 가득 차 있다. 평소에는 이 우분투에 있는 파일중 일부를 아이맥이나 아이패드에 옮긴 다음, 소비(??)를 했는데, sshfs 를 테스트 삼아 사용해 보다, 너무 편리하다는 생각이 문득 들었다.
사실 Transmit 에도 자체적으로 sshfs 기능이 살짝 녹아 들어 있었지만, 사용을 가로막은 것은 바로 한글, 정확히는 NFC <=> NFD 의 문제 였다. 같은 유니코드라도, 대부분의 OS 에서는 Composed 형태로 파일명을 유지하고, 오직 Mac OS X 에서만 Decomposed 형태로 파일명을 처리한다. 문제는, 리모트(네트워크)로 타OS 의 파일 시스템을 접근 할 때에도, Mac OS X 은 강제로 접근 할 때, decomposed 형태로 변환한 다음 접근을 시도한다. 그래서, 멀쩡이 눈에 보이는 파일을 접근 할 수 없다는 문제가 발생한다. 결론은, 한글 파일을 열지 못하고, 한글로 된 폴더를 열 수 없다.
궁극적인 해결 방법은 sshfs 가 사용하는 libfuse 를 패치하여, 모든 libfuse 가 사용하는 애플리케이션들이 문제가 없도록 해야 겠지만, libfuse 를 손대는 것은 너무 방대한 일이라 엄두가 않났다. Macfuse 프로젝트 웹페이지는 해당 문제에 대한 문제점 인식은 정리가 되어 있다.
일단 간단한 해결책으로 sshfs 를 패치해 보려고 시도를 했다. github 에서 fuse4x 에서 사용한 sshfs 코드를 분기한 다음, path 부분을 접근하는 영역을 찾아서, Normalize 시켰다. 한글 파일 열기가 가능해 졌고, 한글 폴더에도 들어가 졌다. 일견 해결된 것 같은 모습을 보였지만, 쉽지 않은 문제가 발생했다. 한글 파일이 있는 폴더 안에서는 자꾸 리프레시가 일어나서, 아래쪽으로 스크롤다운 해도, 다시 위쪽으로 복귀가 되는가 하면, 한글로 된 폴더 안으로 들어가면 5초후 다시 상위폴더로 돌아가버리는 문제가 발생하였다.
관련된 문제에 대해서 osxdev 에도 포스팅 하였다.
위 문제는 파인더가 .DS_Store 파일을 생성하려는데, 생성이 되지 않아 발생하는 문제로 파악되어서, 파인더쪽의 옵션을 주는 것으로 해결하였다. 아래 명령을 통해서 네트워크로 마운트된 볼륨에 한해서, .DS_Store 파일을 만들지 않게 하는 옵션이 있는데, 이를 이용하면, 해당 문제가 발생하지 않는다.
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
깔끔한 해결책은 아니지만, 일단 사용가능한 수준까지는 왔다. 일단, 본 문제에 관해서는 여기까지로 하고 접는다.