LXR Cross Referencer を試してみた
クロスリファレンスやソースコード検索エンジンは便利なのでインストールしてみた備忘録。
クロスリファレンスやソースコード検索は色々あったりする
- GNU GLOBAL (http://www.gnu.org/software/global/)
- LXR - Linux Cross Referencer (http://sourceforge.net/projects/lxr/)
- OpenGrok (http://hub.opensolaris.org/bin/view/Project+opengrok/WebHome)
- gonzui (http://gonzui.sourceforge.net/)
- milkode (http://milkode.ongaeshi.me/)
インストールガイド
ここみればいいや、という話でもある。
でも lxr-0.11.1.tgz でインストール試したらすげー嵌った。sourcefogeのCVSのHEADから取ってきたもので試したらすんなり。0.11.1版はどこで嵌ったかも記憶が曖昧なので気のせいかもしれない。
LXRインストール前に
LXRで必要なものをインストール
rpmforgeを使えるようにする。
$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm $ rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm
必要なものインストール。ちょっと余計に入れているかもしれない。
$ yum -y install cvs rcs ctags httpd mod_perl mysql-server mysql $ yum -y --enablerepo=rpmforge install perl-File-MMagic-XS perl-File-MMagic.noarch libdbi libdbi-dbd-mysql libdbi-drivers perl-Digest-SHA1 swish-e swish-e-devel perl-String-Approx perl-Apache-DBI.noarch
glimpse か swish-e のどちらかが使えればいいようだけど、気分で切り替えられるようにどっちも使えるようにする。swish-eはyumでインストール。glimpseはコンパイルしてインストール。
ソースコードはここからダウンロード。
$ tar xvzf glimpse-latest.tar.gz $ cd glimpse-4.18.6/ $ ./configure ; make; make install
LXRのソースコードをダウンロード
ソースはここでダウンロード。
展開して構成チェック
$ tar xvzf /root/lxr-lxr.tar.gz $ cd lxr/ $ ./genxref --checkonly No URL specified - Continuing in checking mode Checking Perl version ... 5.8.8 OK Parameter 'ectagsbin' not defined - trying to find ctags 'ectagsbin' temporarily adjusted to /usr/bin/ctags Manually update lxr.conf for permanent setting Checking ctags version ... 5.6 OK Parameter 'glimpsebin' not defined - trying to find glimpse 'glimpsebin' temporarily adjusted to /usr/local/bin/glimpse Manually update lxr.conf for permanent setting Checking glimpse version ... 4.18.5 Parameter 'glimpseindex' not defined - trying to find glimpseindex 'glimpseindex' temporarily adjusted to /usr/local/bin/glimpseindex Manually update lxr.conf for permanent setting Checking glimpseindex version ... 4.18.5 Parameter 'swishbin' not defined - trying to find swish-e 'swishbin' temporarily adjusted to /usr/bin/swish-e Manually update lxr.conf for permanent setting Checking swishe version ... 2.4.7 No matching configuration at ./genxref line 275.
いろいろ警告っぽいのがでます。インストールガイドにあるように、まだ設定していないので警告がでます。あとで設定するので無視します。
Since LXR is not yet configured, you get various Parameter xxx not defined warnings. Ignore them.
http://lxr.sourceforge.net/en/0-11-InstallSteps/0-11-install2LXR.shtml?
初期設定スクリプト実行
ここは試しでマルチプルツリーにします。マルチプルツリーの場合はvirtrootでパスやdbなどを複数設定できるみたい。
$ ./scripts/initial-config.sh *** Initial phase configurator for LXR ($Revision: 1.8 $) *** Configure for single/multiple trees? [S/m] m Your LXR root directory is: /var/www/html/lxr templates directory now protected read-only File .htaccess written in your LXR root directory --- List its content with 'more .htaccess' File apache2-require.pl written in lxrconf.d directory File apache-lxrserver.conf written in lxrconf.d directory File lighttpd-lxrserver.conf written in lxrconf.d directory You need to manually configure lighttpd-lxrserver.conf for multiple trees operation ***Error: both glimpse and swish-e installed! *** Manually edit lxr.conf to comment out one of them *** Prototype lxr.conf written in lxrconf.d directory *** Configuration directory lxrconf.d now contains: *** 合計 44 drwxrwxr-x 2 apache apache 4096 5月 8 02:20 . drwxr-xr-x 9 apache apache 4096 5月 8 02:19 .. -rwxr-xr-x 1 root root 2394 5月 8 02:20 apache-lxrserver.conf -rwxr-xr-x 1 root root 149 5月 8 02:20 apache2-require.pl -rwxr-xr-x 1 root root 11937 5月 8 02:20 lighttp-lxrserver.conf -rwxr-xr-x 1 root root 14635 5月 8 02:20 lxr.conf
ここでもエラーっぽいのがでます。glimpse と swish-e は同時に指定できないのでどちらかにしないといけないようです。あとで設定するのでここも無視。
The name of your LXR root directory is set in all these files, as well as the location of ctags, glimpse, glimpseindex and swish-e. If something goes wrong, an error message is printed:
http://lxr.sourceforge.net/en/0-11-InstallSteps/0-11-install3preconf.shtml?
DBの設定
mysql, postgres, oracle など色々使えるようですが、私はmysqlにしました。
$ mysql -u root -p mysql> create user 'lxr'@'localhost' identified by 'lxr'; Query OK, 0 rows affected (0.00 sec) mysql> exit
passwordはガイドと同じにしていますが環境にあわせて適切に変更してください。
$ ./scripts/initdb-config.sh *** initdb script configurator for LXR ($Revision: 1.6 $) *** In case you make a mistake, you can cancel the whole process by typing ctl-C. Which is your database engine? [MYSQL/oracle/postgres] Which is your database name? [lxr] Which table prefix will you use? [lxr_] Under which user name will you connect to the database? [lxr] Output script name? [lxrconf.d/initdb-mysql-custom.sql] Your database engine is mysql Your database is lxr The tables are prefixed with lxr_ You connect as lxr Configuration script in lxrconf.d/initdb-mysql-custom.sql Is this correct? [YES|no] Init script saved in lxrconf.d/initdb-mysql-custom.sql $ mysql -u root -p < lxrconf.d/initdb-mysql-custom.sql
ソースを展開する場所とglimpseの作業ディレクトリを作成
$ mkdir -p /opt/lxr/indexed-src $ mkdir -p /opt/lxr/glimpse/databases
サンプルソースとしてbcコマンドのソースを下記ディレクトリに展開します。
$ cd /opt/lxr/indexed-src $ wget http://ftp.riken.jp/GNU/gnu/bc/bc-1.03.tar.gz $ wget http://ftp.riken.jp/GNU/gnu/bc/bc-1.04.tar.gz $ wget http://ftp.riken.jp/GNU/gnu/bc/bc-1.05a.tar.gz $ wget http://ftp.riken.jp/GNU/gnu/bc/bc-1.06.tar.gz $ for i in *.gz; do tar xvzf $i; done $ ls bc-1.03 bc-1.04 bc-1.05 bc-1.06 bc-1.03.tar.gz bc-1.04.tar.gz bc-1.05a.tar.gz bc-1.06.tar.gz
apacheが参照するのでオーナをapacheユーザに変更しておきます。
$ chown -R apache.apache /opt/lxr/
設定ファイル
lxrconf.d/以下から、ひな形になるlxr.confをlxrのrootにコピーして修正します。
- 修正した箇所は以下。
- swishbinをコメント
- host_namesを修正
- sourcerootを/opt/lxr/indexed-srcに変更
- glimpsedirを/opt/lxr/glimpse/databasesに変更
- variables => v => range を修正
- variables => a => range を修正
- encoding をISO-2022-JPに変更
- dbuserを適切なユーザに変更
- dbpassを適切なパスワードに変更
- stylesheetのパスの先頭にスラッシュが入っているので修正
注意点は host_names を直さないと表示すらできないというところですね。名前解決が間違っているとそれだけでアウトです。
$ cd /var/www/html/lxr $ cp -p lxrconf.d/lxr.conf . $ cat lxr.conf ( { 'tmpdir' => '/tmp' , 'glimpsebin' => '/usr/local/bin/glimpse' , 'glimpseindex' => '/usr/local/bin/glimpseindex' , 'swishconf' => '/var/www/html/lxr/templates/swish-e.conf' , 'ectagsbin' => '/usr/bin/ctags' , 'ectagsconf' => '/var/www/html/lxr/templates/ectags.conf' , 'cvspath' => '/bin:/usr/local/bin:/usr/bin:/usr/sbin' , 'host_names' => [ '//localhost' , 'http://192.168.0.170' , 'http://rainy:80' ] , 'htmlfatal' => 'templates/html/html-fatal.html' , 'htmlhead' => 'templates/html/html-head.html' , 'htmltail' => 'templates/html/html-tail.html' , 'htmldir' => 'templates/html/html-dir.html' , 'htmlident' => 'templates/html/html-ident.html' , 'htmlsearch' => 'templates/html/html-search-glimpse.html' , 'htmlconfig' => 'templates/html/html-config.html' # , 'sourcehead' => 'templates/html/html-head.html' # , 'sourcedirhead' => 'templates/html/html-head.html' , 'showconfighead' => 'templates/html/config-head-btn-smaller.html' , 'diffleftwidth' => 50 , 'stylesheet' => 'templates/lxr.css' # , 'alternate_stylesheet' => [ 'lxrconf.d/another.css' ] # , 'encoding' => 'iso-8859-1' , 'encoding' => 'ISO-2022-JP' , 'graphicfile' => 'bitmap|bmp|gif|icon?|jp2|jpe?g|pjpe?g|png|svg|tiff?|xbm|xpm' , 'filetypeconf' => '/var/www/html/lxr/templates/filetype.conf' , 'genericconf' => '/var/www/html/lxr/lib/LXR/Lang/generic.conf' , 'treeextract' => '([^/]*)/[^/]*$' , 'dbpass' => 'lxr' , 'dbuser' => 'lxr' # , 'dbprefix' => 'lxr_' } , { 'virtroot' => '/lxr/example' # The bit after the / above , 'caption' => 'My tree displayed by LXR' , 'shortcaption' => 'My tree' # , 'encoding' => 'iso-8859-1' , 'encoding' => 'ISO-2022-JP' # , 'cvswebprefix' => 'http://cvs.myhost.com/cgi-bin/cvsweb.cgi' # , 'cvswebpostfix' => '?cvsroot=rootname' # , 'cvswebprefix' => 'http://cvs.myhost.com/cgi-bin/viewcvs.cgi/myroot' # , 'cvswebpostfix' => '' , 'sourceroot' => '/opt/lxr/indexed-src' # , 'sourceroot' => 'cvs:/home/karsk/a/CVSROOT/linux' # , 'sourceroot' => 'git:/some/repository/.git' , 'sourcerootname' => 'Example' # , 'sourcerootname' => '$v' , 'variables' => { 'v' => { 'name' => 'Version' , 'range' => [qw(bc-1.03 bc-1.04 bc-1.05 bc-1.06)] } , 'a' => { 'name' => 'Architecture' , 'range' => [qw(i386)] } } , 'ignoredirs' => ['CVSROOT', '.git'] , 'incprefix' => [ '/include', '/include/linux' ] , 'dbname' => 'dbi:mysql:dbname=lxr' , 'glimpsedir' => '/opt/lxr/glimpse/databases' , 'swishdir' => '/a/directory/here/' } )
apacheのconfigをコピー
$ cp lxrconf.d/apache-lxrserver.conf /etc/httpd/conf.d
templatesのhtmlのイメージファイルのパスが間違っているので修正
cd /var/www/html/lxr/templates/html $ for i in *.html > do > sed -i -e "s@/LXRimages@./LXRimages@g" $i > done
indexの作成
./genxref --url=http://localhost/lxr/example
apacheが参照するのでオーナをapacheユーザに変更しておきます。
$ chown -R apache.apache /opt/lxr/
apacheを再起動。
$ /etc/init.d/httpd restart
あとは URLにアクセスして完了。
デフォルトのcssだと寂しいので、MozillaやApacheのlxrからパクって少しだけ見た目を変更しました。
http://{ipaddress}/lxr/source