GNU GLOBAL でソースコードを探検しようぜ

GNU GLOBAL はざっくりいうとソースコードに索引をつけて解析しやすくするための ゴイスーなツールです。

ちょっとしたサンプル程度ならぼんやり眺めてればなんとかなりますけど、 Linuxカーネルクラスになってくると正直やってられません。 今回はざざっとこの素敵ツールを導入方法をまとめてみます。

Linux の準備はいいかい?

VirtualBoxでもVMwareでもHyper-VでもParallelsでもいい。仮装環境じゃなくてもいいから 適当なLinuxBOXを確保しておこう。気をつける点はこの辺り。

  • apacheとかWEBサーバも入れておこう
  • 1号の環境だと SELinux が有効になっているとエラーになりました。 ひとまず Permissive モードで動作させて後でゆっくり調整することにしました。
# setenforce 0

なお、サーバンガー1号はRHEL7を用意しておきました。

GNU GLOBAL をbuildしよう

残念ながらRedHat社公式のリポジトリにはGLOBALはありません。 Macではbrewでインストール出来るようですが、今回はソースからbuildします。 多分Debian ならあると思うけど…

気をつける点は、ncurses-devel パッケージが必要だったこと。yum コマンドで さくっと入れてしまいましょう。

ncurses-devel パッケージを導入

# yum install ncurses-devel

GNU サイトからアーカイブを入手。お好みで別サイトからでもよし

# wget https://ftp.gnu.org/pub/gnu/global/global-6.6.5.tar.gz

ソース展開用のディレクトリを作る

# mkdir -p /var/www/html/src

アーカイブを移動して展開

# mv ./global-6.6.5.tar.gz /var/www/html/src/.
# tar xvf global-6.6.5.tar.gz

configure を実行してMakefileの作成

# ./configure

コンパイル+インストール

# make
# make install

これでソースに索引をつける各種gtagや、HTMLを生成してくれるhtagコマンドが使えるようになったはず。

ソースコードに索引をつけてみよう

RHEL7のkernelパッケージを取ってきて索引をつけてみよう。 今回は取ってくるところから開始してみます。

wgetでRedHat社サイトからkernelのsrpmをゲットする。

# wget http://ftp.redhat.com/pub/redhat/linux/enterprise/7Server/en/os/SRPMS/kernel-3.10.0-693.35.1.el7.src.rpm

アーカイブを移動

# mv ./kernel-3.10.0-693.35.1.el7.src.rpm /var/www/html/src/.
# mkdir /var/www/html/src/kernel-3.10.0-693.35.1.el7
# cd /var/www/html/src/kernel-3.10.0-693.35.1.el7

アーカイブを展開

# rpm2cpio ../kernel-3.10.0-693.35.1.el7.src.rpm | cpio -id
# tar xvf linux-3.10.0-693.35.1.el7.tar.xz
# tar xvf kernel-abi-whitelists-693.tar.bz2 

gtag コマンドで索引をつける

# gtags -v

htag コマンドでHTMLを生成する

htags -Ffvsnaw --tabs 4 --title "kernel-3.10.0-693.35.1.el7"

WEBサーバの設定は大丈夫だよね?

一応参考までに超適当なやつを置いておきます。

# cat /etc/httpd/conf.d/global.conf 
 
<Directory "/var/www/html/src">
    AllowOverride All
    Options +MultiViews +Indexes +SymLinksIfOwnerMatch +ExecCGI
    Require method GET POST OPTIONS
</Directory>

スタートはここからだ!レッツ解析

全てが無事に終わってブラウズしてみると以下のような画面が表示されることでしょう。 ようやく調査のスタート地点に立てました。ガンガン解析していきましょう。

GNU GLOBAL

1号が解析するときにどうしたかは別の記事でご紹介する予定デス! 長々と読んでくださりありがとうございました。