LXR 1.20 (Linux Cross Reference) インストール

LXR1.20 をインストールした時のメモです
取り急ぎ、up してみました。

##構成
* fedora19 or RHEL6.4
* selinux off
* iptable off

##バージョン
* LXR 1.20
* Glimpse 4.18.6
* PostgreSQL

##パッケージのインストール

###yum でいけるものは yum で入れてしまう
※fedora 19 の場合、compat-flex も

```
# yum install git httpd ctags texlive inkscape mod_perl gcc \
cpan rcs perl-Test-Simple postgresql postgresql-server postgresql-devel \
libdbi libdbi-dbd-pgsql libdbi-devel flex flex-devel make automake autoconf
```

###glimpse の make , install
glimpse のサイトから、最新版をダウンロードして、glimpse をビルドしましょう。
http://webglimpse.net/download.php

```
# tar xf glimpse-latest.tar.gz
# cd glimpse-4.18.6/
# ./configure
# make
# make install
# glimpse -V　←バージョンを確認
This is glimpse version 4.18.5, 2006.
```

###cpan モジュールのインストール

```
# cpan -i File::MMagic
# cpan -i Digest::SHA
# cpan -i Bundle::DBI
# cpan -i Bundle::DBD::Pg
```

##PostgreSQL の初期化と起動

###fedora19の場合
```
# systemctl enable postgresql.service
# postgresql-setup initdb
# systemctl start postgresql.service
```
###RHEL6の場合
```
# chkconfig postgresql on
# service postgresql initdb
# service postgresql start
```

##lxr ユーザの追加と lxr-1.20 の展開
```
# useradd -m lxr
# passwd lxr
# tar xf lxr-1.2.0.tgz -C /usr/local
# mv /usr/local/lxr-1.2.0 /usr/local/lxr　←lxr にリネームします 
# mkdir /usr/local/lxr/glim　←glimpse のデータベース用に作成します。lxrの設定時に使用します。
# chown -R lxr.lxr /usr/local/lxr/
```

##lxr の環境確認
```
# su - lxr
$ cd /usr/local/lxr
$ ./genxref --url=http://localhost/lxr --checkonly
ERROR: could not open configuration file lxr.conf   ←まだないので無視します
[  OK  ]     Perl     version ... 5.16.3　          ←OKを確認
Parameter 'ectagsbin' not defined - trying to find ctags
ctags found at /usr/local/bin/ctags
[  OK  ]     ctags    version ... 5.8　←OKを確認
Parameter 'glimpsebin' not defined - trying to find glimpse
glimpse found at /usr/local/bin/glimpse
Checked:    glimpse   version ... 4.18.5　          ←バージョンを確認
Parameter 'glimpseindex' not defined - trying to find glimpseindex
glimpseindex found at /usr/local/bin/glimpseindex
Checked: glimpseindex version ... 4.18.5　          ←バージョンを確認
Parameter 'swishbin' not defined - trying to find swish-e
swish-e not found, `command -v swish-e` returned a null string　←swish-e は今回の構成で使わないので無視します
genxref stopped without indexing by --checkonly option
```

