题外话:不知道是不是太久没有配置/部署软件的原因,上手配置LXR给我的体感比较不好,因此写下此博客记录该工具配置的过程
项目官网:zh/LXR 项目
参考教程1:史上最详细的LXR安装介绍_mosenyang的博客-CSDN博客_lxr 安装
参考教程2:Ubuntu 22.04.1 配置 LXR 阅读Linux kernel源码_Lader Ben的博客-CSDN博客
个人配置环境:Windows11+WSL2(Windows Subsystem for Linux) with Ubuntu 20.04
LXR是一个基于web页面的大规模源码阅读工具,其项目上的本质是一个web服务。对于一般的IDE而言,在服务于一般规模项目的情况下函数跳转等功能都能正常运行。但是当源码规模庞大时会存在效率低下、卡顿等情况。LXR以预先建立跳转索引+web展示的方式克服了这一问题,被认为是大规模源码阅读的利器。
LXR中存在几个关键概念:源码树、索引等,这些概念笔者暂时还没有完全搞清楚,后续会于本章节更新介绍。
总之,LXR为大规模源码阅读提供了便利,但是也存在一定的部署障碍,下面详细介绍个人的部署过程。
首先,官方给出了部署教程,参见这里。事实上正是因为在阅读官方教程时遇到了困难所以才有此文,如果有认为官方教程比较友好的dalao还望不吝赐教打开方式。
个人的整体部署流程分为如下步骤
接下来对各个步骤进行详细说明
对于Ubuntu而言,在安装环境前对源进行更新
sudo apt-get update
由官方文档可以得知,需要安装如下的几个环境模块
(待补充:perl解释器发挥的作用)
sudo apt-get install perl
(待补充:ctags发挥的作用)
需要注意的是,目前存在多个ctags的版本,包括universal-ctags、exuberant-ctags,如果安装universal-ctags,由于版本编号的原因会导致LXR检测到ctags版本为0.0.0不符合需求,issue在这里。因此,需要安装exuberant-ctags以适应版本号。
sudo apt-get install exuberant-ctags
MySQL在本项目中负责存储目录树中的具体数据,LXR将索引整理成了关系型数据,进行存储。
需要注意的是,Ubuntu20.04默认MySQL版本为8.0.x,官方文档并未提及支持,但是一些教程上提到了可以使用8版本。本文保险起见使用5.7.31版本,需要手动安装。查询得到的方法有换源法和deb文件,本文选取了deb文件进行安装(二进制文件是无敌的),参考链接在这里。
关键信息:deb文件下载、deb包管理、卸载已有MySQL
LXR终究还是web应用,需要通过web服务器进行发布,官方文档推荐了apache2配置mod_perl,本文采用此方案
sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2
在完成对apache对应模块的安装后,需要激活相关模块,否则后续会提示不支持perl。具体操作如下
sudo a2dismod mpm*
sudo apt-get install apache2-mpm-worker
sudo a2enmod version
sudo a2enmod mpm_worker
sudo a2enmod perl
以上操作完毕后进行验证,查看apache目前工作的组件,需要出现以上激活的三个关键组件即可
apache2ctl -M
Loaded Modules:
# something
version_module (static)
# something
mpm_prefork_module (shared)
# something
perl_module (shared)
# something
(Glimpse作用待补充)
sudo apt-get install glimpse
在以上的部件安装完毕后,我们需要安装一系列驱动,具体如下:
Perl数据库接口 DBI 和 DBD 驱动
sudo apt-get install libdbd-mysql-perl
Perl模块
sudo apt-get install libfile-mmagic-perl
环境配置部分就此结束
下载链接(2.3.6版本):https://sourceforge.net/projects/lxr/
将代码包解压到/usr/local/share路径下,重命名文件夹为lxr。这一步是必须的,否则在发布服务时会报403。
以上操作完成后,系统中应该存在/usr/local/share/lxr的路径,我们将此路径命名为工作路径,后续会经常提及。
在工作路径下,进行环境监测,运行如下的命令
./genxref --checkonly
检验结果可以参考这里,如果结果相同(版本号以自身为准)则为环境合格。
切换到工作路径,本部分的所有操作均在工作路径下
首先,使用工作路径下的给定脚本生成配置文件
./scripts/configure-lxr.pl -vv
具体的配置关键点参考这里的配置LXR和数据库部分(一定要看)与官方文档,我个人基本是一路默认选项过来的,在关键点参考了这篇教程。
如果不想跳转过去的话这里提出几个关键点
在以上的配置完成后,使用生成的脚本(无回滚保护,谨慎)生成数据库,这个步骤包括了创建用户、创建数据库等操作,输入的密码即为安装MySQL时指定的密码。
./custom.d/initdb.sh
同时,移动lxr.conf的位置,猜测这也是apache发布的关键
sudo cp custom.d/lxr.conf .
个人计划阅读MySQL源码,因此本文章以MySQL源码为例,在这里下载,选择Source Code,选择All Operating Systems (Generic) (Architecture Independent), Compressed TAR Archive。接下来使用此代码生成源码树。
首先,于MySQL官网获取待阅读的源码,将源码解压到包含版本号的子目录下,可以解压后重新命名代码文件夹。在源码放置完成后返回工作路径。
在工作路径下运行生成索引的脚本
sudo ./genxref --url=http://localhost/lxr --version=v1
等待脚本运行完成即完成了所有LXR本体配置以及源码数据层面的准备工作。
由于LXR本质上是一个web服务,需要通过服务器将LXR发布于主机的某个端口上以便于访问。
下面基于前文提到的apache2服务器进行进一步配置。
需要将LXR生成的配置文件导入apache的项目目录当中,并且启用该配置。在工作目录下进行如下配置:
sudo cp custom.d/apache-lxrserver.conf /etc/apache2/conf-available
sudo a2enconf apache-lxrserver.conf
这里需要注意:每次更新apache的配置之后,均需要对apache的环境变量进行更新,否则无法重启apache,会报配置未导入。更新的具体命令如下:
source /etc/apache2/envvars
除了导入LXR生成的配置文件外,还需要对apache本身的配置文件进行一些修改。
首先,对/etc/apache2/conf-available/serve-cgi-bin.conf文件中的CGI配置进行修改,添加下图中的配置后,启动cgi。修改主要集中于IfDefine标签当中。
sudo a2enmod cgi
最后,修改 /etc/apache2/site-enabled/000-default.conf 配置文件,添加发布路径。这里教程2的写法针对一些较为古老的apache版本(2.2),如使用2.4及以上版本需采用如下写法
AddHandler perl-script .pl .cgi
PerlResponseHandler ModPerl::Registry
Options +ExecCGI +FollowSymLinks +MultiViews
PerlOptions +ParseHeaders
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
在默认的VirtualHost标签下粘贴此内容即可。
在完成以上配置后,再次更新环境变量,后重启apache服务
sudo systemctl restart apache2
至此,如无端口冲突问题,则LXR的配置以及服务发布均已完成。
由于发布服务的过程均在WSL当中完成,配置完成后需要使用WSL启动浏览器进行访问,Windows机器是行不通的。需要将win下的浏览器与wsl建立软链接,每次启动时通过wsl下软连接打开的浏览器访问即可。以Windows edge浏览器为例:
sudo ln /mnt/c/Program\ Files\ \(x86\)/Microsoft/Edge/Application/msedge.exe msedge -s
通过msedge命令可以在wsl中打开浏览器,访问http://localhost/{user_name}/source即可看到刚刚配置的源码界面。大功告成!
以上为本篇配置攻略的全部内容,欢迎各位大佬交流!