LXR은 범용적으로 쓸 수 있는 소스 분석 도구로 소스코드의 함수, 변수 등을 인덱스로 만들어 웹을 통해 검색할 수 도구입니다. LXR은 Linux Cross-Referencer라는 이름이지만 범용적으로 사용이 가능합니다.
리눅스 커널을 분석할 때 주로 사용하는 사이트인 http://lxr.linux.no/ 도 LXR을 기반으로 만들어 졌습니다. 리눅스 커널 소스는 잘 검색해 보시면 나오겠지만 우리가 원하는 소스를 추가할 수 있는 환경은 아닙니다. 이번 시간에는 LXR를 이용하여 우리가 원하는 소스 분석할 수 있는 환경을 만들어 보겠습니다.
사전 준비 사항
제가 LXR을 설치할 환경은 Ubuntu 14.04를 기반으로 LXR 2.1.0 버전을 설치할 예정입니다. LXR이 동작하기 위해서는 Perl, exuberant ctags, 데이터베이스, 웹서버, Glimpes 또는 Swish-e, Perl DBI 및 DBD 모듈, Perl File::MMagic 모듈이 필요합니다.
추가적으로 LXR을 시스템 전체가 통합되어 사용할 것인지, 독립적으로 사용할 것인지에 대해 정해야 합니다. 저는 편의상 독립적으로 구성 하였습니다.
사전 준비 사항: Perl 설치 및 버전 확인
이 글을 작성하는 시점에서 LXR의 최신 버전은 LXR 2.1.0입니다. 이 버전에서는 Perl 5.10이상의 버전을 요구하고 있습니다. 만약 5.10 이상으로 업그레이드가 불가능할 때는 LXR 0.11.1를 설치하기를 공식 매뉴얼에서 권하고 있습니다.
LXR 0.11.1은 Perl 5.10 이하와 호환되는 마지막 버전으로 최신 LXR에서 지원하는 기능을 사용하지 못한다고 설치 매뉴얼에서 밝히고 있습니다. 다행이 제가 사용하는 Ubuntu 14.04 에서는 그 이상의 버전을 사용하여 최신 버전을 사용할 수 있습니다.
Perl의 버전 확인은 아래명령을 통해 할 수 있습니다.
# perl -v
만약 잘 설치 되었다면 다음과 같은 문자열을 볼 수 있습니다.
# This is perl 5, version 18, subversion 2 (v5.18.2)
같은 문자열을 확인할 수 있습니다.
사전 준비 사항: exuberant ctags 설치 및 버전확인
두번째로 해야할 것은 ctags를 설치하는 일입니다. LXR 공식 문서에는 ctags의 요구사항을 따로 밝히고 있진 않지만 ctags 5 이상을 사용하라고 되어 있습니다.
Ctags 가 설치 되어 있는지 확인은
# ctags --version 명령을 통해 확인할 수 있고, 만약 ctags가 설치 되어 있다면
# Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert 같은 문구를 볼 수 있습니다. 만약 ctags 가 설치되어있지 않은 환경이라면 Ubuntu 14.04를 기준으로
# sudo apt-get install exuberant-ctags 명령을 통해 설치할 수 있습니다.
사전 준비 사항: 데이터베이스 설치
그 다음 LXR에서 필요한 것은 관계형 데이터베이스입니다. LXR의 최신 버전은 관계형 데이터베이스에 일부 정보를 저장하고 있습니다. LXR에서 사용 가능한 데이터베이스는 MariaDB, MySQL 4.x/5.x, Oracle, PostgreSQL, SQLite을 지원한다고 공식 문서에서 밝히고 있습니다.
저는 편의상 Mysql과 호환이 되는 MariaDB를 사용해서 설치를 진행 합니다. Ubuntu 14.04 저장소에서는 MariaDB는 5.5 버전을 제공하고 있습니다. <
# sudo apt-get install mariadb-server 명령을 통해 설치가 가능합니다. 설치 과정 중 데이터베이스의 root 사용자 암호를 입력하는 과정이 있습니다. 암호를 꼭 기억하도록 합시다!
설치가 완료 되면
# mysql_secure_installation 명령을 통해 기본적인 환경 설정을 하도록 합니다. 이 툴은 보안에 관련된 가장 기본적인 설정을 하는 툴로 데이터베이스 root 사용자의 암호를 설정했는지, test 사용자 및 데이터베이스삭제같은 기본적인 보안 설정을 수행합니다. 스크립트에서 하자고 하는데로 진행해도 큰 무리가 없습니다.
그 다음 LXR를 위한 사용자와 데이터베이스를 만듭니다. 우선 데이터베이스의 root 사용자로 로그인 합니다.
# mysql -u root -p 를 입력하여 root 사용자로 데이터베이스에 접속한 다음, 생성할 데이터베이스의 이름을 설정합니다. 편의상 데이터베이스 이름을 lxr_project로 설정하고, 데이터베이스 사용자 이름과 암호를 지정해야하는데 편의상 lxr 과 lxrpw 로 합니다. 사용자는 로컬에서만 접속하도록 설정합니다. 데이터베이스의 생성하는 SQL문은 create database lxr_project; 이고, 사용자 생성은 create user 'lxr'@'localhost' identified by 'lxrpw';을 통해 생성합니다. 그 다음 생성한 데이터베이스에 접근 권한을 설정하기 위해 grant all privileges on lxr_project.* to lxr@localhost; 를 실행합니다. 마지막으로 권한을 적용하기 위해 flush privileges; SQL문을 내려 주면 데이터베이스 설정이 완료 됩니다.
사전 준비 사항: 웹 서버 설치
LXR은 웹을 통해 소스를 보여주는 도구 입니다. 따라서 웹 서버가 반드시 준비 되어 있어야 합니다. LXR에서는 다양한 웹 서버를 사용할 수 있는데, 사용할 버전에서는 Apache httpd, lighttpd, Cherokee, Nginx, thttpd를 지원하고 있습니다. 저는 편의상 Apache httpd를 사용하겠습니다.
Apache httpd 설치는 아래와 같은 명령으로 할 수 있습니다.
# sudo apt-get install apache2 그리고 나서 LXR이 Perl을 기반으로 동작하기 때문에 Apach httpd와 Perl을 연결해 주는 mod_perl 모듈을 설치해야 합니다. mod_perl의 설치는 아래 명령을 통해 할 수 있습니다.
# sudo apt-get install libapache2-mod-perl2 원래 Apache httpd에서 모듈을 설치하면 설정파일의 수정이 필요하지만 제가 사용하는 환경에서는 그럴 필요가 없었습니다.
문자열 검색 기능을 위한 Glimpse 설치
Glimpse는 LXR에서 문자열의 검색기능을 위해 사용하는 라이브러리 입니다. LXR에서 문자열 검색을 하기 위해서는 Glimpse 또는 Swish-e를 사용해야 합니다. 공식문서에서는 Glimpse가 유용한 정보를 더 많이 제공하는 이유로 개발자들이 선호한다고 합니다. 저도 편의상 Glimpse를 이용하려고 합니다.
Glimpse는 라이선스 문제로 인해 Ubuntu 저장소에서 받아 사용할 수 없어 수동으로 컴파일해서 설치해야 합니다. Glimpse를 다운 받을 수있는 경로는 다음과 같습니다.
http://webglimpse.net/trial/glimpse-latest.tar.gz
Glimpse를 다운받은 다음,
# tar xzf ./glimpse-latest.tar.gz 를 통해 압출을 풀고, 다음 해당 디렉토리에 들어가서 일반적으로 컴파일 설치 과정과 동일하게
# ./configure; make; make install 을 실행하고 오류가 나는 부분은 찾아서 해결하면 됩니다.
저의 경우 Glimpse를 설치하다 보니 추가적으로 flex를 요구해서
# sudo apt-get install flex 를 통해 설치하고 진행 하였습니다.
사전 준비 사항: Perl DBI 및 File::MMagic 모듈 설치 Perl DBI 및 File::MMagic 모듈은 LXR에서 사용하는 Perl 모듈입니다. DBI는 데이터베이스를 위한 인터페이스이고 File::MMagic은 Perl에서 파일의 타입을 찾기위해 사용하는 라이브러리 입니다. Ubuntu의 경우 Perl모듈을 패키지로 제공하고 있습니다.
각 모듈의 설치는
# sudo apt-get install libdbd-mysql-perl libfile-mmagic-perl명령을 통해 설치할 수 있습니다.
LXR 설치
지금까지 LXR을 설치하기 위해 필요한 사항의 준비가 끝났습니다. 지금부터는 LXR의 설치를 본격적으로 시작해 보겠습니다. LXR을 설치할 때 특별히 어렵거나 컴파일해야하는 과정은 없지만 LXR로 인덱스를 만드는 소스에 따라 시간이 오래 걸릴 수 있습니다.
가장 난해한 부분이 설정 부분인데 대부분의 설정 과정이 자동화 되어 많이 편해졌습니다. 우선 설치를 진행하기 앞서 LXR을 사용자마다 독립적으로 동작하도록 할 것인지, 시스템 전체로 서비스를 할 것인지에 대해 정해야 합니다. 저는 편의상 사용자 마다 독립적으로 동작하도록 설정을 할 예정입니다.
LXR 설치: 디렉토리 지정
저는 사용자 마다 독립적으로 LXR을 동작하도록 설정을 할 예정입니다. 따라서 LXR이 동작하는 디렉토리는 제가 사용하는 사용자의 홈 디렉토리에 설치할 것입니다. 따라서 앞으로 문서에서 언급하는 LXR 루트 디렉토리의 경로는 ~/lxr/. 가 됩니다.
우선 LXR의 소스를 받아 옵니다. 소스는 https://sourceforge.net/projects/lxr/files/stable/ 에 접속해서 받아올 수 있습니다. 다운 받은 파일의 압축을 풀고 LXR 루트 디렉토리(~/lxr/. )로 이동 합니다. 명령은
mv ./lxr-2.1.0 ~/lxr 와 같습니다. 그 다음 LXR 루트 디렉토리로 이동(cd ~/lxr/)합니다. LXR의 루트 디렉토리에서 LXR에서 필요한 모듈이나 라이브러리의 요구사항이 맞는 지를 다음 명령을 통해 확인합니다.
# ./genxref --checkonly
이때 메시지는 http://lxr.sourceforge.net/en/1-0-InstallSteps/1-0-install2LXR.php? 하단에 있는 메시지와 같은지 확인해 보고 빠진 것이 없는지 마지막으로 확인합니다.
LXR 설치: LXR 설정 스크립드 동작
앞 단계에서 필요한 모듈이나 라이브러리 체크가 완료 되었다면, LXR을 동작하기 위한 설정 스크립트를 작성해야 합니다. 다행이 LXR내부에 설정을 돕기 위한 스크립트가 있어서 이것을 이용해 설정을 진행합니다. 스크립트의 사용 방법은 http://lxr.sourceforge.net/en/1-0-InstallSteps/1-0-install3config.php? 를 참고하면 됩니다.
본 문서는 LXR 공식 문서와 동일하게 simple project tree로 구성합니다. simple tree는 여러 개의 소스 버전을 모두 포함하지 않는 형태로 설정이 됩니다. LXR 설정 스크립트는 아래 명령을 통해 실행 합니다.
# ./scripts/configure-lxr.pl -vv
저는 대부분 디폴트 설정으로 하고 몇가지 항목에 대해서만 추가로 입력하였습니다. 추가로 입력한 항목은 다음과 같습니다.
-
LXR server: lxr
-
Directory for glimpse databases: ~/lxr/glipse
-
Source directory: ~/lxr/lxr_src/Samples
-
Database name: lxr_project
-
DB user name: lxr
-
DB password: lxrpw
-
DB table prefix: lxr_
설정이 끝나면 마지막으로 아래 명령을 실행하여 데이터베이스의 설정을 완료 합니다.
# ./custom.d/initdb.sh
그 다음 아래 명령을 통해 완성된 lxr 설정파일을 LXR 루트 디렉토리에 복사하고 소스 인덱싱 작업에 들어갑니다.
# mv custom.d/lxr.conf .
LXR 설치: 소스 인덱싱
앞단계에서 만들어진 lxr.conf 설정파일을 기반으로 소스에 포함되어 있는 변수나 함수를 인덱싱하고, 웹서버에서 필요한 환경 변수를 세팅하는 단계로 대부분이 자동으로 진행 됩니다. 인덱싱을 하는 명령은 아래와 같습니다.
# ./genxref --url=http://localhost/lxr --allversions
이때 주의해야할 점은 설정 스크립트에 입력한 주소와 LXR 서버 경로가 그대로 입력해야 하는데 만약 다르면 오류가 발생합니다. 인덱싱은 시간이 꽤 걸리는 작업으로 약 100MB 정도 되는 소스를 기준으로 2시간 정도 걸렸습니다.
LXR 설치: Apache Httpd설정
드디어 마지막 단계 입니다. 인덱싱이 완료 되면 Apache 서버를 위한 설정 파일이 완성 됩니다. 이 부분은 리눅스 배포판 마다 큰 차이가 있습니다. 저는 Ubuntu 14.04를 기준으로 설명합니다.
Apache 웹서버 설정파일을 적용하기 위해서는 만들어진 설정파일을 복사해야합니다. 아래와 같은 명령을 실행합니다.
# sudo cp custom.d/apache-lxrserver.conf /etc/apache2/conf-available
그 다음 아래 명령을 통해 LXR 설정 스크립트가 생성한 파일을 Apache2에 적용합니다.
# sudo a2enconf apache-lxrserver.conf
마지막으로 Apache2를 재시작합니다.
# sudo service apache2 restart
마무리: LXR 동작 확인
이제 LXR이 잘 동작하는 지 확인하는 단계 입니다. 제 설정파일을 기준으로 웹 브라우저를 통해 http://localhost/lxr/source로 접속하면 LXR이 만든 인덱스 페이지를 보실 수 있습니다.
인덱스 페이지가 나온다면 완성이 된 것입니다. 저의 경우 인덱스 페이지는 나오지만 인덱싱된 소스가 보이지 않는 문제가 있었습니다. 이것은 설정파일에 소스 경로가 잘못되어 인덱싱이 잘 되지 않았기 때문이였습니다.
잘 동작하지 않는 경우 설정스크립트를 보고 찾아갈 수 밖에 없습니다. 만약 한번에 잘 되었다면 축하드립니다!
'IT' 카테고리의 다른 글
WSL을 설치한 다음 설치할 필수 패키지 (0) | 2022.05.17 |
---|---|
WSL을 이용한 리눅스 개발 환경 만들기 (0) | 2022.05.13 |
구글 블로거에 개인 도메인 설정하는 방법 (0) | 2020.04.20 |
Docker 스토리지 드라이버 설정 (0) | 2020.04.20 |
우분투 16.04에서 메트록스 그래픽 드라이버 문제를 해결하는 방법 (0) | 2020.04.20 |