LINUX-BG   Адрес : http://www.linux-bg.org
Ръководство за LXR
От: Boyan Kehayov
Публикувана на: 28-02-2007
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=programs&key=390892164
Какво е това LXR?
Това е програма (набор от скриптове) написана на Perl за показване на сорсове през уеб.
Има възможности за търсене на функции, файлове и произволен текст. Всичко резултати се
показва като линкове и след това може да ги разгледате в любимия си браузър.
Може да сложите произволен брой програми и техните версии.

Използва се стабилната версия на lxr-0.3.1, която може да свалите от тук:
http://sourceforge.net/projects/lxr

Сваляме си сорса и по традиция го слагаме в /usr/src/lxr-0.3.1.tar.gz.

За да проработи LXR се нуждаем още от:

- Perl версия 5 или по-нова.
- Уеб сървър с cgi-script поддръжда.

и като допълнение, за да имаме търсене на произволен текст:

- Glimpse от http://glimpse.cs.arizona.edu, което е безплатно за не комерсиална употреба.

Забележка: В новата версия се използва GPL програма за произволното търсене.

Разархивираме и влизаме с директорията със сорса:

# tar -xzvf lxr-0.3.1.tar.gz
# cd lxr-0.3

Както пише в INSTALL файла, трябва да редактираме Makefile като променим следните 2 реда
от него

# Makefile for installation and configuration of LXR

# The location of your perl5 binary
# Път до пърл интерпретатора, който си е там в повечето дистрибуции
PERLBIN=/usr/bin/perl  
# LXR will be installed here
# Място, където искаме да инсталираме LXR
# В нашия случай това е /var/www/lxr
INSTALLPREFIX=/var/www/lxr

След това инсталираме програмата.

# make install

Отиваме в директорията, която сме задали и Makefile.

# cd /var/www/lxr
# ls
bin  http  source
#

В bin е скриптът за индексиране.
В http са скриптовете и конфигурационните файлове, а source е папката, която
се използва за данните от индексирането и сорсовете (ако искате да ги сложите там).

Трябва да се направи файл, който указва Apache да изпълнява скриптовете,
а не да ги показва като текст.

#cd http
#touch .htaccess

Редактираме файла с любимия текстов редактор и записваме вътре:

<Files ~ (search|source|ident|diff|find)$>
SetHandler cgi-script
</Files>

За моите нужди аз съм разархивирал сорсовере на две версии на виртуализатора xen в

/home/user1/xen_3.0.x/xen-3.0.3_0-src  и  /home/user1/xen_3.0.x/xen-3.0.4_1-src

Създавам два файла и две директории в /var/www/lxr/source

# cd ../source
# touch versions
# touch defversion
# mkdir xen-3.0.3_0-src
# mkdir xen-3.0.4_1-src

Във versions записваме всички версии или програми, които искаме да индексираме.
Всяка е на отделен ред.
Ето моите:

# cat versions
xen-3.0.3_0-src
xen-3.0.4_1-src

Във defversion записваме версията, която искаме да се показва по подразбиране
при извикване на LXR.

# cat defversion
xen-3.0.3_0-src

Забележка: Ако имате подчертаващо тире в имената на директориите или други символи
различни от [a-z],[A-Z],[0-9] "." "-" трябва да направите
малка промяна в един от скриптовете на програмата:

# cd ../http/lib/LXR/
# vim Config.pm    

Намирате частта:

sub varexpand {
   my ($self, $exp) = @_;
   $exp =~ s{${?(w+)}?}{
      $self->{variable}->{$1} =~ /^([a-zA-Z0-9.-_]*)$/ ? $1 : ''
      }ge;
   return($exp);
}

и променяте [a-zA-Z0-9.-] на [a-zA-Z0-9.-_], за да се добави подчертаващото тире.
Може да добавите и други символи, които използвате при именуването на вашите програми
ако ги няма в описаните по горе по аналогичен начин.

Директориите използвам, за да съхранявам в тях индекснте файлове, създадени от
/var/www/lxr/bin/genxref  скриптът и тези от glimpseindex програмата.
Ако са в общата директория се получава препокриване от различните индексирания и
остава валиден само последно индексираният сорс.

