안녕하세요?
이번에는 웹 기반으로 소스를 탐색할 수 있는 툴에 대해서 알아보겠습니다.
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
설치하면 /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) | 2020.04.23 |
---|---|
Let's Encrypt SSL 인증서 발급하기 (certbot / renew) (2) | 2020.04.05 |
TVHeadend 4.3 버전 이상에서 리버스 프록시 설정하기 (0) | 2020.02.05 |
태블릿 / 노트북 외장 eGPU 장착 (라이저) (6) | 2020.01.15 |
버추얼 박스 6.1 on 데비안 10 Buster (0) | 2020.01.03 |
댓글