##lxr の設定
```
$ ./scripts/configure-lxr.pl -v
*** LXR configurator (version: 1.13) ***
LXR root directory is /usr/local/lxr
Configuration will be stored in custom.d/
directory custom.d created
Configure for single/multiple trees? [S/m] > m　←複数のツリーを管理したいので、multiple にします。
*** LXR web server configuration ***
Web server type? [1.DEFAULT
/2.section in default
/3.indepedent
/4.section in indepedent
] > 2　←URLを/lxr/kernel 等にしたいため、こちらも変更します。
The computer hosting the server is described by an URL.
The form is scheme://host_name:port
--- Host name or IP? [//localhost] >
URL section name for LXR in your server? [/lxr] >
Use built-in multiple trees management with tree designation at end of virtual root? [YES/no] >
*** LXR database configuration ***
Database engine? [MYSQL/oracle/postgres/sqlite] > postgres　←postgres に変更しています
How do you setup the databases? [PER TREE/global] >
Will you share database characteristics? [YES/no] >
Will you use the same username and password for all DBs? [YES/no] >
--- DB user name? [lxr] >
--- DB password ? [lxrpw] > xxxxxx　←任意のものに。次の initdb で使用します。
Will you give the same prefix to all tables? [YES/no] >
--- Common table prefix? [lxr_] >
--- Directory for glimpse databases? > /usr/local/lxr/glim　←
先ほど作成しておいた glimpse データベース用のパスを指定します。
templates directory templates/ now protected read-only
Is your Apache version 2.4 or higher? [YES/no] >　←fedora なら 2.4 なので yes、RHELなら 2.2 なので no にします。RHELで間違えても、custom.d/apache-lxrserver.conf のディレクティブで2.4の記述をコメントアウトすれば大丈夫です。
file .htaccess written into LXR root directory
file apache2-require.pl written into configuration directory
file apache-lxrserver.conf written into configuration directory
file lighttpd-lxrserver.conf written into configuration directory
Mercurial support files written into configuration directory
*** LXR master configuration file setup ***
    Global section part
*** Configuring auxiliary tool paths
*** Configuring host name or IP (as http://...)
*** Host name previously defined as //localhost
--- Alias name ? (hit return to stop) > //xxx.xxx.xxx.xxx　←IPアドレスや、WEBアクセス時のURLに指定するホスト名などを記載しておきます。記載しないと、LXRサイトが表示されません。
--- Alias name ? (hit return to stop) >　←複数の alias を指定できるので、次々と設定しましょう。ないなら Enter.
*** Configuring HTML parameters
--- Use 'buttons-and-menus' instead of 'link' interface? [YES/no] >
*** Configuring file subsection
*** Configuring "common factors"
*** Marking tree section
*** LXR master configuration file setup ***
    Tree section part
    SQL script for database initialisation
*** Configuring LXR server parameters
--- Tree designation for URL? (e.g. the_tree) > kernel　←http://hoge/lxr/xxx ←のxxx部分にあたる名前です。 わかりやすい名前をつけます。※１．繰り返しツリーを作成する場合、ここから続きが始まります。
--- Caption in page header? (e.g. Project XYZZY displayed by LXR) > Linux kernel source　←わかりやすい名前を
Do you want a speed switch button for this tree ? [YES/no] >
--- Short title for button? (e.g. XYZZY) > kernel　←ツリーを切り替えるときのボタンに記載する名前です。わかりやすい名前を。
Do you need a specific encoding for this tree ? [yes/NO] >
*** Describing tree location
How is your tree stored? [FILES/cvs/git/svn/hg/bk] >
--- Source directory? (e.g. /home/myself/project-tree) > /home/www/kernel　←apache がアクセス可能なパスを指定します。オーナーはapacheにしましょう。この配下にソースコードファイルを置いていきます。ツリーごとに用意します。
Name to display for the path root? (e.g. Project or $v for version) [$v] >
*** Enumerating versions
Label for version selection menu?  [Version] >
Version enumeration method? [LIST/file/function] > file　←LXRで検索対象にするディレクトリ名を管理する方法を指定します。ファイルで管理する方法にします。ツリー配下のディレクトリをすべて自動的に表示する場合は function が一番手間が省けます。
--- Version file? (absolute path or relative to LXR root dir.) > /home/www/kernel/versions ←ファイルパスを記載します。中身は /home/www/kernel/ 配下で、LXRの管理対象にしたいディレクトリ名を列挙するだけです。それを怠ると、genxref でインデックス化しても、WEBでバージョンとして出てきません。
--- Default displayed version is first in 'range'? [YES/no] >
*** Setting directory lists
--- Directory to ignore, e.g. CVSROOT or CVS? (hit return to stop) >
--- Include directory, e.g. /include? (hit return to stop) >
*** Configuring data storage
--- Database name? > lxr-kernel　←posgre上でわかりやすい名前にします。
Do you want to override the global 'lxr' user name? [yes/NO] >
Do you want to override the global 'lxr_' table prefix? [yes/NO] >
*** Configure another tree? [YES/no] > no　←続いてツリーの設定をする場合は yes として、※１繰り返し～のとろこまで戻ります。
configuration saved in custom.d/lxr.conf
DB initialisation sript is custom.d/initdb.sh
```

##PostgreSQL への接続確認

###fedora19

```
# systemctl start postgresql
```

###rhel6

```
# service postgresql start
```

###接続テスト

```
[postgres@local]$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 kernel    | lxr      | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
[postgres@local]$ psql -h localhost -l
psql: FATAL:  ユーザ"lxr"のIdent認証に失敗しました
-h localhost で認証に失敗してしまう場合、lxr のインデックス化の処理も失敗してしまいます。
lxr ユーザだけは、localhost で認証が通る様に設定を変更します。
```

###lxr ユーザの認証設定

```
# vim /var/lib/pgsql/data/pg_hba.conf
# IPv4 local connections:
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             lxr             127.0.0.1/32            trust　←host all all の行の前に追加します。
※環境によっては、IPv6 で trust 指定が必要かもしれません。この設定で、lxr ユーザは trust として認証が必要なくなります。
```

