Amazon Linux 2 に Amazon Linux Extra から bcc を導入する手順

以前 Amazon Linux 2 に bcc のパッケージがないので、ソースコードからコンパイルして導入する手順をご紹介しましたが、今日気がついたら Amazon Linux Extra に入っていたので、こちらから導入してみたいと思います。

Amazon Linux Extra とは

Amazon Linux Extra とは、Amazon Linux 2 で標準パッケージとは別に比較的新しいバージョンや言語ランタイムなどを提供しているディストリビューションチャンネルです。

欲しいバージョンやパッケージがない場合、自分で頑張らなくてもとりあえず確認してみることをお勧めします。

bcc の導入

まず bcc が配信されていることを確認します。amazon-linux-extras コマンドを引数なしで実行すると利用可能なリポジトリ一覧が表示されます。

$ amazon-linux-extras
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1  =1.5.16 ]
.............<snip>..................
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x ]
 37  mono                     available    [ =5.x ]

36 番に BCC が出力されています。

インストール自体は簡単です。以下のコマンドを実行するだけです。

$ sudo amazon-linux-extras install -y BCC

依存関係に従って、以下のパッケージがインストールされました。

Installed:
  bcc.x86_64 0:0.10.0-1.amzn2.0.1

Dependency Installed:
  bcc-tools.x86_64 0:0.10.0-1.amzn2.0.1               clang-libs.x86_64 0:7.0.1-1.amzn2.0.2               cpp.x86_64 0:7.3.1-5.amzn2.0.2
  elfutils-libelf-devel.x86_64 0:0.170-4.amzn2        gcc.x86_64 0:7.3.1-5.amzn2.0.2                      glibc-devel.x86_64 0:2.26-32.amzn2.0.1
  glibc-headers.x86_64 0:2.26-32.amzn2.0.1            kernel-devel.x86_64 0:4.14.133-113.105.amzn2        kernel-headers.x86_64 0:4.14.133-113.105.amzn2
  libatomic.x86_64 0:7.3.1-5.amzn2.0.2                libcilkrts.x86_64 0:7.3.1-5.amzn2.0.2               libitm.x86_64 0:7.3.1-5.amzn2.0.2
  libmpc.x86_64 0:1.0.1-3.amzn2.0.2                   libmpx.x86_64 0:7.3.1-5.amzn2.0.2                   libquadmath.x86_64 0:7.3.1-5.amzn2.0.2
  libsanitizer.x86_64 0:7.3.1-5.amzn2.0.2             llvm-libs.x86_64 0:7.0.1-1.amzn2.0.1                mpfr.x86_64 0:3.1.1-4.amzn2.0.2
  python-netaddr.noarch 0:0.7.5-9.amzn2               python2-bcc.x86_64 0:0.10.0-1.amzn2.0.1             yum-plugin-dkms-build-requires.noarch 0:1.0-2.amzn2
  zlib-devel.x86_64 0:1.2.7-17.amzn2.0.2

動作確認

以前もご紹介した execsnoop を実行してみます。添付ツール群は、bcc-tools パッケージからインストールされます。インストールされたツールは /usr/share/bcc/tools 配下にあります。

実行してみます。

$ sudo /usr/share/bcc/tools/execsnoop
PCOMM            PID    PPID   RET ARGS
dhclient-script  2748   2275     0 /usr/sbin/dhclient-script
hostname         2750   2749     0 /bin/hostname
cat              2752   2751     0 /bin/cat /proc/cmdline
cat              2754   2753     0 /bin/cat /proc/cmdline
dbus-send        2755   2748     0 /bin/dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.freedesktop.NetworkManager
.............<snip>..................

問題なく実行できた様です。 なお実行中のカーネルバージョンに対応する、kernel-header、kernel-devel パッケージがインストールされていない場合は以下の様にエラーになるので注意してください。

$ sudo /usr/share/bcc/tools/execsnoop
modprobe: FATAL: Module kheaders not found in directory /lib/modules/4.14.123-111.109.amzn2.x86_64
chdir(/lib/modules/4.14.123-111.109.amzn2.x86_64/build): No such file or directory
Traceback (most recent call last):
  File "/usr/share/bcc/tools/execsnoop", line 165, in <module>
    b = BPF(text=bpf_text)
  File "/usr/lib/python2.7/site-packages/bcc/__init__.py", line 325, in __init__
    raise Exception("Failed to compile BPF text")
Exception: Failed to compile BPF text

以上です。