<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="65">
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.0" rel="1"/>
  <checksum type="sha256" pkgid="YES">5ce9deb1c921182946b77104e0e241ee9ce69efe45c866b6b0e5c8b2a2de54e7</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1778116388" build="1697765037"/>
  <size package="175148" installed="555908" archive="614604"/>
  <location href="patchman-3.0.0-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.0-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="64961"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.0" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.0" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.10" rel="1"/>
  <checksum type="sha256" pkgid="YES">f75f4f0453a18505ed1164ddd2097ad57b6a00063f4dd2cec8d6f82cabc37fc4</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907214" build="1723088434"/>
  <size package="191345" installed="594417" archive="666304"/>
  <location href="patchman-3.0.10-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>72d7c0bc2b45</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.10-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="75489"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.10" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.10" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.13" rel="1"/>
  <checksum type="sha256" pkgid="YES">9800af45b29a126f1ff1b90db126204dffc2257b2948fa6226c6831cfc6d2b3f</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907214" build="1734367052"/>
  <size package="191537" installed="595010" archive="666896"/>
  <location href="patchman-3.0.13-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>95f49fdc5a11</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.13-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="75489"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.13" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.13" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.14" rel="1"/>
  <checksum type="sha256" pkgid="YES">3873fa273ca0cb3a00eeb9d4ebf20f84cac4d490a39b0cb9bf8610781b36e6b6</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907214" build="1738616348"/>
  <size package="192735" installed="598321" archive="670752"/>
  <location href="patchman-3.0.14-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>304a9c244ac2</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.14-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="75973"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.14" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.14" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.15" rel="1"/>
  <checksum type="sha256" pkgid="YES">453eee337f736a7a469b4209f1ebb606d734f731a894bbeb650f6ebcf734b01c</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907214" build="1738991197"/>
  <size package="193330" installed="599901" archive="672956"/>
  <location href="patchman-3.0.15-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>97ef157ab34e</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.15-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="76425"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.15" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.15" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.16" rel="1"/>
  <checksum type="sha256" pkgid="YES">2422220aee8eb23560225940e7acd4c4e34f9e56545ac424868a8d1229503240</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1740547592"/>
  <size package="193349" installed="599901" archive="672956"/>
  <location href="patchman-3.0.16-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>295e3fdba80c</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.16-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="76425"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.16" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.16" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.17" rel="1"/>
  <checksum type="sha256" pkgid="YES">2111086977b9112ef3475fbe5b0d61fbe3717eb2da9e01168e5bf8c5c23c0410</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
python3-yaml
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1740672487"/>
  <size package="193363" installed="599935" archive="672992"/>
  <location href="patchman-3.0.17-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>4851f527276e</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.17-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="76441"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.17" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.17" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.19" rel="1"/>
  <checksum type="sha256" pkgid="YES">44ce37c7df0a0118b6f49df48ea705e5506123521897df57d8f794332fa83eda</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
python3-yaml
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1740861944"/>
  <size package="193392" installed="599943" archive="673000"/>
  <location href="patchman-3.0.19-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>f8ff1369405f</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.19-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="76441"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.19" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.19" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.3" rel="1"/>
  <checksum type="sha256" pkgid="YES">bf4de5599bee08fea4ef10f41703f3e6febc7a499821b414af2d4e9813ed6c21</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1701922650"/>
  <size package="174714" installed="555945" archive="614640"/>
  <location href="patchman-3.0.3-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>284eade3f563</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.3-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="64545"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.3" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.3" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.4" rel="1"/>
  <checksum type="sha256" pkgid="YES">6561d7c78c81e558ce2493876c5968e958d4707316342a9aeadec2a1522fe19f</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1701925058"/>
  <size package="174710" installed="555945" archive="614640"/>
  <location href="patchman-3.0.4-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>ec3d4ac17e6d</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.4-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="64545"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.4" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.4" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.6" rel="1"/>
  <checksum type="sha256" pkgid="YES">4973248bd15b3b7f603a79374e1475d22646d8964af6b4a33951a8e031270c5c</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907215" build="1702353260"/>
  <size package="189886" installed="591186" archive="661800"/>
  <location href="patchman-3.0.6-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>9307a5e367ca</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.6-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="74509"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.6" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.6" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.7" rel="1"/>
  <checksum type="sha256" pkgid="YES">b2e80f84757801658e3462f69fac74f195aac1326386d496518c3c9bc999965d</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1704427859"/>
  <size package="189885" installed="591186" archive="661800"/>
  <location href="patchman-3.0.7-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>86dd768c8d64</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.7-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="74509"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.7" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.7" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.8" rel="1"/>
  <checksum type="sha256" pkgid="YES">52de239d489b97893a76adc6f614b931abdcd0aa1382335a5b01320c233aa297</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1707104926"/>
  <size package="191331" installed="594071" archive="665956"/>
  <location href="patchman-3.0.8-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>c1a0e5a12896</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.8-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="75485"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.8" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.8" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.9" rel="1"/>
  <checksum type="sha256" pkgid="YES">d102b5be7f2bf167e602540ce76361a13359ad0b16651b285a615a80b1932ee0</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/master/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate hosts, repositories, packages, operating systems and
reports.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.org
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-u] [-A] [-H HOST]
                [-p] [-c] [-d] [-n] [-a] [-D hostA hostB]

Patchman CLI tool

optional arguments:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh repositories
  -R REPO, --repo REPO  Only perform action on a specific repository (repo_id)
  -lr, --list-repos     List all repositories
  -lh, --list-hosts     List all hosts
  -u, --host-updates    Find host updates
  -A, --host-updates-alt
                        Find host updates (alternative algorithm that may be
                        faster when there are many homogeneous hosts)
  -H HOST, --host HOST  Only perform action on a specific host (fqdn)
  -p, --process-reports
                        Process pending reports
  -c, --clean-reports   Remove all but the last three reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -n, --dns-checks      Perform reverse DNS checks if enabled for that host
  -a, --all             Convenience flag for -r -A -p -c -d -n
  -D hostA hostB, --diff hostA hostB
                        Show differences between two hosts in diff-like output
  -e, --errata          Download CentOS errata from https://cefs.steve-
                        meier.de/
