# Installation

There are several options for installing drgn.

## Dependencies

drgn depends on:

- Python 3.8 or newer

- elfutils 0.165 or newer

It optionally depends on:

- libkdumpfile for makedumpfile compressed kernel core dump format support

- liblzma for MiniDebuginfo support

- PCRE2 for searching memory with regular expressions.

- json-c for QEMU Machine Protocol support

The build requires:

- GCC

- GNU Make

- pkgconf

- setuptools

Running tests requires:

- check 0.10.0 or newer

Building from the Git repository (rather than a release tarball) additionally requires:

- autoconf

- automake

- libtool

## Installation

### Package Manager

drgn can be installed using the package manager on some Linux distributions.

- Fedora, RHEL/CentOS Stream >= 9

      $ sudo dnf install drgn

- RHEL/CentOS < 9

  Enable EPEL. Then:

      $ sudo dnf install drgn

- Oracle Linux >= 8

  Enable the `ol8_addons` or `ol9_addons` repository. Then:

      $ sudo dnf config-manager --enable ol8_addons  # OR: ol9_addons
      $ sudo dnf install drgn

  drgn is also available for Python versions in application streams. For example, use `dnf install python3.12-drgn` to install drgn for Python 3.12. See the documentation for drgn in Oracle Linux 9 and Oracle Linux 8 for more information.

- Debian >= 12 (Bookworm)/Ubuntu >= 24.04 (Noble Numbat)

      $ sudo apt install python3-drgn

  To get the latest version on Ubuntu, enable the michel-slm/kernel-utils PPA first.

- Arch Linux

      $ sudo pacman -S drgn

- Gentoo

      $ sudo emerge dev-debug/drgn

- openSUSE

      $ sudo zypper install python3-drgn

### pip

If your Linux distribution doesn’t package the latest release of drgn, you can install it with pip.

First, install pip. Then, run:

    $ sudo pip3 install drgn

This will install a binary wheel by default. If you get a build error, then pip wasn’t able to use the binary wheel. Install the dependencies listed below and try again.

Note that RHEL/CentOS 7, Debian 10 (“buster”), and Ubuntu 18.04 (“Bionic Beaver”) (and older) ship Python versions which are too old. Python 3.8 or newer must be installed.

### From Source

To get the development version of drgn, you will need to build it from source. First, install dependencies:

- Fedora, RHEL/CentOS Stream >= 9

      $ sudo dnf install autoconf automake check-devel elfutils-debuginfod-client-devel elfutils-devel gcc git json-c-devel libkdumpfile-devel libtool make pcre2-devel pkgconf python3 python3-devel python3-pip python3-setuptools xz-devel

- RHEL/CentOS < 9, Oracle Linux

      $ sudo dnf install autoconf automake check-devel elfutils-devel gcc git json-c-devel libtool make pcre2-devel pkgconf python3 python3-devel python3-pip python3-setuptools xz-devel

  Optionally, install `libkdumpfile-devel` from EPEL on RHEL/CentOS >= 8 or install libkdumpfile from source if you want support for the makedumpfile format. For Oracle Linux >= 7, `libkdumpfile-devel` can be installed directly from the corresponding addons repository (e.g. `ol9_addons`).

  Replace `dnf` with `yum` for RHEL/CentOS/Oracle Linux < 8.

  When building on RHEL/CentOS/Oracle Linux < 8, you may need to use a newer version of GCC, for example, using the `devtoolset-12` developer toolset. Check your distribution’s documentation for information on installing and using these newer toolchains.

- Debian/Ubuntu

      $ sudo apt install autoconf automake check gcc git libdebuginfod-dev libjson-c-dev libkdumpfile-dev liblzma-dev libelf-dev libdw-dev libpcre2-dev libtool make pkgconf python3 python3-dev python3-pip python3-setuptools zlib1g-dev

  On Debian <= 11 (Bullseye) and Ubuntu <= 22.04 (Jammy Jellyfish), `libkdumpfile-dev` is not available, so you must install libkdumpfile from source if you want support for the makedumpfile format.

- Arch Linux

      $ sudo pacman -S --needed autoconf automake check gcc git json-c libelf libkdumpfile libtool make pcre2 pkgconf python python-pip python-setuptools xz

- Gentoo

      $ sudo emerge --noreplace --oneshot dev-build/autoconf dev-build/automake dev-libs/check dev-libs/elfutils dev-libs/json-c dev-libs/libpcre2 sys-devel/gcc dev-vcs/git dev-libs/libkdumpfile dev-build/libtool dev-build/make dev-python/pip virtual/pkgconfig dev-lang/python dev-python/setuptools app-arch/xz-utils

- openSUSE

      $ sudo zypper install autoconf automake check-devel gcc git libdebuginfod-devel libdw-devel libelf-devel libjson-c-devel libkdumpfile-devel libtool make pcre2-devel pkgconf python3 python3-devel python3-pip python3-setuptools xz-devel

Then, run:

    $ git clone https://github.com/osandov/drgn.git
    $ cd drgn
    $ python3 setup.py build
    $ sudo python3 setup.py install

### Virtual Environment

The above options all install drgn globally. You can also install drgn in a virtual environment, either with pip:

    $ python3 -m venv drgnenv
    $ source drgnenv/bin/activate
    (drgnenv) $ pip3 install drgn
    (drgnenv) $ drgn --help

Or from source:

    $ python3 -m venv drgnenv
    $ source drgnenv/bin/activate
    (drgnenv) $ python3 setup.py install
    (drgnenv) $ drgn --help

## Running Locally

If you build drgn from source, you can also run it without installing it:

    $ python3 setup.py build_ext -i
    $ python3 -m drgn --help