[[diary/Kojima]]

・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 スクリプト)は、このページへの添付としてアップロードしておくので、ページの一番下あたりのリンクからダウンロードしてください。
コマンドファイル(Python スクリプト)は、このページへの添付としてアップロードしておくので、本文の下にある「添付ファイル」のリンクからダウンロードしてください。



#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS