2013/05/04
KAICHO: s_naray[at]yahoo[dot]co[dot]jp
※スパムメール対策のため捻ってある

Sanaly - Source code ANALYsis web front end for GNU Global (English)

■概要

Sanalyは、ソフトウェアのソースコードを読んだり解析したり調査したりするための、 Webフロントエンドです。 これは単なるフロントエンドであり、バックエンドとして GNU globalを利用しています。

■Sanalyトップページのスクリーンショット

Sanalyは左右2つのウィンドウから構成されます。左はソースコードを展開するツールと GNU Globalによって実際に展開されたソースコード群、右はユーザがカスタマイズ 可能なメインページです。
ソースコードを展開するには、そのコードのURL(末尾がsrc.rpm、tar.gz、tar.bz2など) を左上のボックスに貼り付け、"Ext"ボタンを押すだけです。これにより、 SanalyはGNU Globalを起動し、展開したコードへのリンクを左ウィドウに追加します。

■ダウンロード

パッケージ名 SRPMパッケージ RPMパッケージ(for RHEL/CentOS/OracleLinux 6/7/8)
Sanaly sanaly-1.8-3.src.rpm sanaly-1.8-3.noarch.rpm
geturllist geturllist-0.5-2.src.rpm geturllist-0.5-2.noarch.rpm

geturllistは、右側の"search"ボックスを利用する際にSanalyが使用する urllist を アップデートするための小さなツールです。これはインストール必須のツールでは ありませんが、一週間に一度 urllist を最新のものに update するためにインストール するとよいでしょう。

これとは別に、特別なGNU Global(とpython-pygments)を用意しました。

パッケージ名 元ソースコード SRPMパッケージ RPMパッケージ
安定版 GNU Global GNU global Download page global-6.5.7-20.el6.src.rpm EL6 global-6.5.7-20.el6.x86_64.rpm
EL7 global-6.5.7-20.el7.x86_64.rpm
EL8 global-6.5.7-20.el8.x86_64.rpm
python-pygments pygments get it page python-pygments-2.3.1-2.el6.src.rpm EL6 python-pygments-2.3.1-2.el6.noarch.rpm
EL7 python-pygments-2.3.1-2.el7.noarch.rpm
EL8 python-pygments-2.3.1-2.el8.noarch.rpm
※pygmentsは、globalの字句(?)解析を助けてくれるpythonライブラリ。globa-6.3.2から対応。 なければctagsを使うが、あるともうちょっと賢く解析する。そのかわりかなり遅い上に、 python-2.6以上が必要なため、実際EL5ではダメで、EL6以上でないと使えない。

このglobalは、オリジナルのglobalに存在しない、次に挙げる拡張機能を持っています。

  1. 追加でいくつかの言語をパース可能

  2. アセンブラソースをより厳密に解析可能
    組み込みパーサの変更により、アセンブラソースファイル中のラベルを 可能な限り認識できるようにしました。

  3. 文字列・リテラルの色づけ
    htagsでは、全ての文字列は色づけされます。

  4. mime/ファイルタイプで言語を判定可能
    オリジナルのGNU Globalはファイルの拡張子でのみ言語を判定していましたが、 この版ではmimeタイプまたはファイルタイプで言語を判定可能で、これにより 拡張子が無いファイルも判定できるようになりました。 /etc/gtags.conf.sanaly内の builtin-parser-additionalsを以下に示します。 「mimetypemap]「filetypemap」行に注目してください。これらは、 /usr/bin/fileが返す文字列を元に実装されています。

    builtin-parser-additionals:\
            :langmap=python\:.py.pyx.pxd.pxi.scons:\
            :langmap=ruby\:.rb:\
            :langmap=perl\:.pl:\
            :langmap=sh\:.sh.SH.bsh.bash.ksh.zsh:\
            :langmap=cpp\:.tjs:\
            :mimetypemap=python\:text/x-python:\
            :mimetypemap=python\:application/x-python:\
            :mimetypemap=ruby\:text/x-ruby:\
            :mimetypemap=ruby\:application/x-ruby:\
            :mimetypemap=perl\:text/x-perl:\
            :mimetypemap=perl\:application/x-perl:\
            :filetypemap=sh\:POSIX shell script text executable:\
            :filetypemap=sh\:Bourne-Again shell script text executable:\
            :filetypemap=sh\:Bourne shell script text executable:\
            :filetypemap=python\:python script text executable:\
            :filetypemap=python\:Python script text executable:\
            :filetypemap=python\:a python script text executable:\
            :filetypemap=python\:a /usr/bin/python script text executable:\
            :filetypemap=python\:a /usr/bin/env python script text executable:\
            :filetypemap=ruby\:ruby script text executable:\
            :filetypemap=ruby\:a /usr/local/bin/ruby script text executable:\
            :filetypemap=ruby\:a /usr/bin/ruby script text executable:\
            :filetypemap=ruby\:a /usr/bin/env ruby script text executable:\
            :filetypemap=perl\:perl script text executable:\
            :filetypemap=perl\:a /usr/bin/perl script text executable:\
            :filetypemap=perl\:a /usr/bin/env perl script text executable:
    

ソースコード・パッチを入手するための、SRPMの展開方法を書いておきます。 以下のコマンドで、/root/rpmbuild以下にソースコード、パッチ、specファイルが展開されます。
 # rpm -Uvh global-6.5.7-20.el6.src.rpm 
これとは別に、以下のコマンドで、パッチとspecファイルが カレントディレクトリに展開されます。
# rpm2cpio global-6.5.7-20.src.rpm | cpio -di

■インストール方法

このツールは、主にRHEL6/7/8、CentOS6/7/8及びOracleLinux6/7/8用です。 それ以外のディストリビューションにはインストールしたことがないため、 もしもそれらにインストールして成功または失敗したら教えて下さい。

全てのパッケージをインストールするなら、以下のように実行してください。 最初にpython-pygmentsパッケージを、次に残りのパッケージをインストールします。
 # rpm -Uvh python-pygments-2.3.1-2.el6.noarch.rpm
 # rpm -Uvh sanaly-1.8-3.noarch.rpm global-6.5.7-20.el6.x86_64.rpm geturllist-0.5-1.noarch.rpm

上で述べたように、geturllistはインストール必須ではありません。

Note:
  • Sanalyを動作させるには、SELinuxは無効にしてください。さもなければ、"audit2allow" などでSanaly用のSELinuxポリシーを作成する必要があります。
  • ブラウザとしてFirefoxを推奨します。Chome/MS Edgeは、特にブラウザの「戻る」ボタンで元の場所に戻れないことがあります。
  • *.src.rpmを展開するために、追加パッケージのインストールが必要になるかもしれません。 Sanaly が内部的に "rpmbuild -bp *.spec" を実行するためです。 例えば、kernel-*.src.rpm を展開するには、gcc が必要です。

■使い方

インストールしたLinuxサーバ(=webserver)の "http://webserver/sanaly/" に Webブラウザでアクセスしてください。

■設定ファイル群

Sanalyの設定ファイルは以下の通りです。

■ライセンス

■Support

サポートBBSまたはe-mailをご利用ください。