WSL下源码阅读工具LXR(Linux Cross-Referencer)的配置

题外话:不知道是不是太久没有配置/部署软件的原因,上手配置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

0. LXR简介与个人理解(持续更新)

LXR是一个基于web页面的大规模源码阅读工具,其项目上的本质是一个web服务。对于一般的IDE而言,在服务于一般规模项目的情况下函数跳转等功能都能正常运行。但是当源码规模庞大时会存在效率低下、卡顿等情况。LXR以预先建立跳转索引+web展示的方式克服了这一问题,被认为是大规模源码阅读的利器。

LXR中存在几个关键概念:源码树、索引等,这些概念笔者暂时还没有完全搞清楚,后续会于本章节更新介绍。

总之,LXR为大规模源码阅读提供了便利,但是也存在一定的部署障碍,下面详细介绍个人的部署过程。

1. 部署概览

首先,官方给出了部署教程,参见这里。事实上正是因为在阅读官方教程时遇到了困难所以才有此文,如果有认为官方教程比较友好的dalao还望不吝赐教打开方式。

个人的整体部署流程分为如下步骤

  1. 环境配置
  2. LXR源码包安装
  3. 数据库与初始化源码树配置
  4. 数据库填充(索引数据生成)
  5. apache服务器配置

接下来对各个步骤进行详细说明

2. 环境配置

对于Ubuntu而言,在安装环境前对源进行更新

sudo apt-get update

由官方文档可以得知,需要安装如下的几个环境模块

2.1 Perl解释器

(待补充:perl解释器发挥的作用)

sudo apt-get install perl

2.2 ctags

(待补充:ctags发挥的作用)

需要注意的是,目前存在多个ctags的版本,包括universal-ctags、exuberant-ctags,如果安装universal-ctags,由于版本编号的原因会导致LXR检测到ctags版本为0.0.0不符合需求,issue在这里。因此,需要安装exuberant-ctags以适应版本号。

sudo apt-get install exuberant-ctags

2.3 关系型数据库(MySQL)

MySQL在本项目中负责存储目录树中的具体数据,LXR将索引整理成了关系型数据,进行存储。

需要注意的是,Ubuntu20.04默认MySQL版本为8.0.x,官方文档并未提及支持,但是一些教程上提到了可以使用8版本。本文保险起见使用5.7.31版本,需要手动安装。查询得到的方法有换源法和deb文件,本文选取了deb文件进行安装(二进制文件是无敌的),参考链接在这里。

关键信息:deb文件下载、deb包管理、卸载已有MySQL

2.4 Web服务器

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

2.5 文本搜索工具Glimpse

(Glimpse作用待补充)

sudo apt-get install glimpse

2.6 驱动

在以上的部件安装完毕后,我们需要安装一系列驱动,具体如下:

Perl数据库接口 DBI 和 DBD 驱动

sudo apt-get install libdbd-mysql-perl

Perl模块

sudo apt-get install libfile-mmagic-perl

环境配置部分就此结束

3. LXR源码包安装

下载链接(2.3.6版本):https://sourceforge.net/projects/lxr/

将代码包解压到/usr/local/share路径下,重命名文件夹为lxr。这一步是必须的,否则在发布服务时会报403。

以上操作完成后,系统中应该存在/usr/local/share/lxr的路径,我们将此路径命名为工作路径,后续会经常提及。

在工作路径下,进行环境监测,运行如下的命令

./genxref --checkonly

检验结果可以参考这里,如果结果相同(版本号以自身为准)则为环境合格。

4. 数据库与初始化源码树配置

切换到工作路径,本部分的所有操作均在工作路径下

首先,使用工作路径下的给定脚本生成配置文件

./scripts/configure-lxr.pl -vv 

具体的配置关键点参考这里的配置LXR和数据库部分(一定要看)与官方文档,我个人基本是一路默认选项过来的,在关键点参考了这篇教程。

如果不想跳转过去的话这里提出几个关键点

  1. 配置源码路径时既定要将源码置于`/usr/local/share/`目录下的文件夹中,由于本质上lxr是一个发布服务,因此必须保证其对发布的资源有访问权限
  2. 配置过程中会遇到版本号选项,推荐填入v1等,则后续在解压代码时需要对对应的版本号创建子目录。具体的源码放置位置需要位于包含版本号的子目录之下
  3. 数据库命名不要和系统已有数据库重名(说的就是你,mysql,很容易被顺手写上去的那个),否则脚本会无情地删掉信息,无法回滚导致需要重装数据库,十分麻烦。

在以上的配置完成后,使用生成的脚本(无回滚保护,谨慎)生成数据库,这个步骤包括了创建用户、创建数据库等操作,输入的密码即为安装MySQL时指定的密码。

./custom.d/initdb.sh

同时,移动lxr.conf的位置,猜测这也是apache发布的关键

sudo cp custom.d/lxr.conf .

5. 数据库填充

个人计划阅读MySQL源码,因此本文章以MySQL源码为例,在这里下载,选择Source Code,选择All Operating Systems (Generic) (Architecture Independent), Compressed TAR Archive。接下来使用此代码生成源码树。

首先,于MySQL官网获取待阅读的源码,将源码解压到包含版本号的子目录下,可以解压后重新命名代码文件夹。在源码放置完成后返回工作路径。

在工作路径下运行生成索引的脚本

sudo ./genxref --url=http://localhost/lxr --version=v1

等待脚本运行完成即完成了所有LXR本体配置以及源码数据层面的准备工作。

6. apache服务器配置

由于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标签当中。

WSL下源码阅读工具LXR(Linux Cross-Referencer)的配置_第1张图片

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的配置以及服务发布均已完成。

 Appendix

由于发布服务的过程均在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即可看到刚刚配置的源码界面。大功告成!

WSL下源码阅读工具LXR(Linux Cross-Referencer)的配置_第2张图片

以上为本篇配置攻略的全部内容,欢迎各位大佬交流!

你可能感兴趣的:(linux,源码软件,编辑器)