본문 바로가기
서버/리눅스 서버

Opengrok 설치하기

by 도정진 ㅋㅋ잠자 2020. 2. 24.

안녕하세요?


이번에는 웹 기반으로 소스를 탐색할 수 있는 툴에 대해서 알아보겠습니다.






1. ubuntu docker 컨테이너 생성


일단 컨테이너에서 돌릴 예정으로 아래의 명령으로 컨테이너를 생성합니다.


docker pull ubuntu:16.04


docker run -d -it --restart=always --name opengrok --net=host ubuntu:16.04 /bin/bash


docker 컨테이너의 경우 restart 옵션을 줄 때에 /bin/bash 를 실행하도록 지정하고, 혹시 소스 폴더를 바인딩 하시려면 -v 옵션으로 바인딩을 하시길 바랍니다.


이후, docker 컨테이너에 접근하여 서비스를 수동으로 시작해줘야하는 불편함이 있지만, 일단 빠르게 시작하기 위함임으로 상기와 같이 실행합니다.





2. 컨테이너 세팅


먼저 빠른 설치를 위해 소스 레포지토리 주소를 수정합니다.


sed -i -e "s/archive.ubuntu.com/ftp.lanet.kr/g" /etc/apt/sources.list


컨테이너에 아래의 패키지들을 설치합니다.


apt install curl sudo wget git python3-pip tomcat8 pkg-config automake dialog tzdata locales


다음으로 시간과 로케일 설정을 합니다. 로케일의 경우 EN US UTF-8 로 선택하는게 좋습니다.


dpkg-reconfigure tzdata

dpkg-reconfigure locales





3. opengrok 설치하기


먼저 opengrok 이 쓸 폴더를 생성합니다.


mkdir -p /opengrok/{src,data,dist,etc,log}


아래의 주소에서 최신 릴리즈 tarball 을 받습니다.


https://github.com/oracle/opengrok/releases


wget https://github.com/oracle/opengrok/releases/download/1.3.8/opengrok-1.3.8.tar.gz


압축을 풀어줍니다.


tar -C /opengrok/dist --strip-components=1 -xzf opengrok-1.3.8.tar.gz


기본 로깅 설정 파일을 복사합니다.


cp /opengrok/dist/doc/logging.properties /opengrok/etc


opengrok 파이썬 툴을 설치합니다.


cd /opengrok/dist/tools

pip3 install -U setuptools

pip3 install opengrok-tools.tar.gz


다음으로 혹시 tomcat8 포트를 바꾸려면 아래와 같이 server.xml 파일을 수정합니다.


root@djjproject:/# vim /etc/tomcat8/server.xml 


    <Connector port="10000" protocol="HTTP/1.1"

               connectionTimeout="20000"

               URIEncoding="UTF-8"

               redirectPort="8443" />


한편, 컨테이너에서 tomcat8 을 service tomcat8 start 하면 fail 이 나지만 실제로 동작중에 있습니다. 따라서 서비스를 종료하려면 아래의 명령으로 종료하시길 바랍니다.


pkill -9 -ef tomcat

service tomcat8 start


다음으로 설정파일을 지정하여 jar 파일을 /var/lib/tomcat8/webapps 로 옮깁니다.


opengrok-deploy -c /opengrok/etc/configuration.xml /opengrok/dist/lib/source.war /var/lib/tomcat8/webapps


인덱싱이 설정이 되지 않았다면 루트 폴더를 모르겠다는 에러페이지가 나올 것입니다.





4. universial ctags 설치하기


git clone https://github.com/universal-ctags/ctags

cd ctags/

./autogen.sh

./configure

make -j16 && make install


설치하면 /usr/local/bin/ctags 의 경로를 가집니다. exuberant ctags 랑 조금 다릅니다.





5. 인덱싱 설정하기


/opengrok/src 폴더에 인덱싱할 파일을 넣거나 혹은 심링크로 지정이 가능하고, tomcat8 에서 읽기 권한이 있어야합니다.


로깅을 시작할 경우 아래와 같이 명령을 넣습니다.


java -Djava.util.logging.config.file=/opengrok/etc/logging.properties -jar /opengrok/dist/lib/opengrok.jar -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -H -P -S -G -W /opengrok/etc/configuration.xml -U http://localhost:10000/source





6. 인덱싱 결과 확인하기


예제로 opengrok 소스를 인덱싱 해 보았습니다.








7. 인덱싱 예약 작업 걸기


crontab 을 설치합니다.


apt install cron

service crontab start


소스 싱크와 인덱싱 스크립트를 작성합니다.


root@djjproject:/# cat /home/sync.sh 


#!/bin/bash


function log {

LOGFILE="/var/log/opengrok.log"

TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`

echo "$TIMESTAMP $1" >> $LOGFILE

}


log "Opengrok Index Started!!!"


# source sync

cd /opengrok/src/opengrok

git pull


# source index

java -Djava.util.logging.config.file=/opengrok/etc/logging.properties -jar /opengrok/dist/lib/opengrok.jar -c /usr/local/bin/ctags -s /opengrok/src -d /opengrok/data -H -P -S -G -W /opengrok/etc/configuration.xml -U http://localhost:10000/source


log "Opengrok Index Finished!!!"


정상 작동하는 지 확인합니다.


root@djjproject:/# chmod a+x /home/sync.sh 

root@djjproject:/# ./home/sync.sh 

2020-02-24 13:28:51 Opengrok Index Started!!!

Already up-to-date.

13:28:55 WARNING: Error from ctags: ctags: Warning: "--file-scope" option is obsolete; use "--extras=+F" instead

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.asax.Asax.ASAX" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.ascx.Ascx.ASCX" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.aspx.Aspx.ASPX" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.htm.Htm.HTM" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.html.Html.HTML" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.master.Master.MASTER" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.xaml.Xaml.XAML" in "langmap" option

13:28:55 WARNING: Error from ctags: ctags: Warning: Unknown language "XML:+.xml.Xml.XML" in "langmap" option

2020-02-24 13:28:59 Opengrok Index Finished!!!


root@djjproject:/# cat /var/log/opengrok.log 

2020-02-24 13:29:39 Opengrok Index Started!!!

2020-02-24 13:29:47 Opengrok Index Finished!!!


예약 작업에 등록합니다.


root@djjproject:/# crontab -e


0 22 * * * su root -c "/home/sync.sh" > /dev/null 2>&1


no crontab for root - using an empty one

crontab: installing new crontab





8. 튜닝 (큰 프로젝트)


은 다음에 뵙겠습니다.


감사합니다.






댓글0