```






```
python3-django
python3-django-tagging
python3-django-extensions
python3-django-bootstrap3
python3-djangorestframework
python3-debian
python3-rpm
python3-progressbar
python3-lxml
python3-defusedxml
python3-requests
python3-colorama
python3-magic
python3-humanize
```

The server can optionally make use of celery to asynchronously process the
reports sent by hosts.




The client-side dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems.

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects - Hosts, Repositories, Packages, Operating
Systems and Reports. There are also Operating System Groups (which are optional)
and Mirrors.


A Host is a single host, e.g. test01.example.org.


A Host runs an Operating System, e.g. CentOS 7.7, Debian 10.1, Ubuntu 18.04


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el7.x86_64`,
`grub2-tools-2.02-0.34.el7.centos.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum`, `yast`
or `apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For CentOS security
updates, see the Erratum section below.


A Host creates a Report using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Host's Operating System, and lists
of the installed Packages and enabled Repositories on the Host. The Patchman
server processes and records the list of Packages and Repositories contained in
the Report.


An OSGroup is a collection of OS's. For example, an OSGroup named "Ubuntu 18.04"
would be comprised of the following OS's:

```
Ubuntu 18.04.1
Ubuntu 18.04.2
Ubuntu 18.04.5
```

Likewise, an OSGroup named "CentOS 7" would be made up of the following OS's:

```
CentOS 7.5
CentOS 7.7.1511
```

Repositories can be associated with an OSGroup, or with the Host itself. If the
`use_host_repos variable` is set to True for a Host, then updates are found by
looking only at the Repositories that belong to that Host. This is the default
behaviour and does not require OSGroups to be configured.

If `use_host_repos` is set to False, the update-finding process looks at the
OSGroup that the Host's Operating System is in, and uses the OSGroup's
Repositories to determine the applicable updates. This is useful in environments
where many hosts are homogeneous (e.g. cloud/cluster environments).


Errata for CentOS can be downloaded from https://cefs.steve-meier.de/ .
These errata are parsed and stored in the database. If a PackageUpdate
contains a package that is a security update in the errata, then that update is
marked as being a security update.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1719177798"/>
  <size package="191291" installed="594162" archive="666044"/>
  <location href="patchman-3.0.9-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>733e5c2bfdfb</rpm:buildhost>
    <rpm:sourcerpm>patchman-3.0.9-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="75485"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="3.0.9" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="3.0.9" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="3.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-tagging"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-lxml"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-progressbar2"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.10" rel="1"/>
  <checksum type="sha256" pkgid="YES">d9200a5b553aca710eb953bd3ccd6f354862afae257d830f960f11dcb94da4aa</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1772072706"/>
  <size package="521823" installed="2073684" archive="2246984"/>
  <location href="patchman-4.0.10-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>972806517ec6</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.10-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="158169"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.10" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.10" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.11" rel="1"/>
  <checksum type="sha256" pkgid="YES">9fb0436ce888f4e7a3280c47dad3fcbc8402852965950ddb27ed4676e7075cfa</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1772085015"/>
  <size package="521762" installed="2073768" archive="2247068"/>
  <location href="patchman-4.0.11-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>16f8f052cea0</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.11-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="158169"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.11" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.11" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.12" rel="1"/>
  <checksum type="sha256" pkgid="YES">2b51408e1db467a32156a2dc322e11662baae21f03899308eff24d57ce48b3e6</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907216" build="1772297552"/>
  <size package="522936" installed="2082747" archive="2256056"/>
  <location href="patchman-4.0.12-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>ad06a499415e</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.12-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="158173"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.12" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.12" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.14" rel="1"/>
  <checksum type="sha256" pkgid="YES">334c6bdffbef8a612eb86eba10dc6d65e9e82f090cea6f6988cef1abf76a7d3e</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1772491798"/>
  <size package="535675" installed="2169021" archive="2342332"/>
  <location href="patchman-4.0.14-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>89ae40651dc1</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.14-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="158173"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.14" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.14" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.15" rel="1"/>
  <checksum type="sha256" pkgid="YES">1ced8b8258838a8b0a60fd28e5bcfe00f136cd65f4b1d27f66db5e0eca0d07ab</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1772502451"/>
  <size package="539116" installed="2177216" archive="2353508"/>
  <location href="patchman-4.0.15-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>e062de5816a8</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.15-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="160533"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.15" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.15" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.16" rel="1"/>
  <checksum type="sha256" pkgid="YES">95eb66ecbe48c955ba9c7f16205eb71ca2f0264489a9ffd6f609262b03d3cb5d</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1772641229"/>
  <size package="539611" installed="2178544" archive="2355508"/>
  <location href="patchman-4.0.16-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>f06628b328c4</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.16-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="161049"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.16" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.16" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.17" rel="1"/>
  <checksum type="sha256" pkgid="YES">8fea4cb438a9899697e11d093dc15c548091a81e65b070d6227b35197e18e8f4</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1772689110"/>
  <size package="539625" installed="2178549" archive="2355512"/>
  <location href="patchman-4.0.17-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>314525bd3331</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.17-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="161049"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.17" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.17" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.18" rel="1"/>
  <checksum type="sha256" pkgid="YES">5fbec852c3f16b8e80289a1f612c58741af52a0d0c434630b27fb82759754bbb</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1772767354"/>
  <size package="543611" installed="2198014" archive="2375544"/>
  <location href="patchman-4.0.18-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>d6d41e474f62</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.18-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="161501"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.18" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.18" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.19" rel="1"/>
  <checksum type="sha256" pkgid="YES">2f1a6012fb3dc4cc1e412640ec8960fb6ee2141ccc0dfff72453ca06edae9fce</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907217" build="1777425952"/>
  <size package="552767" installed="2239392" archive="2417736"/>
  <location href="patchman-4.0.19-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>bbefc6755732</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.19-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="162097"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.19" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.19" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.20" rel="1"/>
  <checksum type="sha256" pkgid="YES">dcc0902a29b5abd4b039f51fc4b473ca5da77bd638ded3929ded5aa3faf0303c</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1778115985"/>
  <size package="557774" installed="2252952" archive="2435472"/>
  <location href="patchman-4.0.20-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>c8dd448e87f0</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.20-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="165361"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.20" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.20" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.21" rel="1"/>
  <checksum type="sha256" pkgid="YES">0bdce9f8d1a444a7bac4af4ea73197a39ced7c0c1efeb64813926f77e81d1081</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1780032961" build="1780032859"/>
  <size package="558102" installed="2253043" archive="2435560"/>
  <location href="patchman-4.0.21-1.noarch.rpm"/>
  <format>
    <rpm:license>GPL-3.0-only</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>3d5c2b246df7</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.21-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="165389"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.21" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.21" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker@.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.4" rel="1"/>
  <checksum type="sha256" pkgid="YES">a658a8c3fdca6b13da833e6b05dda1a198f0584c5c7c27ce0ec528aa114b8a3d</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1770086886"/>
  <size package="419188" installed="1620232" archive="1780524"/>
  <location href="patchman-4.0.4-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>76da2438f568</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.4-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="148417"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.4" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.4" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.5" rel="1"/>
  <checksum type="sha256" pkgid="YES">0c675813c224be594bfb2a49e44058a2083d1769a234f5995eafe8f556e1b7e6</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1770089709"/>
  <size package="419099" installed="1620325" archive="1780616"/>
  <location href="patchman-4.0.5-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>4f821f9e8e46</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.5-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="148417"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.5" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.5" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.7" rel="1"/>
  <checksum type="sha256" pkgid="YES">39c96c77c293d245783349bb6af05d58d23c4929fd63df083e712efbefb84ed0</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1770175060"/>
  <size package="496510" installed="1970444" archive="2132092"/>
  <location href="patchman-4.0.7-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>2bb24a8ee720</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.7-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="149057"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.7" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.7" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.8" rel="1"/>
  <checksum type="sha256" pkgid="YES">5cb4c7f2e2ce8aa94c5321cf3bc76d1e8bbce7d4faec261cb536aa8eb63513a5</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1770589455"/>
  <size package="502343" installed="2010892" archive="2172544"/>
  <location href="patchman-4.0.8-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>b48cde89e795</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.8-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="149109"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.8" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.8" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.9" rel="1"/>
  <checksum type="sha256" pkgid="YES">597690e707a42ad18e220907e3a5a7f61735a4361cb28ad0f9bfce494a1ebdb8</checksum>
  <summary>Django based patch status monitoring tool for linux systems</summary>
  <description>




Patchman is a Django-based patch status monitoring tool for linux systems.
Patchman provides a web interface for monitoring the package updates available
for linux hosts.

[![](https://raw.githubusercontent.com/furlongm/patchman/gh-pages/screenshots/dashboard.png)](https://github.com/furlongm/patchman/tree/gh-pages/screenshots)




Patchman clients send a list of installed packages and enabled repositories to
the Patchman server. The Patchman server updates its package list for each
repository and determines which hosts require updates, and whether those updates
are normal or security updates. The web interface also gives information on
potential issues, such as installed packages that are not from any repository.

Hosts, packages, repositories and operating systems can all be filtered. For
example, it is possible to find out which hosts have a certain version of a
package installed, and which repository it comes from.

Patchman does not install update packages on hosts, it determines and displays
what updates are available for each host.

`yum`, `apt` and `zypper` plugins can send reports to the Patchman server every
time packages are installed or removed on a host.




See [the installation guide](https://github.com/furlongm/patchman/blob/main/INSTALL.md)
for installation options.




The web interface contains a dashboard with items that need attention, and
various pages to manipulate and view hosts, repositories and mirrors, packages,
operating system releases and variants, reports, errata and CVEs.

To populate the database, simply run the client on some hosts:

```shell
$ patchman-client -s http://patchman.example.com
```

This should provide some initial data to work with.

On the server, the `patchman` command line utility can be used to run certain
maintenance tasks, e.g. processing the reports sent from hosts, downloading
repository update information from the web. Run `patchman -h` for a rundown of
the usage:

```shell
$ sbin/patchman -h
usage: patchman [-h] [-f] [-q] [-r] [-R REPO] [-lr] [-lh] [-dh] [-u] [-A] [-shro | -uhro] [-sdns | -udns] [-H HOST] [-p] [-c] [-d] [-rd] [-n] [-a] [-D hostA hostB] [-e] [-E ERRATUM_TYPE] [-v] [--cve CVE] [--fetch-nist-data]

