一:需要的文件准备(更详细可参考官方的文件lxr-1.2.0/doc/INSTALL)
1.perl版本5.10或者更高
2.ctags版本5或者更好
3.Mysql数据库,版本4.x/5.x
4 apache服务器,版本1或者版本2
5. The Perl File::MMagic module(从INSTALL文件上复制过来的,大概就是一个Perl的模块)
大概就是上面这些文件,更具体的请必须参考官方的文件lxr-1.2.0/doc/INSTALL。
具体的命令就是(拿mysql做例子)yum install mysql mysql-server。大家根据自身具体的情况把依赖程序或者库装上去就行了。
二:. 配置lxr-1.2.0
在进行配置之前,可运行以下命令检查你第一步所需的文件有没有安装全
./genxref --checkonly
假如出现以下类似的情况则说明你所需的文件已经安装好了
No URL specified - Continuing in checking mode
=> [ OK ] Perl version ... 5.14.2
Parameter 'ectagsbin' not defined - trying to find ctags
'ectagsbin' found at /usr/bin/ctags
Manually update lxr.conf for permanent setting
=> [ OK ] ctags version ... 5.8
Parameter 'glimpsebin' not defined - trying to find glimpse
'glimpsebin' found at /usr/local/bin/glimpse
Manually update lxr.conf for permanent setting
=> Checked: glimpse version ... 4.18.5
Parameter 'glimpseindex' not defined - trying to find glimpseindex
'glimpseindex' found at /usr/local/bin/glimpseindex
Manually update lxr.conf for permanent setting
=> Checked: glimpseindex version ... 4.18.5
Parameter 'swishbin' not defined - trying to find swish-e
=> swish-e not found, `which swish-e` returned a null string
genxref stopped without indexing by --checkonly option
(上述检查方法出席官方文件lxr-1.2.0/doc/INSTALL
然后就开始真正的lxr-1.2.0配置了,在lxr-1.2.0目录下运行(注意,需要root权限)
./scripts/configure-lxr.pl -v
按照官方文件的说法,在这个lxr版本中,为了方便用户进行一系列繁琐的配置,所以就写了上面这样一个脚本,交互式地引导用户进行配置。其中选项中绿色或者以大写字幕表示的选项代表默认选项,在不太懂的情况下可以直接按(Enter键)直接跳过。以下逐一列出每一条配置选项(根据你的选择可能略有出入):
1. Configure for single/multiple trees? [S/m] >
(这个句子意思不是很懂,为了不误人子弟,不发表见解)选择:S
2. Do you intend to add other trees later? [yes/NO] >
(在官方文档上说了,加入选择了single tree模式,以后就不能再添加tree了,所以这个句子是问你是否确定选择single tree模式。如果你在第一个句子上选择了multiple trees,
3.Web server type? [1.DEFAULT
/2.section in default
/3.indepedent
/4.section in indepedent
] >
(对各种类型不太了解)选择:1
4. The computer hosting the server is described by an URL.
The form is scheme://host_name:port
--- Host name or IP? [//localhost] >
输入你电脑的主机名(指能在浏览器访问的,类似www.baidu.com那种主机名),一般情况下,默认选择localhost就行了。
5. Database engine? [MYSQL/oracle/postgres/sqlite] >
MYSQL数据库,不解释。
6. --- Directory for glimpse databases? >
(就是指定存放glimpse数据库的地址,这个可以随便给定,只是作为以后产生索引时,存放glimpse相关文件的地方)随便给定:/home/username/glimpse_db
7. templates directory templates/ now protected read-only
Is your Apache version 2.4 or higher? [YES/no] >
apache服务器的版本,视你所安装的而定,我的版本是2.2,所以选择no
8. --- Alias name ? (hit return to stop) >
给你在4中给定的主机名钻则一个别名,意义不大,按Enter键跳过
9. --- Use 'buttons-and-menus' instead of 'link' interface? [YES/no] >
不太懂,按Enter键直接跳过
10. --- Caption in page header? (e.g. Project XYZZY displayed by LXR) >
网页上显示的类似标题之类的东西,随便给就行了。给定:at you will
11. Do you need a specific encoding for this tree ? [yes/NO] >
网页上的编码,选择默认就行了。选择:NO
11. How is your tree stored? [FILES/cvs/git/svn/hg/bk] >
你的源文件是存放在哪里的,第一个FILES表示在本地,所以选择:FILES
12. --- Source directory? (e.g. /home/myself/project-tree) >
这个参数很重要,指名你的源代码的根目录是地址,有点类似apache的root directory的味道。可以选择指定位lxr-1.2.0.
13. Name to display for the path root? (e.g. Project or $v for version) [$v] >
这里的path root和上面的source dirctory以及$v变量,我觉得一开始是挺不好理解的,不知道究竟有什么不同。其实这个source directory如步驟12所说的,是一个根目录,而这个根目录下面应该有存放你各种源代码版本的子目录(这些子目录才是真正放源代码的地方,由$v变量内容决定),而这个path root如句子中所说,只是一个名字,不是特别重要。根据官方文件给出的建议,可以指定位第12步中的project名,即lxr-1.2.0或者默认的$v(这是个变量,代表版本号)。指定lxr-1.2.0
14. Label for version selection menu? [Version] >
第13步中变量$v的内容,随便指定就行了。选择默认Version
15. Version enumeration method? [LIST/file/function] >
不懂。直接按Enter跳过
16. --- Version name? (hit return to stop) >
不懂。随便指定好了
17. -- Default displayed version is first in 'range'? [YES/no] >
上面步驟13不是有一个$v变量,如果你查lxr.conf文件你就会发现这个变量其实类似于一个python中数组结构(或者C++中的map容器),它是以字符串索引数组里面的内容的,而这个range指定了你的索引号。比如你的range内容是("hello", "world"),那么在你在步驟11指定的源代码目录(本文指lxr-1.2.0)就应有hello和world两个文件夹,里面应该存放源代码作为用脚本产生索引(后面会讲到)的依据,同时在你的glimpse数据库文件(步驟6)底下,也会产生相应的文件夹,存放glimpse相关的文件。所以这里的意思是指是否同意在浏览器上默认显示range里面的第一个版本版本(这里指的是hello文件夹里面的版本)
18. --- Directory to ignore, e.g. CVSROOT or CVS? (hit return to stop) >
不懂。直接按enter跳过
19. --- Include directory, e.g. /include? (hit return to stop) >
可能是类似c中#include的功能?不懂。直接按enter跳过。
20.....--- Database name? > db
--- DB user name? [lxr] >
--- DB password? [lxrpw] >
--- DB table prefix? [lxr_] >
上面包含了几步,是指定创建mysql数据库时的资料。按自己的实际情况填写就好了。
三:初始化数据库
执行命令
./custom.d/initdb.sh
然后输入mysql root用户的密码就行了,就会根据上面第20步的内容创建数据库。
在第二大步驟中在custom.d文件中会产生一个lxr.conf配置文件(里面存放的是lxr的所有参数,随时可以改),把它复制到lxr-1.2.0的根目录
cp custom.d/lxr.conf
然后就可以产生索引了,在产生索引之前,把你的的源代码文件复制到步驟17上讲的各‘range’版本的文件夹(这里hello文件夹)中,然后运行下面的命令
./genxref --url=//myPC.example.com/virtroot --version=versionA
其中myPC.example.com就是你的主机名,virtroot就是对应你以后在浏览器上访问时的一个路径名,具体可以参看你的lxr.conf文件。versionA就是指你的range中的版本,这里就是指hello这个版本。所以在本文的例子中就是
./genxref --url=//localhost/virtroot --version=hello
上面只是产生在hello文件底下的源代码文件的索引,还有一个命令可以产生所有版本的索引,具体请参考官方文件lxr-1.2.0/doc/INSTALL
四:配置apache服务器(只给出apache版本2的例子,如果你的是apache版本1,请参考官方文件里面给出的做法)
apache服务器配置就简单了,只需把custom.d文件夹中的apache-lxrserver.conf文件拷贝到/etc/httpd/conf.d/目录就行了。
最后为了避免SELinux的干扰,最好加上这句话
chcon --reference /var/www/cgi-bin/ -R LXR_root_directory/
LXR_root_dirctory就是步驟12中的source directory。
到此所有的配置都完成了。在浏览器上输入 http://localhost/virtroot/source(注:除了virtroot要换上你具体的名字外,其它都不要改)
配置是完成,但是总有难免有一些不可避免的问题和麻烦。本人就遇到了一大堆麻烦,例如mysql服务不能成功运行,http服务不能运行,没有访问页面的权限等等。提供几个普遍的发现问题在哪里和怎么解决的办法。
1. 查看/var/log/messages文件,这里基本上对你所遇到的意外的情况都有比较详细的描述,记得参考。此外还有/var/log/目录下具体程序的服务日志,如apache服务器的是/var/log/httpd/error_log,里面有例如你的apache服务器配置文件httpd.conf那里语法不对这类的描述,记得参考。
2. 有时候你对你自己说,“这怎么可能错的”,却的确错了(例如没有页面访问权限)的时候,很可能就是SELinux或者防火墙在作怪。因此,你应该了解以下SELinux的一些基本操作和情况,鸟个这里有非常好的介绍URL
此外,对于各种linux发行版,建议使用以下命令启动服务,比较通用些。
service httpd start
service mysqld start
大概就讲这么多了,希望你能顺利搭建。我搭建之后发现感觉非常之棒,不用再费尽心思去找一个函数或struct结构的定义在哪里,非常之方便。
如果你有看了本文的讲解之外仍然有问题,可以跟我联系,我会尽力帮助你的。我的邮件地址是zczhuohuo@gmail.com