Open13

debuginfod service on Debian

YABUKI YukiharuYABUKI Yukiharu
YABUKI YukiharuYABUKI Yukiharu

Debian wikiのdebuginfodの記事に対応する内容

どこにダウンロードされるのか?

具体的には、こんな感じ。ビルドIDに対応した、データ(デバック情報?とソースコード?)がある

 ls -la ~/.cache/debuginfod_client/
合計 12
drwxr-xr-x 1 yabuki yabuki 1460  7月 31 18:56 .
drwx------ 1 yabuki yabuki  984  8月  2 15:32 ..
drwx------ 1 yabuki yabuki   18  7月 31 18:56 2a0fb93a5bc4342361454ff95d2f7ba431c0fa42
drwx------ 1 yabuki yabuki   18  7月 31 18:56 355b305e021bea4f87bab1a15e048282dc090db1
drwx------ 1 yabuki yabuki   18  7月 31 18:14 46bbc59901196392a294a8c436a884cc71e1cc75
drwx------ 1 yabuki yabuki   18  7月 31 18:55 4c5360dc293af614f83953626f43b5996dcb99a1
drwx------ 1 yabuki yabuki   18  7月 31 18:56 5aa43e3778622f4b95261331e97a45be5b87481d
drwx------ 1 yabuki yabuki   18  7月 31 18:56 612734ba9e42eb4a87f15e845b24a57c99dd9541
drwx------ 1 yabuki yabuki   18  7月 31 18:56 655b5832c8cd64a75acacee796a4ba1056a6a083
drwx------ 1 yabuki yabuki   58  7月 30 00:59 6c8322113f256db15976780e5dee8aa004b21bd5
drwx------ 1 yabuki yabuki   18  7月 31 18:56 8fee861439dcf268ebe3b4434d0151120e330a7e
drwx------ 1 yabuki yabuki   18  7月 31 18:14 9bafb2afe4a66cbece3720f7c47126d74c054ac0
drwx------ 1 yabuki yabuki   18  7月 31 18:55 9fa96bb766a5c54c99e19c7a0a0bb53851ab0860
drwx------ 1 yabuki yabuki   18  7月 31 18:56 b0631d1ab77b5445394c16e5ef47836d3c16d2ed
drwx------ 1 yabuki yabuki   18  7月 31 18:55 b4aa7e0d7555adb6fac9cc410b7d60fc09aa1607
drwx------ 1 yabuki yabuki   18  7月 31 18:56 bb0fa5371874ba431e7cd9dc2df93922de436fa9
drwx------ 1 yabuki yabuki   18  7月 31 18:55 c7cdf8341bb9761930e365dd4e0741812ca804b6
-rw-r--r-- 1 yabuki yabuki    5  7月 31 18:14 cache_clean_interval_s
-rw-r--r-- 1 yabuki yabuki    3  7月 30 01:01 cache_miss_s
drwx------ 1 yabuki yabuki   18  7月 31 18:56 e5420e073b9ebd978422078c73d4d6812ecf53ed
drwx------ 1 yabuki yabuki   18  7月 31 18:56 e83434bccbc337eb727378b60d562a0a2a1aa297
-rw-r--r-- 1 yabuki yabuki    6  7月 30 00:59 max_unused_age_s

debug情報

ls -la ~/.cache/debuginfod_client/2a0fb93a5bc4342361454ff95d2f7ba431c0fa42/
合計 1284
drwx------ 1 yabuki yabuki      18  7月 31 18:56 .
drwxr-xr-x 1 yabuki yabuki    1460  7月 31 18:56 ..
-r-------- 1 yabuki yabuki 1311352  7月  1 05:12 debuginfo

ソースコードらしきもの

/home/yabuki/.cache/debuginfod_client/6c8322113f256db15976780e5dee8aa004b21bd5:
合計 0
drwx------ 1 yabuki yabuki   58  7月 30 00:59 .
drwxr-xr-x 1 yabuki yabuki 1460  7月 31 18:56 ..
-rw-r--r-- 1 yabuki yabuki    0  7月 30 00:59 source##usr##bin##ibus-daemon
YABUKI YukiharuYABUKI Yukiharu
# apt-cache search debuginfod
debuginfod - debuginfo-related http file-server daemon
libdebuginfod-common - configuration to enable the Debian debug info server
libdebuginfod-dev - libdebuginfod development libraries and header files
libdebuginfod1 - library to interact with debuginfod (development files)
YABUKI YukiharuYABUKI Yukiharu
# apt-file search debuginfod.sh
libdebuginfod-common: /usr/share/libdebuginfod-common/debuginfod.sh

