728x90

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/) 이 걸렸다.

" lsof -i | grep 8100 " 라고 입력하면 Office 파일 변환 서비스가 떠 있어야 된다는 의미인데, 애석하게도 실행해본 결과 아무것도 나타나지 않았다. 결국 이 Office 파일 변환 서비스가 제대로 떠있지 않다라는 결론이 나고, 좌절을 맛볼 수 밖에 없었다.

 

마음을 다 잡고 다시 차근 차근 구글링을 시도했고, 이 문제를 해결 하기 위한 답을 찾았다.
이 문제를 해결 하기 위해 아래의 링크들을 참고했다.
https://forums.alfresco.com/forum/end-user-discussions/alfresco-share/cannot-preview-ms-office-files-03122012-1400

https://forums.alfresco.com/forum/installation-upgrades-configuration-integration/configuration/document-preview-broken-42b#p139371

 

문제 현상.

문제가 된 현상은 다음과 같다.


보면 모든 문서들이 단순 아이콘으로만 뜨고 있다. 더욱이 해당 문서 안으로 들어가면, 내용을 보여주는 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 multiple  in  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 )

728x90
  1. 오진석 2013.10.21 15:43

    안녕하세요. 알프레스코 관련 조사 및 개발을 하던 도중에 이 블로그 포스트를 보게 되었습니다.

    양질의 좋은 소스 및 글에 대해 감사의 말씀 드립니다.

    저도 덕분에 여러가지 삽질 끝에 기본 세팅을 끝냈습니다.

    그 뒤로 콘텐츠 타입별 분류 페이지와 콘텐츠 묶음 페이지 ( 복사 X ) 등을 구현 해야하는데...

    어떻게 커스터마이징 해야할지 감이 안잡히네요...

    기본 세팅한대로 놔두고 따로 Web Server를 구현하고 API 형태로 서비스를 해야할지...

    혹시 커스터마이징까지 하셨다면 조언 부탁드리겠습니다 ㅠㅠ

    문서가 참 많은데 제가 영어가 딸려서 매우 힘드네요...ㅠㅠ

    • Favicon of https://www.hind.pe.kr 하인도 2013.10.28 18:26 신고

      제가 그 정도 경지는 아닙니다. ^^;;; 게다가, java로 되어 있는데다가, 소스자체를 손댈수 없도록 Class로 구성된 버전이 배포되기 때문이죠. 진석님께서 원하시는 레벨은 별도 페이지를 만들고, Ajax를 이용해 Javascript를 통해 REST API를 접근하는 레벨로 만드셔도 될 것 같지만, 가능성 타진은 역시 SDK 문서를 뒤적여 봐야 나올 것 같습니다.

  2. 룩아쑤 2013.11.01 11:36

    Alfresco는 Open Source이기 때문에... Community 버젼의 경우....소스코드를 다운받아 얼마든지 소스 변경이 가능합니다... (아래 svn 참조)

    http://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD

    다만.. 소스를 건드리게 되면 새로운 버전이 나왔을 때, 업그레이드가 힘들어 지기 때문에, Alfresco에서는 AMP (Alfresco Module Package)라고 extension package를 만드셔서 extension 하기를 권하고 있습니다..

    즉... 예를 들어... 현재 있는 feature가 맘에 안 드시면... 소스를 변경하는게 아니라.. 새로운 소스를 만드셔서 Alfresco에 탑재하여... 그 새로운 소스를 쓰시면 됩니다...

    AMP는 Maven을 통해서 쉽게 만드실 수 있습니다...

    Alfresco에 대해 관심이 있으시고 다른 Alfresco 유저들과 정보 공유 협동을 원하시면... Alfresco 카페에 가입하시는건 어떨지요...

    http://cafe.naver.com/alfresco101

  3. 트롯 2013.11.28 12:26

    오피스 관련 라이브러리 입니다. 확인해 놓으시면 재설치시 도움이 되겠네요
    • linux-vdso.so.1
    • libXext.so.6
    • libm.so.6
    • libc.so.6
    • libdl.so.2
    • libpthread.so.0
    • libfreetype.so.6
    • libX11.so.6
    • libXau.so.6
    • ld-linux-x86-64.so.2
    • libXdmcp.so.6
    설치 매뉴얼에서 발췌했습니다

+ Recent posts