有时候代码开源网站无法访问或者访问很慢,这个时候如果本地能搭建这么一个代码服务就能解决这个问题了,本文就主要介绍一个搭建本地OpenGrok代码检索服务器方法。
1.软件准备
Java:jdk1.8.0_181
Tomcat:apache-tomcat-8.5.32
OpenGrok:opengrok-1.1-rc3
ctags:ctags-5.8
相关软件:https://pan.baidu.com/s/17keDbXOSlGzbWaXPn9nf8w 或者百度搜索相关软件即可
2.软件安装
将所需软件解压解压后路径如下:
username@ubuntu:~/bin$ pwd
/home/username/bin
username@ubuntu:~/bin$ ll
total 40
drwxr-xr-x 6 username ubuntu 4096 8月 16 10:40 ./
drwxr-xr-x 13 username ubuntu 4096 8月 16 14:38 ../
drwxr-xr-x 9 username ubuntu 4096 8月 14 20:43 apache-tomcat-8.5.32/
drwxr-xr-x 7 username ubuntu 4096 8月 14 20:44 jdk1.8.0_181/
drwxr-xr-x 8 username ubuntu 4096 8月 16 10:48 opengrok-1.1-rc3/
3.配置环境变量
#JAVA
export JAVA_HOME=/home/username/bin/jdk1.8.0_181
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# OPENGROK
export OPENGROK_INSTANCE_BASE=/home/username/bin/opengrok-1.1-rc3
export SCRIPT_DIRECTORY=$OPENGROK_INSTANCE_BASE/bin
export OPENGROK_DISTRIBUTION_BASE=$OPENGROK_INSTANCE_BASE/lib
# source code root
export SRC_ROOT=$OPENGROK_INSTANCE_BASE/database/src
# generated data root
export DATA_ROOT=$OPENGROK_INSTANCE_BASE/database/data
#CTAG
EXUB_CTAGS=/usr/local/bin/ctags
#TOMCAT
export OPENGROK_APP_SERVER=Tomcat
export OPENGROK_TOMCAT_BASE=/home/username/bin/apache-tomcat-8.5.32/
export OPENGROK_WAR_TARGET_TOMCAT=$OPENGROK_TOMCAT_BASE/webapps
export OPENGROK_WAR_TARGET=$OPENGROK_TOMCAT_BASE/webapps
export CATALINA_HOME=$OPENGROK_TOMCAT_BASE
可将上述环境写到一个脚本中如:setEnv.sh
在shell窗口执行以下命令即可:
source setEnv.sh
4.启动Tomcat
username@ubuntu:~/bin/apache-tomcat-8.5.32/bin$ cd /home/username/bin/apache-tomcat-8.5.32/bin
username@ubuntu:~/bin/apache-tomcat-8.5.32/bin$ ./startup.sh
Using CATALINA_BASE: /home/username/bin/apache-tomcat-8.5.32
Using CATALINA_HOME: /home/username/bin/apache-tomcat-8.5.32
Using CATALINA_TMPDIR: /home/username/bin/apache-tomcat-8.5.32/temp
Using JRE_HOME: /home/username/bin/jdk1.8.0_181/jre
Using CLASSPATH: /home/username/bin/apache-tomcat-8.5.32/bin/bootstrap.jar:/home/username/bin/apache-tomcat-8.5.32/bin/tomcat-juli.jar
Tomcat started.
启动后:
http://localhost:8080
能访问到如下界面表示tomcat启动正常.
5.发布opengork
实际上将对于的war包拷贝到tomcat发布目录。
war包目录:/home/username/bin/opengrok-1.1-rc3/lib/source.war
username@ubuntu:~/bin/opengrok-1.1-rc3/lib$ pwd
/home/username/bin/opengrok-1.1-rc3/lib
username@ubuntu:~/bin/opengrok-1.1-rc3/lib$ ll
total 10556
drwxr-xr-x 3 username ubuntu 4096 8月 16 10:40 ./
drwxr-xr-x 8 username ubuntu 4096 8月 16 10:48 ../
drwxr-xr-x 2 username ubuntu 4096 8月 16 10:40 lib/
-rw-r--r-- 1 username ubuntu 2128721 8月 16 10:40 opengrok.jar
-rw-r--r-- 1 username ubuntu 8663178 8月 16 10:40 source.war
执行拷贝命令:
cp -rf /home/username/bin/opengrok-1.1-rc3/lib/source.war /home/username/bin/apache-tomcat-8.5.32/webapps/
6.建立代码索引
username@ubuntu:~/bin/opengrok-1.1-rc3/bin$ pwd
/home/username/bin/opengrok-1.1-rc3/bin
username@ubuntu:~/bin/opengrok-1.1-rc3/bin$ ./OpenGrok index /home/username/code_path
建立索引时间可能比较长,这个与代码量有关,总之耐心等待。
代码索引建立后会
在$OPENGROK_INSTANCE_BASE目录下data下生产索引文件:(也可能在/var/opengrok/data下)
username@ubuntu:~/bin/opengrok-1.1-rc3/data$ ll
total 24
drwxr-xr-x 5 username ubuntu 4096 8月 16 14:39 ./
drwxr-xr-x 8 username ubuntu 4096 8月 16 10:48 ../
drwxr-xr-x 34 username ubuntu 4096 8月 16 10:50 historycache/
drwxr-xr-x 34 username ubuntu 4096 8月 16 11:00 index/
-rw-r----- 1 username ubuntu 2 8月 16 15:12 statistics.json
-rw-r--r-- 1 username ubuntu 0 8月 16 12:35 timestamp
drwxr-xr-x 34 username ubuntu 4096 8月 16 11:00 xref/
在$OPENGROK_INSTANCE_BASE目录的etc下生产配置文件:configuration.xml (也可能在/var/opengrok/etc下)
username @sykean:~/bin/opengrok-1.1-rc3/etc$ ll
total 120
drwxr-xr-x 2 username ubuntu 4096 8月 16 10:48 ./
drwxr-xr-x 8 username ubuntu 4096 8月 16 10:48 ../
-rw-r--r-- 1 username ubuntu 111620 8月 16 10:48 configuration.xml
7.配置CONFIGURATION
在Tomcat服务中配置CONFIGURATION。
/home/username/bin/apache-tomcat-8.5.32/webapps/source/WEB-INF/web.xml 中配置CONFIGURATION:
...
备注:配置成第6步中生成文件的对应路径
8.遇到的问题
jdk版本问题,一般把环境变量配好可以避免
权限问题:所有软件解压配置在普通用户下配置执行即可,如本文自始至终使用username这个一般用户,遇到权限问题,适当sudo解决。
软件安装运行依赖的部分软件,安装依赖提示安装即可。
9.升级版功能
代码检索服务器的自动更新功能
思路:编写代码同步脚本及更新索引策略,更新策略可以使用crontab定时执行对应脚本
命令:crontab -e
在crontab添加如下一行:
59 23 * * 1,2,3,4,5,6 /home/username/bin/syncAndReindex.sh
即每周1,2,3,4,5,6晚23:59执行同步脚本/home/username/bin/syncAndReindex.sh。
crontab定时执行对应脚本:
username@Ubuntu:/var/opengrok/log$ crontab -e
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
59 23 * * 1,2,3,4,5,6 /home/username/bin/syncAndReindex.sh
/home/username/bin/syncAndReindex.sh的事情主要是两件:
#sync code
echo "sync code ..."
echo "cd /home/username/code"
cd /home/username/code
repo sync -c ;
#Reindex
#echo "remove index ... rm -rf /home/username/bin/opengrok-1.1-rc3/data"
#echo pwd| sudo -S rm -rf /home/username/bin/opengrok-1.1-rc3/data;
#echo "remove index ... rm -rf /var/opengrok/data"
#echo pwd| sudo -S rm -rf /var/opengrok/data 不建议删除该路径下的,网上说会导致编译 错误:... Unsupported major.minor version 52.0,这个目录存在与否与这个错误没有半毛钱关系!!!! 这个编译错误与jdk版本错乱有关,正确配置jdk及载入环境编译可避免此问题,另外删除此目录影响reindex时间。
#如下chown 的作用是将/var/opengrok/改到用户username 防止执行建立索引是对该目录没有权限,正常情况是应该保证该目录存在,可先mkdir,可以采取sudo利用管道填充pwd方式,实际中pwd需要替换成用户username的登录密码。
echo pwd| sudo -S mkdir -R /var/opengrok/;
echo pwd| sudo -S chown -R username /var/opengrok/;
#create index
echo "create index ..."
echo "cd /home/username/bin/opengrok-1.1-rc3/bin "
cd /home/username/bin/opengrok-1.1-rc3/bin;
./OpenGrok index /home/username/code/;
echo "Done!"