以前 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
以上です。