Proxmox baru saja merilis repository khusus untuk paket debug symbol di https://dbgsym.proxmox.com/. Paket -dbgsym berisi informasi debug untuk paket binary pasangannya, berguna saat kalian perlu menganalisis crash atau hang dengan tools seperti gdb, systemd-coredump, atau crash. Repository ini berlaku untuk Proxmox VE, PBS, PMG, dan PDM berbasis Debian 12 (Bookworm) dan Debian 13 (Trixie). Di panduan ini saya contohkan implementasi dan pengujiannya di Proxmox VE 9 (Trixie).
Informasi Lab
| Item | Keterangan |
|---|---|
| Produk | Proxmox VE 9 (Debian 13 Trixie) |
| Node | pverafi1 |
| Akses | root via SSH atau shell web UI |
| Kebutuhan | Koneksi internet ke dbgsym.proxmox.com |
Catatan: paket dbgsym bersifat inert (tidak mempengaruhi operasi normal), jadi aman dipasang di sistem production maupun test. Repository ini juga publik, tidak ada pembedaan enterprise atau no-subscription.
1. Menambahkan Repository dbgsym
Buat file repository dalam format deb822 di /etc/apt/sources.list.d/pve-dbgsym.sources:
cat > /etc/apt/sources.list.d/pve-dbgsym.sources << 'EOF'
Types: deb
URIs: https://dbgsym.proxmox.com/debian/pve
Suites: trixie
Components: pve-dbgsym
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
Jika memakai versi lain, sesuaikan bagian produk pada URI dan component (pbs, pmg, pdm) serta suite (bookworm untuk Debian 12).
Update index paket:
apt update
Pastikan repository baru ikut ter-fetch. Di output apt update harus muncul baris dari dbgsym.proxmox.com, kurang lebih seperti ini:
Get: https://dbgsym.proxmox.com/debian/pve trixie InRelease
Bisa juga dicek lewat:
apt policy | grep dbgsym
2. Melihat Paket dbgsym yang Tersedia
Cek daftar paket debug symbol yang bisa dipasang:
apt list 2>/dev/null | grep dbgsym | head -20
Kalian akan melihat paket seperti pve-qemu-kvm-dbgsym, pve-manager-dbgsym, dan sebagainya.
3. Instalasi Paket dbgsym
Install paket dbgsym yang cocok dengan binary yang ingin kalian debug. Contoh untuk QEMU:
apt install pve-qemu-kvm-dbgsym gdb -y
Install gdb untuk pengujian di langkah berikutnya.
Verifikasi file debug sudah masuk ke /usr/lib/debug:
dpkg -L pve-qemu-kvm-dbgsym | head
Output harus menunjukkan file di bawah /usr/lib/debug/.build-id/.
4. Verifikasi Pasangan Build ID
Setiap binary Linux modern punya identitas unik (build ID) yang dipakai gdb untuk mencari file debug pasangannya secara otomatis. Ambil build ID dari binary QEMU:
readelf -n /usr/bin/qemu-system-x86_64 | grep "Build ID"
Contoh output:
Build ID: 1d5ac8f0a05d7978645a38aaeac6cd9e6f32e539
Cocokkan nilai ini dengan nama file di /usr/lib/debug/.build-id/ (dua karakter pertama jadi nama folder, sisanya jadi nama file .debug):
ls /usr/lib/debug/.build-id/1d/
Kalau muncul file 5ac8f0a05d7978645a38aaeac6cd9e6f32e539.debug, berarti file debug untuk binary tersebut sudah lengkap dan siap dipakai gdb. Kalau tidak ada, berarti versi paket binary dan dbgsym tidak sinkron (lihat troubleshooting).
Catatan: pengecekan dengan gdb -batch -ex quit <binary> sering dipakai sebagai tes cepat, tapi pesan Reading symbols from ... tidak selalu tampil di mode batch meskipun symbol sudah terbaca dengan benar. Jadi verifikasi build-id di atas lebih bisa diandalkan daripada mengandalkan ada tidaknya pesan tersebut.
5. Pengujian dengan Proses Live
Cara paling meyakinkan untuk membuktikan debug symbol benar-benar berfungsi adalah attach gdb ke proses QEMU yang sedang berjalan, tanpa mematikannya. VM akan freeze sesaat selama gdb attach, jadi gunakan VM test, bukan VM production.
Cari PID proses QEMU untuk VM tertentu. Proxmox menyimpan PID di /var/run/qemu-server/<VMID>.pid:
cat /var/run/qemu-server/<VMID>.pid
Attach gdb ke PID tersebut, ambil backtrace semua thread, lalu langsung lepas:
gdb -batch -p <PID> -ex "thread apply all bt" -ex detach -ex quit
Kalau debug symbol berfungsi, backtrace akan menunjukkan nama fungsi dan lokasi source, bukan alamat mentah. Contoh potongan hasil pengujian saya di thread utama QEMU:
Thread 1 (Thread ... "kvm"):
#5 qemu_poll_ns (fds=<optimized out>, nfds=<optimized out>, timeout=<optimized out>) at ../util/qemu-timer.c:343
#6 0x... in os_host_main_loop_wait (timeout=989602) at ../util/main-loop.c:308
#7 main_loop_wait (nonblocking=nonblocking@entry=0) at ../util/main-loop.c:592
#8 0x... in qemu_main_loop () at ../system/runstate.c:946
#9 0x... in qemu_default_main (opaque=opaque@entry=0x0) at ../system/main.c:50
#10 0x... in main (argc=<optimized out>, argv=<optimized out>) at ../system/main.c:93
[Inferior 1 (process ...) detached]
Dua hal yang wajar muncul di output dan bukan tanda gagal:
- Baris
?? () from /lib/x86_64-linux-gnu/libc.so.6: berasal dari glibc, di luar cakupan paketpve-qemu-kvm-dbgsym. Kalau mau symbol glibc ikut terbaca, perlu paket debug terpisah dari Debian (libc6-dbg). - Thread seperti
kvm-nx-lpage-reatauiou-wrk-*yang menunjukkanCannot access memory at address 0x0: ini kernel worker thread, gdb memang tidak bisa unwind stack userspace untuk thread jenis ini.
Troubleshooting
| Gejala | Penyebab | Solusi |
|---|---|---|
apt update error 404 di repo dbgsym | Suite atau produk di file .sources tidak sesuai | Cocokkan suite (trixie/bookworm) dan produk (pve/pbs/pmg/pdm) dengan sistem kalian |
Error NO_PUBKEY atau signature | File keyring tidak ada | Pastikan paket proxmox-archive-keyring terpasang: apt install proxmox-archive-keyring |
| gdb tetap bilang no debugging symbols | Versi paket binary dan dbgsym tidak sama | Jalankan apt update && apt upgrade agar versi keduanya sinkron, lalu install ulang paket dbgsym |
| Dulu install debug package dari repo standar, sekarang tidak dapat update | Paket dbgsym sudah dipindah ke repo terpisah | Tambahkan repository dbgsym seperti langkah 1 |
Penutup
Dengan repository ini, kalian tidak perlu lagi mencari paket debug di repo standar saat menganalisis crash di Proxmox. Semoga bermanfaat.