Patchman CLI tool

options:
  -h, --help            show this help message and exit
  -f, --force           Ignore stored checksums and force-refresh all Mirrors
  -q, --quiet           Quiet mode (e.g. for cronjobs)
  -r, --refresh-repos   Refresh Repositories
  -R REPO, --repo REPO  Only perform action on a specific Repository (repo_id)
  -lr, --list-repos     List all Repositories
  -lh, --list-hosts     List all Hosts
  -dh, --delete-hosts   Delete hosts, requires -H, matches substring patterns
  -u, --host-updates    Find Host updates
  -A, --host-updates-alt
                        Find Host updates (alternative algorithm that may be faster when there are many homogeneous hosts)
  -shro, --set-host-repos-only
                        Set host_repos_only, requires -H, matches substring patterns
  -uhro, --unset-host-repos-only
                        Unset host_repos_only, requires -H, matches substring patterns
  -sdns, --set-check-dns
                        Set check_dns, requires -H, matches substring patterns
  -udns, --unset-check-dns
                        Unset check_dns, requires -H, matches substring patterns
  -H HOST, --host HOST  Only perform action on a specific Host (fqdn)
  -p, --process-reports
                        Process pending Reports
  -c, --clean-reports   Remove all but the last three Reports
  -d, --dbcheck         Perform some sanity checks and clean unused db entries
  -rd, --remove-duplicates
                        Remove duplicates during dbcheck - this may take some time
  -n, --dns-checks      Perform reverse DNS checks if enabled for that Host
  -a, --all             Convenience flag for -r -A -p -c -d -n -e
  -D hostA hostB, --diff hostA hostB
                        Show differences between two Hosts in diff-like output
  -e, --update-errata   Update Errata
  -E ERRATUM_TYPE, --erratum-type ERRATUM_TYPE
                        Only update the specified Erratum type (e.g. `yum`, `ubuntu`, `arch`)
  -v, --update-cves     Update CVEs from https://cve.org
  --cve CVE             Only update the specified CVE (e.g. CVE-2024-1234)
  --fetch-nist-data, -nd
                        Fetch NIST CVE data in addition to MITRE data (rate-limited to 1 API call every 6 seconds)