###posgre再起動

```
 ・fedora19
# systemctl restart postgresql
・rhel6
# service postgresql restart 
```

##Database 作成
```
$ cp custome.d/lxr.conf .　←lxr.conf を lxr 直下にコピーします。lxr.conf の後ろに、スペース、ドットがあるので注意。
$ custom.d/initdb.sh
Note: deletion of user below fails if it owns databases
      and other objects.
      If you want to keep some databases, ignore the error
      Otherwise, manually delete the objects
      and relaunch this script.
*** PostgreSQL - Creating global user lxr
dropuser: データベース postgres に接続できませんでした: FATAL:  ユーザ "postgres" で対向(peer)認証に失敗しました
新しいロールのためのパスワード： 先ほどの lxr 設定時に指定した lxr ユーザのパスワード
もう一度入力してください：先ほどの lxr 設定時に指定した lxr ユーザのパスワード
createuser: データベース postgres に接続できませんでした: FATAL:  ユーザ "postgres" で対向(peer)認証に失敗しました
*** PostgreSQL - Creating tree database kernel
*** PostgreSQL - Configuring tables lxr_ in database kernel
NOTICE:  シーケンス"lxr_filenum"は存在しません。省略します
NOTICE:  テーブル"lxr_usages"のトリガ"lxr_remove_usage"は存在しません。省略します
```

##httpd の設定ファイルコピーと再起動
```
# cp custom.d/apache-lxrserver.conf /etc/httpd/conf.d/
```

###fedora19
```
# systemctl enable httpd.service
# systemctl start httpd
```

###rhel6
```
# chkconfig httpd on
# service httpd start
```

#参照するソースファイルの展開
/home/lxr/kernel 配下に、ソースファイルを展開します。
今回は、glimpse-4.18.6 をおいてみました。

バージョンファイルにディレクトリを追記します。

```
# cd /home/www/kernel
# ls -1 | grep -v versions > versions
# chown -R apache.apache *　←ソースファイルをapacheから参照出来るようにします。
```

##ソースファイルのインデックス化
lxrユーザで、インデックス化を行います。初回なので、allurl allversions としています。

```
[lxr@local]$ ./genxref --allurls --allversions
[  OK  ]     Perl     version ... 5.16.3
[  OK  ]     ctags    version ... 5.8
Checked:    glimpse   version ... 4.18.5
Checked: glimpseindex version ... 4.18.5
Parameter 'swishbin' not defined - trying to find swish-e
swish-e not found, `command -v swish-e` returned a null string
Processing //localhost/lxr/kernel  == Version glimpse-4.18.6
This is glimpseindex version 4.18.5, 2006.
Indexing "/home/www/kernel/glimpse-4.18.6" ...
Size of files being indexed = 3928898 B, Total #of files = 417
Some files had numerals in > 50% of the indexed words: check .glimpse_messages
Index-directory: "/home/lxr/glim/lxr/kernel/glimpse-4.18.6"
Glimpse-files created here:
-rw-r--r--. 1 lxr lxr  23780  9月  8 00:26 .glimpse_filenames
-rw-r--r--. 1 lxr lxr   1668  9月  8 00:26 .glimpse_filenames_index
-rw-r--r--. 1 lxr lxr      0  9月  8 00:26 .glimpse_filetimes
-rw-------. 1 lxr lxr 125274  9月  8 00:26 .glimpse_index
-rw-r--r--. 1 lxr lxr    544  9月  8 00:26 .glimpse_messages
-rw-------. 1 lxr lxr 158370  9月  8 00:26 .glimpse_partitions
-rw-r--r--. 1 lxr lxr   1056  9月  8 00:26 .glimpse_statistics
-rw-r--r--. 1 lxr lxr 262144  9月  8 00:26 .glimpse_turbo
*** glimpse-4.18.6 /agrep/save/
--- glimpse-4.18.6 Makefile 1378535592-3371 1
*** glimpse-4.18.6 /agrep/
--- glimpse-4.18.6 Makefile.NeXT 941661426-4489 2
--- glimpse-4.18.6 Makefile.alpha 941661426-4572 3
--- glimpse-4.18.6 Makefile.hp 941661426-4510 4
--- glimpse-4.18.6 Makefile.in 990420530-3387 5
--- glimpse-4.18.6 Makefile.linux 941661426-4545 6
・・・以下省略
```

#LXR サイトへのアクセス
今までの設定であれば、以下のURLにアクセスすることで、LXRを利用することが出来るようになります。
http://[webサイトのIP]/lxr/kernel/source

以上です。