・get_depends.py/query_depends.py
MLの方でライブラリの互換性とかの話が出ているので、遅まきながら、メンテナ回りで使っているライブラリの依存性を調べるためのツールを紹介。
get_depends.py は /usr/bin や /usr/lib 等にあるバイナリファイルを ldd して、そのバイナリファイルが必要とするライブラリを SQLite3 なデータベースに格納するコマンド、query_depends.py は指定したバイナリファイルに必要なライブラリをDBから検索するコマンドです。
使い方としては、まず get_depends.py を root 権限で走らせて depends.sql3 というデータベースファイルを作っておき、依存関係を調べたいバイナリファイルを query_depends.py で検索する、という形。とりあえずの使い方は query_depends.py -h で表示される。
$ ./query_depends.py -h Usage: ./query_depends.py [-b name] [-p path ] [-s soname ] [-r realname] ./depends.sql3 データベースを用いて,ライブラリの依存関係を調べる. -b name: name が含まれるELF形式のバイナリファイルが使う共有ライブラリを表示する -b cat とすれば /bin/cat だけでなく,bdftruncate や fc-cat もマッチする -b の場合,パス名は見ずに,ファイル名のみで検索する -p name: 検索の際にパス名も含めてマッチさせる.-p /bin/cat とすれば /bin/cat のみにマッチする -s soname: 共有ライブラリ soname を利用するバイナリファイルを表示する -s libgtk libgtk-3.so.0 や libgtk-x11-2.0.so もマッチする -s の場合,パス名は見ずに,共有ライブラリ名のみで検索する -r realname: 検索の際にライブラリのパス名も含める
例えば、 /usr/sbin/httpd が使うライブラリを調べたい場合は query_depends.py -p /usr/sbin/httpd を実行する。
$ ./query_depends.py -p /usr/sbin/httpd /usr/sbin/httpd needs these libraries b'linux-vdso.so.1 (0x00007ffe927ae000)'() b'libpcre.so.1(/usr/lib/libpcre.so.1) b'libaprutil-1.so.0(/usr/lib/libaprutil-1.so.0) b'libapr-1.so.0(/usr/lib/libapr-1.so.0) b'libpthread.so.0(/lib/libpthread.so.0) b'libc.so.6(/lib/libc.so.6) b'libexpat.so.1(/usr/lib/libexpat.so.1) b'libuuid.so.1(/usr/lib/libuuid.so.1) b'librt.so.1(/lib/librt.so.1) b'libcrypt.so.1(/lib/libcrypt.so.1) b'libdl.so.2(/lib/libdl.so.2) b'/lib/ld-linux-x86-64.so.2(b'/lib/ld-linux-x86-64.so.2)
あるライブラリ(例えば /usr/lib/libgtk-x11-2.0.so.0) を使っているバイナリファイルを調べたい場合は query_depends.py -s libgtk-x11-2.0
$ ./query_depends.py -s libgtk-x11-2.0 b'libgtk-x11-2.0.so.0 used by these binaries uim-input-pad-ja(/usr/bin/uim-input-pad-ja) uim-im-switcher-gtk(/usr/bin/uim-im-switcher-gtk) uim-pref-gtk(/usr/bin/uim-pref-gtk) uim-toolbar-gtk(/usr/bin/uim-toolbar-gtk) uim-toolbar-gtk-systray(/usr/bin/uim-toolbar-gtk-systray) gtk-query-immodules-2.0(/usr/bin/gtk-query-immodules-2.0) gtk-demo(/usr/bin/gtk-demo) wnckprop-1(/usr/bin/wnckprop-1) wnck-urgency-monitor-1(/usr/bin/wnck-urgency-monitor-1) ....
依存関係のチェックには ldd コマンドを使っているので、厳密にそのバイナリファイルが依存しているライブラリだけではなく、関連するライブラリが芋蔓式にひっかかるので、依存関係はかなり多めに出がち。
コマンドファイル(Python スクリプト)は、このページへの添付としてアップロードしておくので、本文の下にある「添付ファイル」のリンクからダウンロードしてください。