Linux Cross Reference setup on ubuntu
Linux Cross Reference(以下LXR)とは、LinuxのソースコードをWebブラウザ経由で見られるようにするために開発された素敵なツールである。LXRには0.3.x系列と0.9.x系列があり、0.3.x系列はFXR(=FreeBSD Cross Reference)、0.9.x系列は本家LXRなどに導入されている。本文では、Ubuntu上で Linux Cross Reference (LXR) の 0.9.x を導入する手順について説明する。
Screenshot
まず、こんな辺境のブログを見てくれる方が時間を無駄にしないように、本文で述べる設定に従うとどういった動作になるのか、スクリーンショットを以下に示しておく。特徴は以下の通り。
1.リッチな検索機能
2.クロスリファレンス機能(青くなっている部分をクリックすると、定義場所へジャンプすることが可能。)
3.複数種のソースコードを管理可能
長くなってしまったので、本日のエントリでは1、2が使用できるところまで説明する。3を行う方法は次回エントリで述べる。
Assumption
便宜上、以下のような仮定をする。
意味 | 変数 |
---|---|
インストールしようとしているユーザの名前 | lxr-admin |
インストール先ディレクトリ | /usr/share |
ソースコードツリーのルートディレクトリ | /usr/src |
ソースコードの入っているプロジェクト名前 | project1、project2、、、 |
Install related packages
それでは、具体的なインストール手順の説明に入る。まず、LXRが使用するソフトウェアをaptitudeを使用してインストールする。
sudo aptitude install git-core sudo aptitude install postgresql sudo aptitude install postgresql-client sudo aptitude install libxapian15 sudo aptitude install libsearch-xapian-perl sudo aptitude install apache2 libapache2-mod-perl2 sudo aptitude install libcgi-simple-perl libcgi-ajax-perl libhtml-parser-perl libtemplate-perl sudo aptitude install libterm-progressbar-perl libdevel-size-perl sudo aptitude install exuberant-ctags sudo aptitude install texlive sudo aptitude install inkscape
Install LXR
次に、gitレポジトリ経由でLXR本体を落として、インストールを行う。(なお、Ubuntuにはlxrとlxr-cvsというパッケージがあるが、lxrは0.3.x系列のパッケージであり、lxr-cvsは0.9.x系列ではあるが、ややバージョンが古いので、今回はこれらは使用しないこととする。)LXRをgit経由でダウンロードするには、以下のコマンドを実行すれば良い:
cd /usr/share sudo git-clone git://lxr.linux.no/git/lxrng.git sudo chown -R lxr-admin /usr/share/lxrng
Setting for LXR
ここからLXRの設定を行っていく。大まかにわけると、以下の手順に分割できる。
- PostgreSQLの初期設定
- 検索用インデックスの生成
- LXR本体の設定
- Apacheの設定
Initializing PostgreSQL
まず、PosgreSQLの初期設定(ユーザの作成、DBの作成)を行う。
su postgres # postgresのパスワードは予め設定しておくこと createdb lxrng # lxrng が検索などに作成するDB createuser lxr-admin # 必ずソースファイルへの権限を持っているユーザとと同じ名前にすること Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n createuser www-data # apacheがDBに対してアクセスできるようにする Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n
createuser すると、
Shall the new role be a superuser? (y/n) Shall the new role be allowed to create databases? (y/n) Shall the new role be allowed to create more new roles? (y/n)
とプロンプトが出る。全て n としても動作に支障はないので、ここの返答はどちらでも良い。
これでPostgresSQLの設定は終了。
Tips
DBの更新を誤ってしてしまい、再度最初から作成したい場合は、
su postgres sudo dropdb lxrng
とした後、再度
sudo createdb lxrng
とすればよい。ユーザは消えないので、再作成する必要はない。
Prepatration for cotaining the source codes
ソースコードを入れるディレクトリの準備をする。ソースコードを入れるディレクトリの所有者は、lxr-adminである必要であることに注意。
sudo mkdir /usr/src/lxr sudo chown lxr-admin /usr/src/lxr mv ~lxr-admin/source/project1 /usr/src/lxr # ソースファイルを/usr/src/lxrに移動 mv ~lxr-admin/source/project2 /usr/src/lxr mv ~lxr-admin/source/project3 /usr/src/lxr ...
さらに、xapianがテキスト検索をを行うためのディレクトリの設定を行っておく。
sudo mkdir -p /var/lib/lxrng/text-db sudo chown -R lxr-admin /var/lib/lxrng/text-db mkdir /usr/share/lxrng/text-db mkdir /usr/share/lxrng/text-db/project1
xapianのキャッシュディレクトリの作成、設定を行う。
sudo mkdir -p /var/lib/lxrng/cache sudo chmod -R a+rw /var/lib/lxrng
make -C /home/guest/lxrng/webroot/.static/gfx make: Entering directory `/home/guest/lxrng/webroot/.static/gfx' make: Nothing to be done for `all'. make: Leaving directory `/home/guest/lxrng/webroot/.static/gfx'
Setup LXR
ようやくLXR本体の設定を行う。lxrng.confの設定をいじる。これはサンプルを用意しておいたので以下を参照。
# -*- mode: perl -*- # Configuration file # # use LXRng::Index::PgBatch; use LXRng::Repo::Git; use LXRng::Search::Xapian; use LXRng::Repo::Plain; #ソースコードが入っているディレクトリを指定する my $repo_project1 = LXRng::Repo::Plain-> new('/usr/src/lxr/project1'); my $index = LXRng::Index::PgBatch->new(db_spec => 'dbname=lxrng;port=5432', db_user => "", db_pass => "", # table_prefix => 'lxr' ); #検索インデックスが入っているディレクトリを指定する my $search_project1 = LXRng::Search::Xapian->new('/var/lib/lxrng/text-db/project1'); return { 'project1' => { 'repository' => $repo_project1, #上記で指定した名前と対応 'index' => $index, 'search' => $search_project1, #上記で指定した名前と対応 #ベースURL-この場合だと/lxr/project1というurlになる #当然 @@YourIPAddress@@ はあなたのマシンのIPアドレス。 'base_url' => 'http://@@YourIPAddress@@/lxr', # Must be writable by httpd user: 'cache' => '/var/lib/lxrng/cache', #キャッシュディレクトリの指定 'fs_charset' => 'iso-8859-1', 'content_charset' => 'iso-8859-1', 'languages' => ['C'], #言語の指定。Java、C、C++から選べるはず #バージョンの指定。この名前に対応するディレクトリは必ず存在している必要がある。 #以下の例の場合、 # /usr/src/lxr/project1/1.0 # /usr/src/lxr/project1/1.1 # /usr/src/lxr/project1/1.2 #は全て存在している必要がある。 #存在していない場合、ブラウザで参照したときに対応するバージョンのURLが #Not Foundになってしまう。 'ver_list' => ['1.0','1.1','1.2'], 'ver_default' => '1.2', #デフォルトで表示するディレクトリ。 'include_maps' => #謎。 [ [qr|^arch/(.*?)/|, qr|^asm/(.*)|, sub { "include/asm-$_[0]/$_[1]" }], [qr|^include/asm-(.*?)/|, qr|^asm/(.*)|, sub { "include/asm-$_[0]/$_[1]" }], [qr|^|, qr|^asm/(.*)|, sub { map { "include/asm-$_/$_[0]" } qw(i386 alpha arm ia64 m68k mips mips64), [qr|^|, qr|(.*)|, sub { "include/$_[0]" }], ], }, };
(注:筆者はperlが全然わからないので、なんとなく書いている。すごく効率の悪いコードを書いているかもしれないので、適当に直して頂けるとありがたい。とりあえず、上記コードで動作することは確認した。)
Generating Search Indices
次に、ソースコード検索を行うためのインデックス生成を行う。インデックスの生成には、インストールディレクトリに存在するPerlスクリプトlxr-genxrefを使用する。
/usr/share/lxrng/lxr-db-admin project1 --init #Project1用のDBの作成? /usr/share/lxrng/lxr-genrefx project1 ./lxr-genrefx project1
Setup Apache
さて、いよいよ大詰め。Apacheの設定である。LXRにはPerlスクリプトを介して動かす設定と、CGIを介して動かす設定があるようだが、今回はCGIを使用する設定を行う。これに関するテンプレートは、/usr/share/lxrng/apache2-site.conf-dist-cgiである。このファイルを適宜変更し、apacheに読み込ませればよい。以下は、今回指定した前提に基づいた指定例である。
簡単のため、今回は /etc/apache2/apache2.conf の末端に以下の設定を付け加えたとする。
Alias /lxr/favicon.ico "/usr/share/lxrng/webroot/favicon.ico" Alias /lxr/robots.txt "/usr/share/lxrng/webroot/robots.txt" Alias /lxr/.static "/usr/share/lxrng/webroot/.static" # For LXRng installed directly in the web site root, use # ScriptAlias /@@LXRURL@@ "@@LXRROOT@@/webroot/lxr.cgi"をもじる ScriptAlias /lxr "/usr/share/lxrng/webroot/lxr.cgi/" <Directory "/usr/share/lxrng/webroot/"> Options ExecCGI AllowOverride None Order deny,allow Allow from all </Directory>
設定ファイルを読み込ませるため、apacheを再起動する。
/etc/init.d/apache2 restart # CentOSとかだとhttpd restart になるかも。
Let's Browsing the file!
動作確認を行う。
http://@@YourIPAddress@@/lxr
にアクセスして、以下のような画面が出ればOK。
Let's use LXR more!
「せっかくなので、もっとLXRを使い倒してみる。」を書こうとしたが、かなり長くなってしまったので次回に回す。
参考文献1:http://lxr.linux.no/.static/contrib/lxr-notes-ubuntu.txt
参考文献2:http://darwish-07.blogspot.com/2008/02/howto-lxrng-on-ubuntu-710.html
参考文献3:http://lxr.linux.no/