CentOS 6.6 に Systemtap をインストールして動かす
CentOS 6.6 に Systemtap をインストールして動かすのにハマった話です。
インストール方法
最終的に以下のコマンドでインストールして再起動すると Systemtap を動かせました。
$ sudo yum install systemtap $ sudo yum --enablerepo=centosplus install kernel kernel-devel $ sudo yum --enablerepo=base-debuginfo install kernel-debuginfo
ハマった話
ビギナーズガイドによると systemtap を動かすには以下のパッケージが必要です*1。
これらのうち systemtap, systemtap-runtime, kernel-devel は CentOS 公式の Base リポジトリから提供されていて、kernel-debuginfo, kernel-debuginfo-common は Debuginfo リポジトリから提供されています。Debuginfo リポジトリはデフォルトでは有効になっていないので、yum
コマンド実行時にオプション--enablerepo=base-debuginfo
を付けて有効にする必要があります。
これらをインストールします。ただし、これでは動きません。
$ sudo yum install systemtap systemtap-runtime kernel-devel $ sudo yum --enablerepo=base-debuginfo install kernel-debuginfo kernel-debuginfo-common
インストール後に、ビギナーズガイドにあるテスト用のコマンド*2を実行してみます。
$ sudo stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' Pass 1: parsed user script and 103 library script(s) using 201640virt/29512res/3148shr/26860data kb, in 120usr/60sys/257real ms. semantic error: while resolving probe point: identifier 'kernel' at /usr/share/systemtap/tapset/linux/vfs.stp:768:18 source: probe vfs.read = kernel.function("vfs_read") ^ semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/2.6.32-504.12.2.el6.x86_64/build' semantic error: while resolving probe point: identifier 'vfs' at <input>:1:7 source: probe vfs.read {printf("read performed\n"); exit()} ^ semantic error: no match Pass 2: analyzed script: 0 probe(s), 0 function(s), 0 embed(s), 0 global(s) using 211904virt/39740res/5172shr/35020data kb, in 60usr/480sys/1967real ms. Pass 2: analysis failed. [man error::pass2]
何やら debuginfo が無いと言われます。
原因
ググったりしてもよく分からなかったのですが、kernel-debuginfo の info を見ると原因がわかりました。
$ yum --enablerepo=base-debuginfo info kernel-debuginfo Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.nara.wide.ad.jp * extras: ftp.nara.wide.ad.jp * updates: ftp.nara.wide.ad.jp Installed Packages Name : kernel-debuginfo Arch : x86_64 Version : 2.6.32 Release : 504.12.2.el6.centos.plus Size : 1.6 G Repo : installed From repo : base-debuginfo Summary : Debug information for package kernel URL : http://www.kernel.org/ License : GPLv2 Description : This package provides debug information for package kernel. : This is required to use SystemTap with kernel-2.6.32-504.12.2.el6.centos.plus.x86_64.
Description の部分に
This is required to use SystemTap with kernel-2.6.32-504.12.2.el6.centos.plus.x86_64.
とあるように、カーネルのリリース名に見慣れぬ centos.plus という文字があります。 これは現在のカーネルとは違っていました。
$ uname -r 2.6.32-504.12.2.el6.x86_64
調べてみると CentOSPlus というリポジトリでも kernel と kernel-devel が提供されています。リリース名も kernel-2.6.32-504.12.2.el6.centos.plus.x86_64 に一致します。
というわけで CentOSPlus リポジトリから kernel とkernel-devel をインストール。
$ sudo yum --enablerepo=centosplus install kernel kernel-devel
そして再起動した後再びテスト用コマンドを実行すると、うまく動きました。
$ sudo stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}' Pass 1: parsed user script and 103 library script(s) using 201672virt/29544res/3148shr/26892data kb, in 110usr/20sys/128real ms. Pass 2: analyzed script: 1 probe(s), 1 function(s), 3 embed(s), 0 global(s) using 296424virt/125164res/4124shr/121644data kb, in 990usr/200sys/1195real ms. Pass 3: translated to C into "/tmp/stap53301G/stap_2a362e40998232e8986eb51a4ebd96d9_1543_src.c" using 296424virt/125496res/4456shr/121644data kb, in 0usr/70sys/59real ms. Pass 4: compiled C into "stap_2a362e40998232e8986eb51a4ebd96d9_1543.ko" in 3670usr/1850sys/5836real ms. Pass 5: starting run. read performed Pass 5: run completed in 10usr/10sys/359real ms.