от Boyan Kehayov(28-02-2007)

рейтинг (25)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Какво е това 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 >>