Ubuntu Debuginfod

Jonas Jelten Publisher

Platform:

Ubuntu
24.04
Channel Revision Published Runs on
latest/edge 11 28 Apr 2026
Ubuntu 24.04
juju deploy ubuntu-debuginfod --channel edge

A charm for deploying ubuntu-debuginfod to serve Ubuntu package's debugging symbols to gdb.

ubuntu-debuginfod Operator

Charmhub package: ubuntu-debuginfod

Deploy ubuntu-debuginfod and debuginfod to serve debugging symbols of Ubuntu's distribution packages to debuggers like GDB.

About

Entrypoint: src/charm.py.

When the Charm is installed, it:

  • adds the ubuntu-debuginfod PPA
  • installs ubuntu-debuginfod
  • installs and sets up systemd services
    • debuginfod.service: provides files to debuggers via http (port 8002 default)
    • ubuntu-debuginfod-launchpad-poller.service & .timer: asks launchpad about new packages
    • ubuntu-debuginfod-celery.service: processes jobs and downloads debug symbols from archive

Other resources

GitHub integration

We use some GitHub actions to test and release the charm code.

To retrieve the needed "CHARMHUB_TOKEN" for authentication (used by charmcraft via env CHARMCRAFT_AUTH), run:

charmcraft login --export /tmp/charmcreds.auth --charm ubuntu-debuginfod --permission=package-view --permission=package-manage-revisions --permission=package-manage-releases --channel "latest/edge" --channel "latest/stable" --ttl $((10 * 365 * 24 * 60 * 60))

Store the exported output text as a GitHub project secret under CHARMHUB_TOKEN (because that name is hardcoded in several "included" workflows).

Ingress integration

To integrate into enterprise-style infrastructure landscapes, this charm provides the debuginfod-http-ingress relation (interface: ingress). This allows dynamically routing traffic via proxies to the debuginfod service.

In production, this is typically wired through an ingress provider chain (for example ingress-configurator -> offered machine-ingress).

To test locally with a simple ingress provider:

% charmcraft pack
% juju deploy ./ubuntu-debuginfod_*.charm ubuntu-debuginfod --config testmode=true

% juju deploy haproxy --channel 2.8/edge --config external-hostname=debuginfod.local
% juju deploy self-signed-certificates --channel 1/edge
% juju integrate haproxy:certificates self-signed-certificates:certificates

# ingress relation (auto-matched by ingress interface)
% juju integrate ubuntu-debuginfod haproxy

# proxy relay test for debuginfod API path
# you'll get a 404 not found for this unknown build id
% curl -i -k -H "Host: debuginfod.local" "https://$haproxy_ip/$model_name-ubuntu-debuginfod/buildid/0000000000000000000000000000000000000000/debuginfo"