Open Source기반의 EDM을 찾다가, 발견한 제품인 Alfresco. Java로 된 솔루션인데, 이미 상용화 서비스를 제공하고 있어서 인지, 제품의 완성도가 상당히 높았다.
그래서 이 Aflresco를 Windows에 설치 한 뒤, 다양하게 사용해 봤는데, 괜찮았다. 그래서 아예 서버를 분리해서 Alfresco 전용 서버를 구축하기로 마음먹고, 성능 향상을 위해 x64기반의 Ubuntu Server 위 에 설치했다.
그리고 현재 잘 사용하고 있다.
그런데, 예전에 설치해서 사용할 때는 Office 계열 문서의 경우 자체적으로 PDF로 변환을 해서, 이를 웹상에 바로 노출되었는데, 이게 제대로 동작하지 않고 있다. 즉, 진짜 바이너리 파일 처럼 문서가 계속 Word, Excel 등으로만 뜨고, Preview 화면이 제대로 표시되지 않는 문제가 계속 되었다. 처음에는 변환에 시간이 걸려서 그런가 했는데, 애석하게도 그렇지는 않은 듯 싶다.
구글링을 해보니 이런 글(http://www.simonbuckle.com/2007/06/06/converting-to-pdf-with-alfresco/) 이 걸렸다.
마음을 다 잡고 다시 차근 차근 구글링을 시도했고, 이 문제를 해결 하기 위한 답을 찾았다.
이 문제를 해결 하기 위해 아래의 링크들을 참고했다.
https://forums.alfresco.com/forum/end-user-discussions/alfresco-share/cannot-preview-ms-office-files-03122012-1400
문제 현상.
문제가 된 현상은 다음과 같다.
보면 모든 문서들이 단순 아이콘으로만 뜨고 있다. 더욱이 해당 문서 안으로 들어가면, 내용을 보여주는 Preview 화면 조차 없다.
그러다가, Tomcat 내부에 있는 catalina.out 이라는 로그 파일을 관찰했고, 문서를 읽을 때마다, 다음과 같은 오류를 뱉는 것을 확인했다.
ERROR [extensions.webscripts.AbstractRuntime] [http-8080-39] Exception from executeScript
- redirecting to status template error: 02120007
The content node was not specified so the content cannot be streamed to the client:
classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.js org.springframework.extensions.webscripts.WebScriptException: 02120007
The content node was not specified so the content cannot be streamed to the client:
classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.js at org.alfresco.repo.web.scripts.content.StreamContent.execute(StreamContent.java:183) at org.alfresco.repo.web.scripts.RepositoryContainer$2.execute(RepositoryContainer.java:400)
그래서
Exception from executeScript - redirecting to status template error
로 검색을 했고, 위의 문제 해결 링크를 찾았다.
문제 분석
최초로 찾은 글에서는 몇몇 답변들이 있었지만, 별 의미는 없었다. 하지만, 맨 끝자락에 있는 "TTownsend"라는 분이 글을 남겼고, 그 분이 문제 해결에 대한 Thread를 남겼는데, 그게 결정적이였다. ( Thanks TTownsend! )
같은 문제인지 확인해 보려면, /alfresco/libreoffice/scripts Directory로 이동 한뒤, openoffice_ctl.sh 를 실행해 본다. 그러면 콘솔 창에 "openoffice did not start" 라는 메시지가 뜨면 바로 이 해결 방법으로 처리할 수 있는 문제이다.
그러면 이제 openoffice_ctl.sh 가 어떻게 실행되는지 확인한다.
먼저 openoffice_ctl.sh 파일을 열고 그 안에서 SOFFICE로 시작되는 모든 변수 값을 가져온다.
소스의 맨 윗부분인데, 이 내용을 메모장 같은 곳에 복사해서 각 변수들 값을 조합하여 직접 실행 시킬 수 있는 명령 줄을 만든다.
#!/bin/sh # Open Office SOFFICE_PATH="/alfresco/libreoffice/program" SOFFICE_PORT="8100" SOFFICEBIN=/alfresco/libreoffice/program/soffice.bin SOFFICE="$SOFFICEBIN --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=$SOFFICE_PORT;urp;StarOffice.ServiceManager" SOFFICE_STATUS=""이 내용을
/alfresco/libreoffice/program/soffice.bin --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager로 만든다.
명령줄이 준비되었으면 실행해본다.
root@testserver:/alfresco/libreoffice/scripts# /alfresco/libreoffice/program/soffice.bin --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager /alfresco/libreoffice/program/soffice.bin: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory No command 'urp' found, did you mean: Command 'unp' from package 'unp' (universe) Command 'burp' from package 'burp' (universe) Command 'arp' from package 'net-tools' (main) Command 'rup' from package 'rstat-client' (universe) urp: command not found StarOffice.ServiceManager: command not found root@docsvr:/alfresco/libreoffice/scripts# apt-file search libXrender.so.1 libxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1 libxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 libxrender1-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0
결론을 내자면, 이 문제의 모든 원인은 바로 Open Office 를 실행하기 위한 필수 라이브러리가 제대로 설치되어 있지 않아 발생되는 문제였다. Open Office 자체가 X11과 같은 X-Windows용 프로그램이다 보니, Linux Server와 최소 설치형태로 제공되는 시스템은 당연하게 X-Windows 라이브러리가 없었고, 그 결과 Open Office 프로그램을 실행할 수 없는 문제가 발생하는 것이다.
서버 내에 X-Windows 라이브러리가 없어서 발생되는 문제였으므로, 이 문제를 해결 하려면, 역시 X-Windows를 설치하면 해결 된다. 하지만, 고작 이 Open Office 서비스를 실행하기 위해서 X-Windows를 설치하는 것은 배보다 배꼽이 큰 결과로 봐도 무방한다. GUI 없이 시스템 자원을 확실하게 사용하려고 서버를 깔았는데 말이다.
그러므로, 거대한 X-Windows 구성요소 중, Open Office가 실행될 수 있는 최소 필수 라이브러리만 설치하도록 한다.
이를 하기 위해서는 준비 작업을 먼저 해야 한다.
준비 작업
특별히 준비할 것은 없지만, 현재의 문제를 정확히 파악하려면, 패키지 관리 도구를 업데이트 해야 한다.
문제 분석은 현재 설치되어 있는 라이브러리들을 파악해야 한다. 그 라이브러리는 어떤 패키지에 속해 있는지를 알아야 하는데, 그 작업을 하기 위해서는 apt-file 이라는 패키지가 필요하다. (이미 구성되어 있을 수도 있다.)
apt-get install apt-file apt-file update먼저 apt-file 패키지를 설치한다. 그리고 apt-file을 업데이트하도록 한다.
그러면 문제의 파일이 어느 라이브러리에 속하는지 알 수 있게 된다.
해결 방법
앞서 실행해 봤던 명령 줄을 실행한다.
그러면 아래처럼 결과가 나오는데, 그 중 굵게 표시한 부분을 주목하자. libXrender.so.1 이라는 라이브러리를 읽어오는데 문제가 발생했다는 것이다./alfresco/libreoffice/program/soffice.bin: error while loading shared libraries: libXrender.so.1: cannot open shared object file: No such file or directory No command 'urp' found, did you mean: No command 'urp' found, did you mean: Command 'unp' from package 'unp' (universe) Command 'burp' from package 'burp' (universe) Command 'arp' from package 'net-tools' (main) Command 'rup' from package 'rstat-client' (universe) urp: command not found StarOffice.ServiceManager: command not found root@docsvr:/alfresco/libreoffice/scripts# apt-file search libXrender.so.1 libxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1 libxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 libxrender1-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0
문제의 라이브러리가 속한 패키지를 파악한다.
apt-file search libXrender.so.1
라고 입력한다. 그러면 다음과 같은 결과를 돌려준다.
libxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1 ibxrender1: /usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0 libxrender1-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0결과를 보면 libxrender1 이라는 패키지에 구성된 파일임을 알 수 있다.
이 패키지를 다시 설치한다.
apt-get install libxrender1그러면 패키지와 연계되어 아직 설치되지 않았던 패키지들이 실행된다.
패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 다음 새 패키지를 설치할 것입니다: libxrender1 0개 업그레이드, 1개 새로 설치, 0개 제거 및 22개 업그레이드 안 함. 20.9 k바이트 아카이브를 받아야 합니다. 이 작업 후 88.1 k바이트의 디스크 공간을 더 사용하게 됩니다. 받기:1 http://kr.archive.ubuntu.com/ubuntu/ raring-updates/main libxrender1 amd64 1:0.9.7-1ubuntu0.13.04.1 [20.9 kB] 내려받기 20.9 k바이트, 소요시간 1초 (13.5 k바이트/초) Selecting previously unselected package libxrender1:amd64. (데이터베이스 읽는중 ...현재 83473개의 파일과 디렉터리가 설치되어 있습니다.) libxrender1:amd64 패키지를 푸는 중입니다 (.../libxrender1_1%3a0.9.7-1ubuntu0.13.04.1_amd64.deb에서) ... libxrender1:amd64 (1:0.9.7-1ubuntu0.13.04.1) 설정하는 중입니다 ... libc-bin에 대한 트리거를 처리하는 중입니다 ... ldconfig deferred processing now taking place
이 작업을 앞에서 Open Office를 실행하기 위한 명령 줄 "/alfresco/libreoffice/program/soffice.bin --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"를 실행하면서 오류가 발생하지 않을 때 까지, apt-file search 하고, apt-get install 을 해서 찾는다.
그러면 어느 순간부터는 실행 했을 때, 더 이상 입력되지 않고, 무언가가 계속 실행된 상태가 유지되는 것을 볼 수 있다. 필자의 경우 아래와 같이 되고, 실행된 상태로 계속 유지 되었다.
root@testserver:/alfresco/libreoffice/scripts/alfresco/libreoffice/program/soffice.bin --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager Fontconfig warning: "/alfresco/libreoffice/share/fonts/truetype/fc_local.conf", line 13: Having multiplein isn't supported and may not work as expected
이제 Ctrl + C로 빠져 나오고, ./openoffice_ctl.sh start 명령을 입력한다.
그러면, "./openoffice_ctl.sh : openoffice started at port 8100" 라는 메시지가 나오고 종료된다.
그러면 성공!
이제 alfresco 서버를 다시 시작하면 정상적으로 동작하는 것을 볼 수 있다.
결론
X-Windows 라이브러리와 같은 기초 동작 라이브러리만 잘 구성해서 추가해주면 아주 부드럽게 잘 동작한다. 문서 Preview도 잘 되고, 화면도 팍팍 표시된다. 문제는 단순했지만, 역시 잘 모르면, 해결하기 그렇게 쉽지는 않다. 하지만, 전세계를 대상으로 검색해보면, 나와 같은 고민에 빠진 사람들을 쉽게 찾아볼 수 있고, 또, 그 문제를 접근하고, 해결하는 방법들이 잘 나와 있어 얼마나 다행인지 모르겠다. (아직도 NavXX 마수에 빠지신 분은 이 해결 방법 그렇게 쉽게 찾지는 못 할 듯! ㅋ )
어쨌던, 이 솔루션 생각보다 훌륭하다. 상당히 안정적이며 빠르다.
물론 설정이나, 구성 방법은 그렇게 쉽지만은 않지만, 그래도 성능 하나 만으로 이 모든 문제를 상쇄할 만큼 훌륭한 제품인 것 같다. 개인적인 문서 / 사진 라이브러리 구축을 위해 사용하고 있지만, 작은 규모의 팀이나, 회사에서도 충분히 활용 할만 하다. ( 아 아직 한글은 지원하지 않는다. 현재 필자가 개인적으로 번역 작업을 해보고 있다. ㅋ )
( Alfresco 한글화 구성 사이트 : http://crowdin.net/project/alfresco/ko )