Следващата стъпка е да редактираме конфигурационния файл lxr.conf

Ето как изглежда моят:

# cat /var/www/lxr/http/lxr.conf
# Configuration file.

# Define typed variable "v", read valueset from file.

# v се чете от файла versions, който създадохме в директорията source,
# и приема стойностите за различните версии
# defversion е файл, отново създаден от нас в директорията source и съдържа версията,
# която да се показва при първото извикване на програмата.
# Може да се види на http://lxr.linux.no/source/ , че версията по подразбиране е 2.6.17.13
variable: v, Version, [/var/www/lxr/source/versions], [/var/www/lxr/source/defversion]

# Define typed variable "a".  First value is default.
variable: a, Architecture, (i386, alpha, m68k, mips, ppc, sparc, sparc64)

# Define the base url for the LXR files.
# Тук трябва да зададем пътя до папката http след главната папка на Apache
# В www (DocumentRoot на Апача)ние имаме /lxr/http и редактираме
baseurl: http://81.161.245.2/lxr/http/

# These are the templates for the HTML heading, directory listing and
# footer, respectively.
htmlhead: /var/www/lxr/http/template-head
htmltail: /var/www/lxr/http/template-tail
htmldir:  /var/www/lxr/http/template-dir

# The source is here.
# Това е папката със сорсовете. Може да си зададем която и да,
# но да имаме права за четене и влизане в папките т.е x-r  
# Променливата $v приема стойностите описани в versions файла
sourceroot: /home/user1/xen_3.0.x/$v/
# Задаваме произволно име
srcrootname: xensource

# "#include <foo.h>" is mapped to this directory (in the LXR source
# tree)
# път до основните библиотеки
incprefix: /usr/include

# The database files go here.
# Директорията за индексните файлове.
#Променливата $v приема стойностите описани в versions файла
# и така за всяка версия са в различна директория.
dbdir: /var/www/lxr/source/$v/

# Glimpse can be found here.
glimpsebin: /usr/local/bin/glimpse

# The power of regexps.  This is pretty Linux-specific, but quite
# useful.  Tinker with it and see what it does.  (How's that for
# documentation?)
map: /include/asm[^/]*/ /include/asm-$a/
map: /arch/[^/]+/ /arch/$a/

Следващата стъпка е да индексираме сорсовете.
Това става чрез използване на скрипра в /var/www/lxr/bin/genxref и
glimpseindex.

# cd /var/www/lxr/source/xen-3.0.3_0-src
# /var/www/lxr/bin/genxref /home/user1/xen_3.0.x/xen-3.0.3_0-src/

Тук времето за чакане е право пропорционално на големината на сорса
и обратно пропорционално на изчислителната мощ, с която разполагате :)

# glimpseindex -H . /home/user1/xen_3.0.x/xen-3.0.3_0-src/
# cd ../xen-3.0.4_1-src
# /var/www/lxr/bin/genxref /home/user1/xen_3.0.x/xen-3.0.4_1-src/
# glimpseindex -H . /home/user1/xen_3.0.x/xen-3.0.4_1-src/

Забележка: При извикването на genxref използвайте пълния (абсолютния) път,
а не ../../bin/genxref. Ако направите второто при опит да търсите нещо ще
получите съобщение от вида:

"Can't find xref file in .../source/xen-3.0.3_0-src///xref",

което при проведените опити не се случва при първия начин на викане на
genxref. Явно някъде се използва PWD или подобна команда на Perl, и резултатът
е различен при викане от различни директории. Това могат да кажат хората, които
знаят Perl.

Последното нещо, което трябва да направите е да дадете права на Apache върху
създадените директории и фаиллове:

# cd /var/www/
# chown -R www-data:www-data lxr/

След това остава да отворите любимия си браузър и да напишете:

http://localhost/lxr/http

Успех !

Използвани документи:
1. http://mia.ece.uic.edu/~papers/WWW/lxr....
2. http://lxr.linux.no/New-INSTALL



<< Превод на Потребителско ръководство за Wine | Делегиране на access политики в Postfix >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.15 usr + 0.03 sys = 0.18 CPU)