首先更新一下
$ sudo apt-get update
根据lxr的官方文档, 我们需要准备Perl,ctags
$ sudo apt-get install perl universal-ctags
数据库这里选择 MySQL 8.0
$ sudo apt-get install mysql-server
关于如何在Ubuntu上配置MySQL的教程,这里给出以下链接:How To Install MySQL on Ubuntu 20.04 | DigitalOcean
文档搜索工具使用 Glimpse 或者 Swish-e,推荐使用 Glimpse
$ sudo apt-get install glimpse
除此之外,我们还需要安装Perl数据库接口 DBI 和 DBD 驱动,由于我们的数据库是MySQL所以这边安装的是libdbd-mysql-perl
$ sudo apt-get install libdbd-mysql-perl
以及Perl模块File::MMagic
$ sudo apt-get install libfile-mmagic-perl
服务器我们选择Apache2
$ sudo apt-get install apache2
由于lxr是使用Perl-script来生成页面,所以我们还需要安装mod_perl
$ sudo apt-get install libapache2-mod-perl2
下载lxr源码包,链接:LXR Cross Referencer download | SourceForge.net
此处下载的是lxr-2.3.6
如果你是浏览器下载的话,lxr源码包会默认下载到你的家目录的Downloads路径下,切换到源码包所在路径, 并且解压。(具体路径以您自身的下载路径以及版本为准)
$ cd ~/Downloads
$ tar -zxf lxr-2.3.6.tgz
接下来非常重要,请将您解压好的文件安装到 /usr/local/share路径下,并重命名文件夹为lxr,否则到时候配置完毕时你会发现403 Forbidden
注意:/usr/local/share/lxr 为您的lxr安装路径,下文以lxr安装路径指代。
$ sudo mv lxr-2.3.6 /usr/local/share/lxr
切换到/usr/local/share/lxr路径下,使用./genxref --checkonly命令对上一节所提到的工具进行检查
$ ./genxref --checkonly
不出意外的话您应该看到以下结果:(其中对应版本以您自身为准)
(此处图片引用的是官方文档中的图片)
注意:本小节命令都在 /usr/local/share/lxr 路径下使用
使用lxr安装路径中的 configure-lxr.pl 脚本来生成LXR以及其数据库的配置文件
$ ./scripts/configure-lxr.pl -vv
关于配置请参考官方文档,这里会提到一些比较重要的点
在配置glimpse database时请使用 /usr/local/share/glimpse_DB 路径,之后lxr会自动帮你生成该路径,如果您使用私有路径,既将glimpse_DB放置在家目录下,后面会报403,除非您能该路径有足够的权限让lxr访问到。
在配置您的源码路径时,请使用 /usr/local/share/linux-kernel-project 即你的项目路径。若使用私有路径后面会报403。
注意:该路径需要您到时候自行创建,并将Linux kernel源码放置在该目录下,在后文我会详细说明步骤。
在配置 Name to display for the path root?这一项时默认即可,以及version name中键入 v1。
在创建 /usr/local/share/linux-kernel-project 时,在该目录下需要再创建v1子目录,并将Linux kernel 源码放置在 /usr/local/share/linux-kernel-project/v1 目录下。
原因还请参考官方文档,
配置数据库
注意:此处 DB password最好改一下,原因取决于您之前配置MySQL的password strength等级,若当时您设置的等级较高,后面在创建数据库时可能会报错!
OK,至此LXR配置结束,接下来只需要生成数据库即可
$ ./custom.d/initdb.sh
注意:在MySQL环境下,需要多次设置数据库管理员密码。
最后拷贝 lxr.conf 至最终位置
$ sudo cp custom.d/lxr.conf .
下载Linux kernel源码,链接:Linux Kernel 官网
此处安装的是Linux-6.0,您可以根据自己需求下载对应版本。
在使用脚本填充数据之前,我们需要把Linux kernel 源码解压并放置在上节所提到的路径下。
即 /usr/local/share/linux-kernel-project/v1 下
$ sudo mkdir -vp /usr/local/share/linux-kernel-project/v1
将家目录中Downloads下的Linux kernel 源码解压并放置在刚才所创建的路径下,并重命名为6.0。
$ cd ~/Downloads
$ tar -zxvf linux-6.0-rc5.tar.gz
$ sudo mv linux-6.0-rc5 /usr/local/share/linux-kernel-project/v1/6.0
这样一来,我们的数据就准备充分了。
接下来我们得回到 lxr 安装路径并运行脚本(注意:此处需要权限运行该脚本,因为之前配置glimpse database时我们将其指定在 /usr/local/share 路径下)
$ cd /usr/local/share/lxr
$ sudo ./genxref --url=http://localhost/lxr --version=v1
该过程极度缓慢,大概需要2~3个小时才能搞定,但胜利就在眼前。
此处以Apache2为例。
首先我们需要将lxr生成的配置文件复制到Apache的配置目录 /etc/apache2/conf-available中,并启用该配置。
$ sudo cp custom.d/apache-lxrserver.conf /etc/apache2/conf-available
$ sudo a2enconf apache-lxrserver.conf
在重启Apache之前我们还需更改 /etc/apache2/conf-available/serve-cgi-bin.conf文件中的CGI配置,并启动cgi
$ sudo vi /etc/apache2/conf-available/serve-cgi-bin.conf
并将找到 ScriptAlias项,将其指定到您的lxr安装路径,(下图中红线标出的位置)
保存并退出后,启动cgi
$ sudo a2enmod cgi
根据官方文档我们还需开启mpm_worker
$ sudo a2dismod mpm*
$ sudo a2enmod mpm_worker
为了能使Perl script 工作我们还需要修改一下 /etc/anache2/site-enabled/000-default.conf 文件
$ sudo vi /etc/apache2/site-enabled/000-default.conf
复制以下代码到该文件中(其实就是添加 Directory中的所有代码到对应位置)
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
AddHandler perl-script .pl .cgi
PerlResponseHandler ModPerl::Registry
Options +ExecCGI +FollowSymLinks +MultiViews
PerlOptions +ParseHeaders
AllowOverride All
Order allow,deny
Allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
这样一来就万事俱备,只需重启Apache即可
$ sudo systemctl restart apache2
最终检查,在浏览器中输入 http://localhost/lxr/source 不出意外的话应该会出现以下内容
至此恭喜,配置成功!