```



The client dependencies are kept to a minimum. `rpm` and `dpkg` are
required to report packages, `yum`, `dnf`, `zypper` and/or `apt` are required
to report repositories. These packages are normally installed by default on
most systems. `which`, `mktemp`, `flock` and `curl` are also required.

For Protocol 2 (JSON-based reports), `jq` is required. If `jq` is not available,
the client will automatically fall back to Protocol 1 (text-based reports).

deb-based OS's do not always change the kernel version when a kernel update is
installed, so the `update-notifier-common` package can optionally be installed
to enable this functionality. rpm-based OS's can tell if a reboot is required
to install a new kernel by looking at `uname -r` and comparing it to the
highest installed kernel version, so no extra packages are required on those
OS's.




The default settings will be fine for most people but depending on your setup,
there may be some initial work required to logically organise the data sent in
the host reports. The following explanations may help in this case.

There are a number of basic objects: Hosts, Repositories and Mirrors, Packages,
Operating Systems Releases and Variants, Reports and Errata.


A Host is a single host, e.g. test-host-01.example.com.


A Host runs an Operating System Release, e.g. Rocky 10, Debian 13,
Ubuntu 24.04. The particular version running is called a Operating System
Variant. e.g. Debian 13.1, Ubuntu 24.04.4 and Variants are linked to a
Release. For some OS's like Arch Linux, there are no Variants.


A Package is a package that is either installed on a Host, or is available to
download from a Repository mirror, e.g. `strace-4.8-11.el10.x86_64`,
`grub2-tools-2.02-0.34.el10.rocky.x86_64`, etc.


A Mirror is a collection of Packages available on the web, e.g. a `yum` or
`apt` repo.


A Repository is a collection of Mirrors. Typically all the Mirrors will contain
the same Packages. For Red Hat-based Hosts, Repositories automatically link
their Mirrors together. For Debian-based hosts, you may need to link all
Mirrors that form a Repository using the web interface. This may reduce the
time required to find updates. Repositories can be marked as being security or
non-security. This makes most sense with Debian and Ubuntu repositories where
security updates are delivered via security repositories. For rpm security
updates, see the Erratum section below.

Repositories can be associated with an OS Release, or with the Host itself. If
the `use_host_repos` variable is set to True for a Host, then updates are found
by looking only at the Repositories that belong to that Host. This is the
default behaviour.

If `use_host_repos` is set to False, the update-finding process looks at the
OS Release that the Hosts Operating System Variant is associated with, and
uses that Releases Repositories to determine the applicable updates. This is
useful in environments where many hosts are homogeneous.


Hosts create Reports using `patchman-client`. This Report is sent to the
Patchman server. The Report contains the Hosts running kernel, Operating System,
installed Packages and enabled Repositories. The Patchman server processes the
Report records the information contained therein.


Errata for many OS's can downloaded by the patchman server. These Errata are
parsed and stored in the database. If a PackageUpdate contains a package that
is a security update in an Erratum, then that update is marked as being a
security update. CVE and CVSS data is used to complement this information.</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie/</url>
  <time file="1779907218" build="1770789994"/>
  <size package="506365" installed="2018671" archive="2184428"/>
  <location href="patchman-4.0.9-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor>Marcus Furlong &lt;furlongm@gmail.com&gt;</rpm:vendor>
    <rpm:group>Development/Libraries</rpm:group>
    <rpm:buildhost>e2c87f74e0ec</rpm:buildhost>
    <rpm:sourcerpm>patchman-4.0.9-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="152313"/>
    <rpm:provides>
      <rpm:entry name="config(patchman)" flags="EQ" epoch="0" ver="4.0.9" rel="1"/>
      <rpm:entry name="patchman" flags="EQ" epoch="0" ver="4.0.9" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/bin/sh" pre="1"/>
      <rpm:entry name="/usr/bin/python3"/>
      <rpm:entry name="celery"/>
      <rpm:entry name="httpd"/>
      <rpm:entry name="memcached"/>
      <rpm:entry name="policycoreutils-python-utils"/>
      <rpm:entry name="python3-GitPython"/>
      <rpm:entry name="python3-colorama"/>
      <rpm:entry name="python3-cvss"/>
      <rpm:entry name="python3-debian"/>
      <rpm:entry name="python3-defusedxml"/>
      <rpm:entry name="python3-django" flags="GE" epoch="0" ver="4.2.20"/>
      <rpm:entry name="python3-django-bootstrap3"/>
      <rpm:entry name="python3-django-celery-beat"/>
      <rpm:entry name="python3-django-extensions"/>
      <rpm:entry name="python3-django-filter"/>
      <rpm:entry name="python3-django-rest-framework"/>
      <rpm:entry name="python3-django-select2"/>
      <rpm:entry name="python3-django-tables2"/>
      <rpm:entry name="python3-django-taggit"/>
      <rpm:entry name="python3-dnf-plugin-post-transaction-actions"/>
      <rpm:entry name="python3-humanize"/>
      <rpm:entry name="python3-importlib-metadata"/>
      <rpm:entry name="python3-magic"/>
      <rpm:entry name="python3-mod_wsgi"/>
      <rpm:entry name="python3-pymemcache"/>
      <rpm:entry name="python3-pyyaml"/>
      <rpm:entry name="python3-redis"/>
      <rpm:entry name="python3-requests"/>
      <rpm:entry name="python3-rpm"/>
      <rpm:entry name="python3-tenacity"/>
      <rpm:entry name="python3-tqdm"/>
      <rpm:entry name="python3-zstandard"/>
      <rpm:entry name="redis"/>
    </rpm:requires>
    <file>/etc/patchman/apache.conf.example</file>
    <file>/etc/patchman/celery.conf</file>
    <file>/etc/patchman/local_settings.py</file>
    <file>/etc/patchman/patchman-celery-beat.service</file>
    <file>/etc/patchman/patchman-celery-worker.service</file>
    <file>/usr/bin/patchman</file>
    <file>/usr/bin/patchman-manage</file>
    <file>/usr/bin/patchman-set-secret-key</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.0" rel="1"/>
  <checksum type="sha256" pkgid="YES">860fb0c978c76e668307333d2ceec0f7edbb7aef06e087e0ab226a023aa3ee5d</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1778116393" build="1697600076"/>
  <size package="12604" installed="21771" archive="22188"/>
  <location href="patchman-client-3.0.0-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.0-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="6965"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.0" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.0" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.10" rel="1"/>
  <checksum type="sha256" pkgid="YES">03014b036dd074c067ac3ce655621832ccd264bd0e4c6b4e45eed1bd211c928a</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907219" build="1723088436"/>
  <size package="13509" installed="22935" archive="23352"/>
  <location href="patchman-client-3.0.10-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>72d7c0bc2b45</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.10-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.10" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.10" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.13" rel="1"/>
  <checksum type="sha256" pkgid="YES">af3ed0a24a0b7bd6258a15ad0af45c39d31e634cd9fc8a0047bd2a446467c03f</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907219" build="1734367055"/>
  <size package="13509" installed="22935" archive="23352"/>
  <location href="patchman-client-3.0.13-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>95f49fdc5a11</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.13-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.13" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.13" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.14" rel="1"/>
  <checksum type="sha256" pkgid="YES">a9a3cb82543a3e340ac088a78dd04c8a482547fb1451e06169d276e0fee48dfb</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907219" build="1738616351"/>
  <size package="13507" installed="22935" archive="23352"/>
  <location href="patchman-client-3.0.14-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>304a9c244ac2</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.14-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.14" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.14" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.15" rel="1"/>
  <checksum type="sha256" pkgid="YES">32221e2cc3b93f1a7c1d04908ce3b58121e36aa4edfa9a6903a430cb91adc999</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907219" build="1738991199"/>
  <size package="13564" installed="23223" archive="23640"/>
  <location href="patchman-client-3.0.15-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>97ef157ab34e</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.15-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.15" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.15" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.16" rel="1"/>
  <checksum type="sha256" pkgid="YES">32973c0f9823a05c722485c70c858539dedfc691998c3a3b9023fc563ea448c0</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907219" build="1740547594"/>
  <size package="13562" installed="23223" archive="23640"/>
  <location href="patchman-client-3.0.16-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>295e3fdba80c</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.16-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.16" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.16" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.17" rel="1"/>
  <checksum type="sha256" pkgid="YES">7034edd0637eaadafc2b610366b3e6f1cee05fc9cb855c5d4f9bcc87b5cce68c</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1740672489"/>
  <size package="13563" installed="23223" archive="23640"/>
  <location href="patchman-client-3.0.17-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>4851f527276e</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.17-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.17" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.17" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.19" rel="1"/>
  <checksum type="sha256" pkgid="YES">9f12789fb18d109a197e2a6a5b075969af99213df78b095f789140deef286daf</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1740861947"/>
  <size package="13563" installed="23223" archive="23640"/>
  <location href="patchman-client-3.0.19-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>f8ff1369405f</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.19-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7577"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.19" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.19" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.3" rel="1"/>
  <checksum type="sha256" pkgid="YES">ee8d685c9e42c364d57ef1c68ab3b4b343f787e90344a1fd55fb1fa2e9fa954a</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1701922652"/>
  <size package="13396" installed="22650" archive="23068"/>
  <location href="patchman-client-3.0.3-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>284eade3f563</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.3-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.3" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.3" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.4" rel="1"/>
  <checksum type="sha256" pkgid="YES">29ab5a4f7e61dcbd626a413ac82f1f7148c8b8eb6d1a1099497a9b22e6e392f8</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1701925060"/>
  <size package="13397" installed="22650" archive="23068"/>
  <location href="patchman-client-3.0.4-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>ec3d4ac17e6d</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.4-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.4" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.4" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.6" rel="1"/>
  <checksum type="sha256" pkgid="YES">9cc562a2846f8b0f1b5390b96423a250e0cfd48ad036507e0d43e5b0848b8978</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1702353263"/>
  <size package="13395" installed="22650" archive="23068"/>
  <location href="patchman-client-3.0.6-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>9307a5e367ca</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.6-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.6" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.6" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.7" rel="1"/>
  <checksum type="sha256" pkgid="YES">d5a12e1c35247fd6918ea2c3ffa7ab3e2d119b4047ad9be917d915c98a44c16e</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907220" build="1704427861"/>
  <size package="13398" installed="22653" archive="23068"/>
  <location href="patchman-client-3.0.7-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>86dd768c8d64</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.7-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.7" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.7" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.8" rel="1"/>
  <checksum type="sha256" pkgid="YES">29f5490b669ab239160b68fef14a41ef9c9e40709ee3e7dcfe469824a78862a5</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907221" build="1707104929"/>
  <size package="13398" installed="22653" archive="23068"/>
  <location href="patchman-client-3.0.8-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>c1a0e5a12896</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.8-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.8" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.8" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.0.9" rel="1"/>
  <checksum type="sha256" pkgid="YES">f64c0858bb1c8392a8f4229b27f0eec0f98dda762e3f910ed3f3dfe6fe960370</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907221" build="1719177800"/>
  <size package="13486" installed="22950" archive="23368"/>
  <location href="patchman-client-3.0.9-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>733e5c2bfdfb</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-3.0.9-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7565"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="3.0.9" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="3.0.9" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.10" rel="1"/>
  <checksum type="sha256" pkgid="YES">ef0b7ba27bd0a93bb3f9e4f5fda3feee251cf7c77b91e03492526d42347b60ca</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772072712"/>
  <size package="16924" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.10-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>972806517ec6</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.10-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.10" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.10" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.11" rel="1"/>
  <checksum type="sha256" pkgid="YES">012513237afee4248851476274f8a793710e4c54aaca6484bffc161ab92a8a33</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772085022"/>
  <size package="16924" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.11-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>16f8f052cea0</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.11-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.11" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.11" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.12" rel="1"/>
  <checksum type="sha256" pkgid="YES">616953853ea99c33612459a3dfb4060979e06db131286496f54a453073cec3cc</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772297559"/>
  <size package="16925" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.12-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>ad06a499415e</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.12-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.12" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.12" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.14" rel="1"/>
  <checksum type="sha256" pkgid="YES">e50178005336663c7d665881ca7d4d63285cbbf69229e424fdf4dce2779c3b71</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772491805"/>
  <size package="16923" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.14-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>89ae40651dc1</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.14-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.14" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.14" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.15" rel="1"/>
  <checksum type="sha256" pkgid="YES">d5af35e5fc3a0186717dad085935571712b3a63d4c684192abb2b0bd4d34dcd6</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772502458"/>
  <size package="16924" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.15-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>e062de5816a8</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.15-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.15" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.15" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.16" rel="1"/>
  <checksum type="sha256" pkgid="YES">cfdc7729b743d3d21573955883df1b1e63bfffd74d5f553abf70c572d421067b</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907222" build="1772641236"/>
  <size package="16925" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.16-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>f06628b328c4</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.16-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.16" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.16" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.17" rel="1"/>
  <checksum type="sha256" pkgid="YES">e87cfed02cb71740e1b794d7a8cc57b3ec7fd5f8c9ec8bf89d03d4abd19959da</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1772689117"/>
  <size package="16923" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.17-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>314525bd3331</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.17-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.17" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.17" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.18" rel="1"/>
  <checksum type="sha256" pkgid="YES">f5f676495e50eb5a199671334603d6fcf60b62dfbb8306d2a22e4d5461502bcb</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1772767361"/>
  <size package="17872" installed="41607" archive="42152"/>
  <location href="patchman-client-4.0.18-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>d6d41e474f62</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.18-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.18" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.18" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.19" rel="1"/>
  <checksum type="sha256" pkgid="YES">371e9ce5cfc917d7443053e0ef134123a7ae68e4f06a122a2c66a9afc59f67a2</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1777425958"/>
  <size package="17871" installed="41607" archive="42152"/>
  <location href="patchman-client-4.0.19-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>bbefc6755732</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.19-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.19" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.19" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.20" rel="1"/>
  <checksum type="sha256" pkgid="YES">730b7ad9f7e0b4195eed057a6d2561d63d85cbf8b251444485148689fadde55c</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1778115992"/>
  <size package="17873" installed="41607" archive="42152"/>
  <location href="patchman-client-4.0.20-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>c8dd448e87f0</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.20-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.20" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.20" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.21" rel="1"/>
  <checksum type="sha256" pkgid="YES">9ff04c227c2dac2eb1e0f521cb8533135f7fd03c01164d6fcc8bb459ee47d3fd</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1780032967" build="1780032866"/>
  <size package="17872" installed="41607" archive="42152"/>
  <location href="patchman-client-4.0.21-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>3d5c2b246df7</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.21-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7753"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.21" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.21" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.4" rel="1"/>
  <checksum type="sha256" pkgid="YES">7f2cb78824eb9eb864563019c86073fcd74201ef36419e3951f504cf1c503f6b</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1770086890"/>
  <size package="16639" installed="36838" archive="37384"/>
  <location href="patchman-client-4.0.4-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>76da2438f568</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.4-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7637"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.4" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.4" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.5" rel="1"/>
  <checksum type="sha256" pkgid="YES">7b088bfcbb953104163cb444e28d01b3e64064a4d3cab87138c2911ca71b4625</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907223" build="1770089713"/>
  <size package="16638" installed="36838" archive="37384"/>
  <location href="patchman-client-4.0.5-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>4f821f9e8e46</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.5-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7637"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.5" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.5" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.7" rel="1"/>
  <checksum type="sha256" pkgid="YES">a26e9b2e9f4af25aaa918d5b88e94489e40420c862230412c8bde02f6df10b27</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907224" build="1770175066"/>
  <size package="16801" installed="36838" archive="37384"/>
  <location href="patchman-client-4.0.7-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>2bb24a8ee720</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.7-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7757"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.7" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.7" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
      <rpm:entry name="which"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.8" rel="1"/>
  <checksum type="sha256" pkgid="YES">24be1094f2f8f147780941bd1fccba6011a2f5ac84b28a652af7e9a4594d9606</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907224" build="1770589461"/>
  <size package="16917" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.8-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>b48cde89e795</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.8-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7745"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.8" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.8" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>patchman-client</name>
  <arch>noarch</arch>
  <version epoch="0" ver="4.0.9" rel="1"/>
  <checksum type="sha256" pkgid="YES">f13a17ba7c50cf64845744726c4243a51acc03fb51c8e5912a2e60043dc0cc05</checksum>
  <summary>patchman-client uploads reports to the patchman server</summary>
  <description>patchman-client provides a client that uploads reports to a patchman server</description>
  <packager></packager>
  <url>http://patchman.openbytes.ie</url>
  <time file="1779907224" build="1770790000"/>
  <size package="16916" installed="37246" archive="37792"/>
  <location href="patchman-client-4.0.9-1.noarch.rpm"/>
  <format>
    <rpm:license>GPLv3</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>e2c87f74e0ec</rpm:buildhost>
    <rpm:sourcerpm>patchman-client-4.0.9-1.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="5080" end="7745"/>
    <rpm:provides>
      <rpm:entry name="config(patchman-client)" flags="EQ" epoch="0" ver="4.0.9" rel="1"/>
      <rpm:entry name="patchman-client" flags="EQ" epoch="0" ver="4.0.9" rel="1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="/usr/bin/bash"/>
      <rpm:entry name="coreutils"/>
      <rpm:entry name="curl"/>
      <rpm:entry name="gawk"/>
      <rpm:entry name="jq"/>
      <rpm:entry name="util-linux"/>
    </rpm:requires>
    <file type="dir">/etc/patchman</file>
    <file>/etc/patchman/patchman-client.conf</file>
    <file>/usr/sbin/patchman-client</file>
  </format>
</package>
<package type="rpm">
  <name>python3-django-bootstrap3</name>
  <arch>noarch</arch>
  <version epoch="0" ver="23.1" rel="1.el9"/>
  <checksum type="sha256" pkgid="YES">6c8cbca99bf0b69b43ad144825e4848bf5452cd80070b210757760a5415c10be</checksum>
  <summary>Bootstrap 3 support for Django projects</summary>
  <description> The goal of this project is to seamlessly blend Django and Bootstrap 3.</description>
  <packager></packager>
  <url>https://github.com/zostera/django-bootstrap3</url>
  <time file="1778116398" build="1697596800"/>
  <size package="96570" installed="545503" archive="571128"/>
  <location href="python3-django-bootstrap3-23.1-1.el9.noarch.rpm"/>
  <format>
    <rpm:license>BSD-3-Clause</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>python-django-bootstrap3-23.1-1.el9.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="27269"/>
    <rpm:provides>
      <rpm:entry name="python-django-bootstrap3" flags="EQ" epoch="0" ver="23.1" rel="1.el9"/>
      <rpm:entry name="python3-django-bootstrap3" flags="EQ" epoch="0" ver="23.1" rel="1.el9"/>
      <rpm:entry name="python3.9-django-bootstrap3" flags="EQ" epoch="0" ver="23.1" rel="1.el9"/>
      <rpm:entry name="python3.9dist(django-bootstrap3)" flags="EQ" epoch="0" ver="23.1"/>
      <rpm:entry name="python3dist(django-bootstrap3)" flags="EQ" epoch="0" ver="23.1"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
      <rpm:entry name="python3.9dist(django)" flags="GE" epoch="0" ver="3.2"/>
      <rpm:entry name="python3dist(django)" flags="GE" epoch="0" ver="3.2"/>
    </rpm:requires>
    <rpm:obsoletes>
      <rpm:entry name="python-django-bootstrap3" flags="LT" epoch="0" ver="23.1" rel="1.el9"/>
      <rpm:entry name="python39-django-bootstrap3" flags="LT" epoch="0" ver="23.1" rel="1.el9"/>
    </rpm:obsoletes>
  </format>
</package>
<package type="rpm">
  <name>python3-django-extensions</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.2.3" rel="1.el9"/>
  <checksum type="sha256" pkgid="YES">d57573675576c1a5e65b8a6bfba87ec6bc8deee198ff1efca8ea3f14f18d2673</checksum>
  <summary>Extensions for Django</summary>
  <description> Django Extensions is a collection of custom extensions for the Django Framework.</description>
  <packager></packager>
  <url>https://github.com/django-extensions/django-extensions</url>
  <time file="1778116398" build="1697597884"/>
  <size package="328491" installed="1159358" archive="1256744"/>
  <location href="python3-django-extensions-3.2.3-1.el9.noarch.rpm"/>
  <format>
    <rpm:license>MIT License</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>python-django-extensions-3.2.3-1.el9.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="78529"/>
    <rpm:provides>
      <rpm:entry name="python-django-extensions" flags="EQ" epoch="0" ver="3.2.3" rel="1.el9"/>
      <rpm:entry name="python3-django-extensions" flags="EQ" epoch="0" ver="3.2.3" rel="1.el9"/>
      <rpm:entry name="python3.9-django-extensions" flags="EQ" epoch="0" ver="3.2.3" rel="1.el9"/>
      <rpm:entry name="python3.9dist(django-extensions)" flags="EQ" epoch="0" ver="3.2.3"/>
      <rpm:entry name="python3dist(django-extensions)" flags="EQ" epoch="0" ver="3.2.3"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
      <rpm:entry name="python3.9dist(django)" flags="GE" epoch="0" ver="3.2"/>
      <rpm:entry name="python3dist(django)" flags="GE" epoch="0" ver="3.2"/>
    </rpm:requires>
    <rpm:obsoletes>
      <rpm:entry name="python-django-extensions" flags="LT" epoch="0" ver="3.2.3" rel="1.el9"/>
      <rpm:entry name="python39-django-extensions" flags="LT" epoch="0" ver="3.2.3" rel="1.el9"/>
    </rpm:obsoletes>
  </format>
</package>
<package type="rpm">
  <name>python3-django-filter</name>
  <arch>noarch</arch>
  <version epoch="0" ver="23.2" rel="1.el9"/>
  <checksum type="sha256" pkgid="YES">18eba2d8f9bb2ccb663c6e3f4036183f8c10cc377a029e9463061ec4172c4098</checksum>
  <summary>Django-filter is a reusable Django application for allowing users to filter querysets dynamically</summary>
  <description>Django Filter Django-filter is a reusable Django application allowing users to
declaratively add dynamic QuerySet filtering from URL parameters.</description>
  <packager></packager>
  <url>https://github.com/carltongibson/django-filter/tree/main</url>
  <time file="1778116398" build="1697595428"/>
  <size package="97505" installed="381320" archive="409484"/>
  <location href="python3-django-filter-23.2-1.el9.noarch.rpm"/>
  <format>
    <rpm:license>BSD</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>python-django-filter-23.2-1.el9.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="28177"/>
    <rpm:provides>
      <rpm:entry name="python-django-filter" flags="EQ" epoch="0" ver="23.2" rel="1.el9"/>
      <rpm:entry name="python3-django-filter" flags="EQ" epoch="0" ver="23.2" rel="1.el9"/>
      <rpm:entry name="python3.9-django-filter" flags="EQ" epoch="0" ver="23.2" rel="1.el9"/>
      <rpm:entry name="python3.9dist(django-filter)" flags="EQ" epoch="0" ver="23.2"/>
      <rpm:entry name="python3dist(django-filter)" flags="EQ" epoch="0" ver="23.2"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
      <rpm:entry name="python3-django3" flags="GE" epoch="0" ver="3.2"/>
      <rpm:entry name="python3.9dist(django)" flags="GE" epoch="0" ver="3.2"/>
    </rpm:requires>
    <rpm:obsoletes>
      <rpm:entry name="python-django-filter" flags="LT" epoch="0" ver="23.2" rel="1.el9"/>
      <rpm:entry name="python39-django-filter" flags="LT" epoch="0" ver="23.2" rel="1.el9"/>
    </rpm:obsoletes>
  </format>
</package>
<package type="rpm">
  <name>python3-django-rest-framework</name>
  <arch>noarch</arch>
  <version epoch="0" ver="3.14.0" rel="1.el9"/>
  <checksum type="sha256" pkgid="YES">ccc71add9117f607afcef28d84467a380fd318c6a51d970a74c6b48090e71dc7</checksum>
  <summary>Web APIs for Django, made easy</summary>
  <description>
Django REST framework is a powerful and flexible toolkit that makes it easy
to build Web APIs.

Some reasons you might want to use REST framework:

* The Web browsable API is a huge usability win for your developers.
* Authentication policies including OAuth1a and OAuth2 out of the box.
* Serialization that supports both ORM and non-ORM data sources.
* Customizable all the way down - just use regular function-based views if
  you don't need the more powerful features.
* Extensive documentation, and great community support.</description>
  <packager></packager>
  <url>https://www.django-rest-framework.org/</url>
  <time file="1778116398" build="1697597453"/>
  <size package="1000767" installed="3947021" archive="4053908"/>
  <location href="python3-django-rest-framework-3.14.0-1.el9.noarch.rpm"/>
  <format>
    <rpm:license>BSD</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>python-django-rest-framework-3.14.0-1.el9.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="87537"/>
    <rpm:provides>
      <rpm:entry name="python-django-rest-framework" flags="EQ" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python-djangorestframework" flags="EQ" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python3-django-rest-framework" flags="EQ" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python3.9-django-rest-framework" flags="EQ" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python3.9-djangorestframework" flags="EQ" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python3.9dist(djangorestframework)" flags="EQ" epoch="0" ver="3.14"/>
      <rpm:entry name="python3dist(djangorestframework)" flags="EQ" epoch="0" ver="3.14"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
      <rpm:entry name="python3.9dist(django)" flags="GE" epoch="0" ver="3"/>
      <rpm:entry name="python3.9dist(pytz)"/>
      <rpm:entry name="python3dist(django)" flags="GE" epoch="0" ver="3"/>
      <rpm:entry name="python3dist(pytz)"/>
    </rpm:requires>
    <rpm:obsoletes>
      <rpm:entry name="python-djangorestframework" flags="LT" epoch="0" ver="3.14.0" rel="1.el9"/>
      <rpm:entry name="python39-django-rest-framework" flags="LT" epoch="0" ver="3.14.0" rel="1.el9"/>
    </rpm:obsoletes>
  </format>
</package>
<package type="rpm">
  <name>python3-django-tagging</name>
  <arch>noarch</arch>
  <version epoch="0" ver="0.5.0" rel="1.el9"/>
  <checksum type="sha256" pkgid="YES">315e6b30181bdfd2ce8c0d74c00fab59e39bd4bccdfef7ed25da5fa327e1e19a</checksum>
  <summary>Generic tagging application for Django</summary>
  <description>This is a generic tagging application for Django projects</description>
  <packager></packager>
  <url>https://github.com/Fantomas42/django-tagging</url>
  <time file="1778116398" build="1697597692"/>
  <size package="67801" installed="230202" archive="247224"/>
  <location href="python3-django-tagging-0.5.0-1.el9.noarch.rpm"/>
  <format>
    <rpm:license>BSD License</rpm:license>
    <rpm:vendor></rpm:vendor>
    <rpm:group>Unspecified</rpm:group>
    <rpm:buildhost>a40a0901c202</rpm:buildhost>
    <rpm:sourcerpm>python-django-tagging-0.5.0-1.el9.src.rpm</rpm:sourcerpm>
    <rpm:header-range start="4480" end="20477"/>
    <rpm:provides>
      <rpm:entry name="python-django-tagging" flags="EQ" epoch="0" ver="0.5.0" rel="1.el9"/>
      <rpm:entry name="python3-django-tagging" flags="EQ" epoch="0" ver="0.5.0" rel="1.el9"/>
      <rpm:entry name="python3.9-django-tagging" flags="EQ" epoch="0" ver="0.5.0" rel="1.el9"/>
      <rpm:entry name="python3.9dist(django-tagging)" flags="EQ" epoch="0" ver="0.5"/>
      <rpm:entry name="python3dist(django-tagging)" flags="EQ" epoch="0" ver="0.5"/>
    </rpm:provides>
    <rpm:requires>
      <rpm:entry name="python(abi)" flags="EQ" epoch="0" ver="3.9"/>
    </rpm:requires>
    <rpm:obsoletes>
      <rpm:entry name="python-django-tagging" flags="LT" epoch="0" ver="0.5.0" rel="1.el9"/>
      <rpm:entry name="python39-django-tagging" flags="LT" epoch="0" ver="0.5.0" rel="1.el9"/>
    </rpm:obsoletes>
  </format>
</package>
</metadata>