配置されるのは、Debian wikiの記述によると /etc/profile.d/の下とのこと。そこに置かれるってことは、loginしてbash_profileとかを読んだときに有効になると考えて良いのかしら。

YABUKI YukiharuYABUKI Yukiharu
root@Orlanth:/home/yabuki# apt install debuginfod elfutils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  libasm1 libdebuginfod-common libdebuginfod1 libmicrohttpd12
以下のパッケージが新たにインストールされます:
  debuginfod elfutils libasm1 libdebuginfod-common libdebuginfod1 libmicrohttpd12
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 117 個。
785 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,582 kB のディスク容量が消費されます。
続行しますか? [Y/n]
YABUKI YukiharuYABUKI Yukiharu

方式

クライアント・サーバー方式です。ProtocolはHTTP/HTTPS

Server

私の場合は、https://debuginfod.debian.net/ を使うことになるが、他のofficalとの関係はどうなっているの?

Client

Clientの表にあるプログラムで、対応しているものが使えるGDB, lldb, perf, systemtapとかある。

elfutils

apt-cache show elfutils
Package: elfutils
Version: 0.187-1
Installed-Size: 2810
Maintainer: Debian Elfutils Maintainers <debian-gcc@lists.debian.org>
Architecture: amd64
Depends: libasm1 (>= 0.132), libc6 (>= 2.33), libdw1 (= 0.187-1), libelf1 (= 0.187-1), libstdc++6 (>= 4.1.1)
Description-ja: ELF オブジェクト操作用ユーティリティ集
 Elfutils はユーティリティ集であり、eu-ld(リンカ)、eu-nm (オブジェクトファイル
 からシンボルリストを生成)、eu-size (オブジェクト又はアーカイブファイルの
 セクションサイズ一覧を作成)、eu-strip (シンボルを削除)、eu-readelf (ELF ファイル
 構造をそのまま表示)、そして eu-elflint (適格な ELF ファイルかどうかをチェック)
 が含まれます。
Description-md5: f888bb36a86d79063156ad9a0a117cad
Multi-Arch: foreign
Homepage: https://sourceware.org/elfutils/
Tag: devel::buildtools, devel::testing-qa, interface::commandline,
 role::program, scope::utility, use::checking, use::viewing,
 works-with::software:source
Section: utils
Priority: optional
Filename: pool/main/e/elfutils/elfutils_0.187-1_amd64.deb
Size: 460288
MD5sum: 173c9411044c816df7e71e8d5d0b4d4a
SHA256: 415af60908bcaf1c493936c06ffd139a4ab688f990a3551a5f79f6f18f5d299a

binutils

# cat /var/lib/dpkg/info/binutils.list | grep \/bin\/
/usr/bin/addr2line
/usr/bin/ar
/usr/bin/as
/usr/bin/c++filt
/usr/bin/dwp
/usr/bin/elfedit
/usr/bin/gold
/usr/bin/gp-archive
/usr/bin/gp-collect-app
/usr/bin/gp-display-html
/usr/bin/gp-display-src
/usr/bin/gp-display-text
/usr/bin/gprof
/usr/bin/gprofng
/usr/bin/ld
/usr/bin/ld.bfd
/usr/bin/ld.gold
/usr/bin/nm
/usr/bin/objcopy
/usr/bin/objdump
/usr/bin/ranlib
/usr/bin/readelf
/usr/bin/size
/usr/bin/strings
/usr/bin/strip
YABUKI YukiharuYABUKI Yukiharu

対象

Debianの場合は、リポジトリのmainにあるもの。アーキテクチャは、amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x (2022-07-17時点)

YABUKI YukiharuYABUKI Yukiharu

使い方

YABUKI YukiharuYABUKI Yukiharu
command -v ibus-daemon
/usr/bin/ibus-daemon
eu-readelf -n /usr/bin/ibus-daemon 

