LXR 개요
Linux Cross-Reference (LXR)는 Hypertext Cross-referencing Tool로서 Function declarations, Data(type) definitions 그리고 Preprocessor macros를 쉽게 찾아갈 수 있게 도와주므로 대규모 Source Code를 분석하는데 많은 도움을 준다. 본 문서는 LXR의 설치와 사용법에 대해 기술한다.
0. AWS 설치 - 우부투 설치
1. apache2 설치 및 환경설정
2. Perl과 Glimpse 설치 및 환경 설정
3. LXR 설치
4. 소스 설치
5. 메타 DB 생성
6. 사용
1. 설치위치
apache2 서버의 경로에서 확장하는 형식
/var/www/html/
2. LXR 설치 후 생성된 디렉토리
/var/www/html/lxr/bin
/var/www/html/lxr/http
/var/www/html/lxr/source
3. 설치할 소스 들
/var/www/html/lxr/source/[설치할 소스]
4. perl 설치 확인
# which perl
5. cgi 동작 여부 점검
a2enmod cgi
1. apache2 설치
웹서버 - CGI를 사용하는 웹서버
- 보통 아파치를 사용한다. 이를 위해서 우부투를 설치하여 사용한다.
- LXR이 설치 될 수 있는 환경은 CGI를 사용하는 웹서버 웹서버이다.
- CGI를 통하여 웹에서 리눅스의 서치 명령어를 바로 실행하는 구조를 가지고 있다.
# apt-get install apache2
/var/www/html/ 이 서버의 root 임
2. glimpse 설치
free text search를 위한 메타데이터 생성 및 활용에 사용됨
# cd /usr/local/share/
# wget http://webglimpse.net/trial/glimpse-latest.tar.gz
# tar xvfz glimpse-latest.tar.gz
# cd glimpse-4.18.6/
# ./configure; ./make; sudo make install
설치가 완료가 되면
/usr/local/bin/에 결과물 설치가 됨
glimpse glimpseindex glimpseserver
3. lxr 설치
LXR을 설치한다.
---------------------------------------------------------------------------------
XLR이 설치될 위치로 이동
# cd /usr/local/share/
---------------------------------------------------------------------------------
LXR을 다운로드 한다. apt-get나 wget을 통하여 다운로드 받을 수 있다.
wget을 권장함
# wget http://downloads.sourceforge.net/project/lxr/old/lxr-0.3.1/lxr-0.3.1.tar.gz
---------------------------------------------------------------------------------
압축을 풀고 XLR을 컴파일한다.
컴파일이 완료가 되면 /var/www/html/lxr/ 디렉토리에 bin, http, source 3개의 디렉토리가 생성이 된다.
# tar xvfz lxr-0.3.1.tar.gz
# cd lxr-0.3
# vi Makefile <---- perl의 위치와 생성될 디렉토리 지정
...... PERBIN=/usr/bin/perl <----- PERLBIN은 perl 실행파일이 인스톨되어 있는 위치 ...... INSTALLPREFIX=/var/www/html/lxr <---- LXR이 인스톨될 디렉토리
#sudo make install
#cd /var/www/html/lxr/
# ll
total 20
drwxr-xr-x 5 root root 4096 Oct 8 05:35 ./
drwxr-xr-x 3 root root 4096 Oct 8 05:35 ../
drwxr-xr-x 2 root root 4096 Oct 8 05:35 bin/ <------
drwxr-xr-x 3 root root 4096 Oct 8 05:35 http/ <------
drwxr-xr-x 2 root root 4096 Oct 8 05:35 source/ <------
4. lxr 환경 설정
1. lxr/http/lxr.conf 파일 수정
위치 : /var/www/html/
1-1. lxr/http/lxr.conf 파일의 다음 부분을 수정
# Define typed variable "v", read valueset from file.
variable: v, Version, [/var/www/html/lxr/source/versions], [/var/www/html/local/lxr/source/defversion]
# Define the base url for the LXR files.
baseurl: http://192.168.10.120/lxr/http/ <---- 홈페이지 주소 에서 /lxr/http/추가
# These are the templates for the HTML heading, directory listing and
# footer, respectively.
htmlhead: /var/www/html/lxr/http/template-head
htmltail: /var/www/html/lxr/http/template-tail
htmldir: /var/www/html/lxr/http/template-dir
# The source is here.
sourceroot: /var/www/html/lxr/source/$v/linux/ <---- 웹서버의 위치에서 버젼별로 소스를 관리한다.
srcrootname: $v <---- /var/www/html - 웹서버의 위치
<---- /lxr/source/ - 소스의 위치
<---- 2.6.15 - 버젼별 소스의 위치
# The database files go here.
dbdir: /var/www/html/lxr/source/$v/ <---- 메타데이터가 생성되는 위치
# Glimpse can be found here.
glimpsebin: /usr/local/bin/glimpse <----- glimpse의 위치
1-2. lxr/http/lxr.conf 파일
# Configuration file. # Define typed variable "v", read valueset from file. variable: v, Version, [/var/www/html/lxr/source/versions], [/var/www/html/local/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. baseurl: http://192.168.10.120/lxr/http/ # These are the templates for the HTML heading, directory listing and # footer, respectively. htmlhead: /var/www/html/lxr/http/template-head htmltail: /var/www/html/lxr/http/template-tail htmldir: /var/www/html/lxr/http/template-dir # The source is here. sourceroot: /var/www/html/lxr/source/$v/linux/ srcrootname: $v # "#include <foo.h>" is mapped to this directory (in the LXR source # tree) incprefix: /include # The database files go here. dbdir: /var/www/html/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/
2. .haccess 파일생성 및 에디트
위치 : /var/www/html/lxr/http/
# cd /var/www/html/lxr/http
# vi .htaccess
<Files ~ (search|source|ident|diff|find)$> SetHandler cgi-script </Files>
3. apache 환경 설정
# cd /etc/apache2
# vi apache2.conf
Alias /lxr /var/www/html/lxr <Directory /var/www/html/lxr> Options All AllowOverride All </Directory>
# vi /etc/apache2/conf-enabled/apache-lxrserver.conf <------- 찾아뵈도 없으므로 생략
- You don't have permission to access /lxr on this server. 이라는 에러가 있는 경우
#Alias /lxr "/home/ubuntu/lxr" Alias /lxr "/var/www/html/lxr" <---- 확인
4. 한글을 작성시 인코딩 설정 - 생략해도 됨
/usr/share/lxr/http/template-head 파일에 meta 정보를 추가
<base href=”$baseurl”>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″ />
< /head>
5. 소스가 있을 디렉토리 생성
# cd /var/www/html/lxr/source/
# mkdir 2.6.15/linux <------- 복사를 하는 경우 linux 디렉토리에 복사한다.
# mkdir 2.6.15 <------- soft link인 경우 linux 디렉토리를 만들지 않는다.
- 2.6.15는 version에 해당한다.
6. 버젼생성
# cd /var/www/html/lxr/source/
# sudo echo '2.6.15' >> ./versions
# sudo echo '2.6.15' >> ./defversion
versions 라는 파일을 만들고 내용을 2.6.15로 채운다.
defversion 라는 파일을 만들고 내용을 2.6.15로 채운다.
7. 소스 추가
소스 추가할 경우에 파일의 권한을 봐야 한다.
[path]/lxr/source/[source이름]/[soft link] 에 소스를 추가 함
# cd /var/www/html/lxr/source/[version] -----> cd /var/www/html/lxr/source/2.6.15
# ln -sf /home/dgfw/n32926sdk_park/ linux
소프트링크를 거는 것이 효율적임
메타 DB만 생성하면됨
8. 메타 DB 생성
1. lxr database 생성
# cd /var/www/html/lxr/source/[version]/ ---> cd /var/www/html/lxr/source/2.6.15/
# ../../bin/genxref [softlink] ---> ../../bin/genxref ./linux
2. glimpse 인덱스 생성
# cd /var/www/html/lxr/source/[version]/ ---> cd /var/www/html/lxr/source/2.6.15/
# glimpseindex -H . [softlink] ---> glimpseindex -H . linux
최종
glimpseindex -H . ./linux/ <-소스의 path가 맞지않아서 엉뚱하게 연결이 된다. soft link가 path가 아니 원래 path가 설치됨
한번 더 수정함
glimpseindex -H . /var/www/html/lxr/source/2.6.15/linux <- soft link의 전체 path를 걸어준다.
3. 해당 파일 permission 변경
# chmod 644 .glimpse* fileidx xref
종종 permission이 잘못 생성되는 경우가 있어, browsing이 안되기도 함
이런 경우 ‘chmod 644 fileidx’와 같이 변경해주면 됨
=======================================================
=======================================================
4. 수정이 필요한 경우
생성된 메타 데이터 지우기
rm -rf fileidx xref .glimpse_*
- 다시 메타데이터 생성함
9. 아파치 재실행
1. apach 재시작
# a2enmod cgi
# /etc/init.d/apache2 restart
# service apache2 restart
10. 소스 업그레이드에 따른 DB 업데이트 절차
217 rm -rf linux
218 ls
219 ln -sf /home/dgfw/n32926sdk_park/source/source/ linux
220 ls
221 rm -rf fileidx xref .glimpse_*
222 ls
223 ../../bin/genxref linux
224 glimpseindex -H . /var/www/html/lxr/source/2.6.15/linux
225 chmod 644 .glimpse_* fileidx xref
226 a2enmod cgi
227 service apache2 restart
228 rm -rf linux
229 ln -sf /home/dgfw/n32926sdk_park/source/source/plugins/ linux
230 ls
231 rm -rf fileidx xref .glimpse_*
232 ../../bin/genxref linux
233 glimpseindex -H . /var/www/html/lxr/source/2.6.15/linux
234 chmod 644 .glimpse_* fileidx xref
235 a2enmod cgi
236 service apache2 restart
237 history
root@ubuntu:/var/www/html/lxr/source/2.6.15#
You don't have permission to access on this server. 가 있는 경우
root@ip-172-31-1-18:/var/www/html/lxr/source/2.6.15# vi /etc/apache2/conf-enabled/apache-lxrserver.conf
root@ip-172-31-1-18:/var/www/html/lxr/source/2.6.15# vi /etc/apache2/apache2.conf
root@ip-172-31-1-18:/var/www/html/lxr/source/2.6.15# service apache2 restart
# vi /etc/apache2/conf-enabled/apache-lxrserver.conf
--------------------------------------------------------------------------------------
#Alias /lxr "/home/ubuntu/lxr"
Alias /lxr "/var/www/html/lxr" <---- 확인
---------------------------------------------------------------------------------------
추가 작업
blurb.html를 index.html로 카피한다.
/var/www/html/lxr/http# cp blurb.html index.html