オフセット 0x338 の 32 バイトのノートセクション [ 2] '.note.gnu.property':
  所有者         データ大きさタイプ
  GNU                   16  GNU_PROPERTY_TYPE_0
    X86 0xc0008002 data: 01 00 00 00

オフセット 0x358 の 36 バイトのノートセクション [ 3] '.note.gnu.build-id':
  所有者         データ大きさタイプ
  GNU                   20  GNU_BUILD_ID
   ビルド ID: 6c8322113f256db15976780e5dee8aa004b21bd5

オフセット 0x37c の 32 バイトのノートセクション [ 4] '.note.ABI-tag':
  所有者         データ大きさタイプ
  GNU                   16  GNU_ABI_TAG
    OS: Linux, ABI: 3.2.0

shortcut

eu-readelf -n /usr/bin/ibus-daemon  | grep ビルド
   ビルド ID: 6c8322113f256db15976780e5dee8aa004b21bd5

RHのblogに書いてあるのと異なり、ビルドが日本語なのでgrep対象も日本語に変更している。

取得

 debuginfod -U -F /usr/lib/debug/
[2022年07月29日 16時03分41秒] (3199742/3199742): opened database /home/yabuki/.debuginfod.sqlite rw ro
[2022年07月29日 16時03分41秒] (3199742/3199742): sqlite version 3.39.2
[2022年07月29日 16時03分41秒] (3199742/3199742): service mode active
[2022年07月29日 16時03分41秒] (3199742/3199742): started http server on IPv4 IPv6 port=8002
[2022年07月29日 16時03分41秒] (3199742/3199742): search concurrency 16
[2022年07月29日 16時03分41秒] (3199742/3199742): webapi connection pool 0 (unlimited)
[2022年07月29日 16時03分41秒] (3199742/3199742): rescan time 300
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache fds 160
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache mbs 222796
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache prefetch 64
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache tmpdir /tmp
[2022年07月29日 16時03分41秒] (3199742/3199742): fdcache tmpdir min% 25
[2022年07月29日 16時03分41秒] (3199742/3199742): groom time 86400
[2022年07月29日 16時03分41秒] (3199742/3199742): prefetch fds 0
[2022年07月29日 16時03分41秒] (3199742/3199742): prefetch mbs 0
[2022年07月29日 16時03分41秒] (3199742/3199742): forwarded ttl limit 8
[2022年07月29日 16時03分41秒] (3199742/3199742): accepting archive types .ddeb((bsdtar -O -x -f - data.tar\*)<) .deb((bsdtar -O -x -f - data.tar\*)<) .ipk((bsdtar -O -x -f - data.tar\*)<) 
[2022年07月29日 16時03分41秒] (3199742/3199742): upstream debuginfod servers: https://debuginfod.debian.net
[2022年07月29日 16時03分42秒] (3199742/3199744): grooming database
[2022年07月29日 16時03分42秒] (3199742/3199745): fts traversed source paths in 0.000256602s, scanned=11, regex-skipped=0
[2022年07月29日 16時03分42秒] (3199742/3199744): database record counts:
[2022年07月29日 16時03分42秒] (3199742/3199744): file d/e 0
[2022年07月29日 16時03分42秒] (3199742/3199744): file s 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive d/e 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive sref 0
[2022年07月29日 16時03分42秒] (3199742/3199744): archive sdef 0
[2022年07月29日 16時03分42秒] (3199742/3199744): buildids 0
[2022年07月29日 16時03分42秒] (3199742/3199744): filenames 0
[2022年07月29日 16時03分42秒] (3199742/3199744): files scanned (#) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): files scanned (mb) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): index db size (mb) 0
[2022年07月29日 16時03分42秒] (3199742/3199744): groomed database in 0.0014815s

たぶん ここのdebuginfod -F オプションと-Uオプションの使い方で何を指定するのかが
わかってないのがソースコードをちゃんと取れない原因な気がする。

YABUKI YukiharuYABUKI Yukiharu

gdb

debuginfodが適切に設定されていれば、GDBから下記のような設定ができるようだ。

Debuginfod Settings (Debugging with GDB)

K.1 Debuginfod Settings

GDB provides the following commands for configuring debuginfod.

set debuginfod enabled
set debuginfod enabled on

GDB will attempt to query debuginfod servers when missing debug info or source files.

set debuginfod enabled off

GDB will not attempt to query debuginfod servers when missing debug info or source files. By default, debuginfod enabled is set to off for non-interactive sessions.

set debuginfod enabled ask

GDB will prompt the user to enable or disable debuginfod before attempting to perform the next query. By default, debuginfod enabled is set to ask for interactive sessions.

show debuginfod enabled

Display whether debuginfod enabled is set to on, off or ask.

set debuginfod urls
set debuginfod urls urls

Set the space-separated list of URLs that debuginfod will attempt to query. Only http://, https:// and file:// protocols should be used. The default value of debuginfod urls is copied from the DEBUGINFOD_URLS environment variable.

show debuginfod urls

Display the list of URLs that debuginfod will attempt to query.

set debuginfod verbose
set debuginfod verbose n

Enable or disable debuginfod-related output. Use a non-zero value to enable and 0 to disable. debuginfod output is shown by default.

show debuginfod verbose

Show the current verbosity setting.

YABUKI YukiharuYABUKI Yukiharu

start with gdb

gdb -args /usr/bin/ibus -xrd
GNU gdb (Debian 12.1-3) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/ibus...

This GDB supports auto-downloading debuginfo from the following URLs:
https://debuginfod.debian.net
Enable debuginfod for this session? (y or [n]) y
Debuginfod has been enabled.
To make this setting permanent, add 'set debuginfod enabled on' to .gdbinit.
Downloading 0.05 MB separate debug info for /usr/bin/ibus
Reading symbols from /home/yabuki/.cache/debuginfod_client/9bafb2afe4a66cbece3720f7c47126d74c054ac0/debuginfo...                         
Downloading 0.06 MB separate debug info for /home/yabuki/.cache/debuginfod_client/9bafb2afe4a66cbece3720f7c47126d74c054ac0/debuginfo
(gdb)               
  (gdb) list
Download failed: 無効な引数です.  Continuing without source file ./tools/./tools/main.c.
2417    ./tools/main.c: そのようなファイルやディレクトリはありません.

download and ignore command line option

(gdb) run
Starting program: /usr/bin/ibus -xrd
Downloading 0.03 MB separate debug info for system-supplied DSO at 0x7ffff7fca000
Downloading 2.57 MB separate debug info for /lib/x86_64-linux-gnu/libgio-2.0.so.0                                                        
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                    
Downloading 0.03 MB separate debug info for /home/yabuki/.cache/debuginfod_client/b4aa7e0d7555adb6fac9cc410b7d60fc09aa1607/debuginfo     
Downloading 1.25 MB separate debug info for /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                       
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libibus-1.0.so.5                                                       
Downloading 0.02 MB separate debug info for /lib/x86_64-linux-gnu/libgmodule-2.0.so.0                                                    
Downloading 0.10 MB separate debug info for /lib/x86_64-linux-gnu/libz.so.1                                                              
Downloading 0.23 MB separate debug info for /lib/x86_64-linux-gnu/libselinux.so.1                                                        
Downloading 0.06 MB separate debug info for /lib/x86_64-linux-gnu/libffi.so.8                                                            
Downloading 0.46 MB separate debug info for /lib/x86_64-linux-gnu/libpcre.so.3                                                           
[Thread debugging using libthread_db enabled]                                                                                            
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Downloading 0.62 MB separate debug info for /lib/x86_64-linux-gnu/libpcre2-8.so.0
-xrd は不明なコマンドです。                                                                                                              
                                                           
使い方: ibus コマンド [オプション...]

コマンド:
  engine          エンジンを設定もしくは表示する
  exit            ibus-daemon を終了する
  list-engine     利用可能なエンジンを表示する
  watch           (実装されていません)
  restart         ibus-daemon を再起動する
  version         バージョンを表示する
  read-cache      レジストリーキャッシュの内容を表示する
  write-cache     レジストリーキャッシュを作成する
  address         ibus-daemon の D-Bus アドレスを表示する
  read-config     設定値を表示する
  reset-config    設定値を初期化する
  emoji           ダイアログ上の絵文字をクリップボードに保存する
  help            この情報を表示する
[Inferior 1 (process 318931) exited with code 01]

 (gdb)