Solus eopkg

ID

eopkg

Home page

https://github.com/getsolus/eopkg/

Upstream stars

⭐ 17

Last commit

2026-09-05

Version requirement

>= 3.2

Platforms

🐧 Linux

Operations

installed · outdated · search · install · upgrade · upgrade_all · remove · sync · cleanup

purl types

pkg:eopkg

CLI name

eopkg

Every call

eopkg --no-color <command>

Issues and PRs

📦 manager: eopkg

Source

meta_package_manager/managers/eopkg.py

Solus’ eopkg package manager, a PiSi fork.

installed and outdated parse eopkg’s fixed-width, |-delimited status table; the column regex requires that pipe structure, so the header and === separator rows fall through. --no-color is forced to keep the output free of ANSI escapes.

Mutating operations pass --yes-all to auto-confirm eopkg’s prompts so they run unattended.

Note

eopkg 4.x and 5.x ship as a Nuitka onefile bundle, and the Python each carries reads its stdout encoding from the locale alone. Under C or POSIX that encoding is ascii. The first summary holding a character it cannot encode then aborts the command with Error: System error. Program terminated. and exit 1, after a truncated listing. list-upgrades and list-available write every summary raw, so either Cap’n Proto or ImageMagick® stops them; search escapes ® but not , so only the first stops it.

No extra_env pins the locale here, because mpm never reaches that state. PEP 538 coercion exports LC_CTYPE=C.UTF-8 from mpm’s own interpreter, and eopkg inherits it. A shell exports nothing, which is why the same command fails by hand and works through mpm. Measured on Solus 4.9, against eopkg 4.4.0 and 5.0.0 alike.

What mpm adds to eopkg

Through mpm, eopkg gains --exact search, to narrow results to exact names.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover eopkg alongside every other manager you run in one table, mpm upgrade --all updates them together, and mpm sbom exports the whole machine as one bill of materials.

Every mpm command also gains --dry-run and --plan previews, cross-scheme version comparison and purl identifiers. See manager augmentations for how each one is built.

Your eopkg commands, in mpm

You already know eopkg: each operation maps one-to-one onto mpm, in an interface shared by every manager.

To…

With eopkg

With mpm

List what’s installed

eopkg list-installed --install-info

mpm --eopkg installed

List outdated packages

eopkg list-upgrades --install-info

mpm --eopkg outdated

Search for a package

eopkg search --name htop

mpm --eopkg search htop

Install a package

sudo eopkg install --yes-all htop

mpm install pkg:eopkg/htop

Upgrade one package

sudo eopkg upgrade --yes-all bash

mpm --eopkg upgrade bash

Upgrade everything

sudo eopkg upgrade --yes-all

mpm --eopkg upgrade --all

Remove a package

sudo eopkg remove --yes-all htop

mpm remove pkg:eopkg/htop

Clear caches

sudo eopkg remove-orphans --yes-all

mpm --eopkg cleanup --cache

Prefix any command above with --dry-run to simulate the underlying manager calls without touching the system: the safe way to watch what mpm would do before trusting it.

Operations

Operation

Supported

Notes

installed

outdated

orphans

search

exact search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring eopkg

Deselect eopkg for a single run with --no-eopkg, or persist the choice in your configuration:

[mpm]
eopkg = false

The arguments and environment variables listed in the box atop this page are forced on every eopkg call, so runs stay quiet, non-interactive and reproducible: the defaults you would set in CI anyway.

Keep it enabled but tune how mpm drives it with a per-manager override:

[mpm.overrides.eopkg]
timeout = 900

mpm config-template eopkg prints every overridable attribute as a ready-to-paste block.

Recipes

A few jobs you would otherwise script around eopkg, one mpm command each:

  • Snapshot and clone a machine: mpm --eopkg dump eopkg.toml, then mpm restore eopkg.toml on the next one.

  • Export a compliance SBOM: mpm --eopkg sbom (CycloneDX by default, --spdx for SPDX).

Privilege escalation

System-wide manager: mpm wraps its privileged operations in sudo out of the box. Instead of letting the tool prompt mid-run, mpm primes the credential cache up-front, with a single branded password prompt at most. Turn escalation off for rootless setups with --no-sudo or the per-manager sudo override.

See privilege escalation for the full policy.

Cooldown

State of Solus eopkg’s release-age gating, from the cooldown support table:

Status: ❌ None

A cooldown only pays off where a compromised release can be withdrawn while the clock runs, and can only be emulated where the registry dates its releases. From the retraction table:

  • Registry: Distro binary archives (pkg:deb, pkg:rpm, pkg:alpm, pkg:apk)

  • Retraction: Index revert: removal is an archive operation and the mirror is rebuilt without the package. Debian, for one, requires filing an RM: bug against ftp.debian.org (developers-reference)

  • Publish date: ❌ the version string is the distro maintainer’s build, carrying no upstream publication date

With --cooldown set, mpm skips this manager’s install and upgrade operations rather than run them unguarded (fail-closed); --cooldown best-effort opts back in.

Version probe

The version is probed by running:

$ eopkg --version
eopkg.bin 5.0.0

and extracted with:

r"eopkg(?:\.bin)?\s+(?P<version>\S+)"

Reference traces

Raw native outputs captured in the manager source: the reference mpm’s parsers were written against. If you know Solus eopkg well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ eopkg --no-color list-installed --install-info
Package Name          |St|        Version|  Rel.|  Distro|             Date
===========================================================================
aalib                 | i|        1.4.0_5|     9|   Solus|07 Sep 2026 10:08
abseil-cpp            | i|     20260107.1|    11|   Solus|07 Sep 2026 10:08
accounts-qml-module   | i|            0.7|     6|   Solus|07 Sep 2026 10:08
accountsservice       | i|        23.13.9|    38|   Solus|07 Sep 2026 10:08
acl                   | i|          2.3.2|    22|   Solus|07 Sep 2026 10:08
alsa-firmware         | i|          1.2.4|     8|   Solus|07 Sep 2026 10:08
alsa-lib              | i|         1.2.14|    41|   Solus|07 Sep 2026 10:08
alsa-plugins          | i|         1.2.12|    26|   Solus|07 Sep 2026 10:08
alsa-ucm-conf         | i|         1.2.13|     1|   Solus|07 Sep 2026 10:08
alsa-utils            | i|         1.2.13|    29|   Solus|07 Sep 2026 10:08
anthy                 | i|          9100h|     4|   Solus|07 Sep 2026 10:08
aom                   | i|         3.12.1|    26|   Solus|07 Sep 2026 10:08
appstream             | i|          1.1.2|    17|   Solus|07 Sep 2026 10:08
appstream-catalog     | i|       20260417|    52|   Solus|07 Sep 2026 10:08
appstream-qt6         | i|          1.1.2|    17|   Solus|07 Sep 2026 10:08
argon2                | i|       20190702|     6|   Solus|07 Sep 2026 10:08
$ eopkg --no-color list-upgrades --install-info
Package Name          |St|        Version|  Rel.|  Distro|             Date
===========================================================================
acl                  | i|          2.3.2|    22|   Solus|07 Sep 2026 10:08
alsa-lib             | i|         1.2.14|    41|   Solus|07 Sep 2026 10:08
alsa-ucm-conf        | i|         1.2.13|     1|   Solus|07 Sep 2026 10:08
alsa-utils           | i|         1.2.13|    29|   Solus|07 Sep 2026 10:08
anthy                | i|          9100h|     4|   Solus|07 Sep 2026 10:08
aom                  | i|         3.12.1|    26|   Solus|07 Sep 2026 10:08
appstream            | i|          1.1.2|    17|   Solus|07 Sep 2026 10:08

Feed any of these through mpm and the raw output becomes one uniform table, the same shape for every manager: filter it, project columns, or export it (mpm --eopkg installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Upstream project

Metrics

getsolus/eopkg

Activity

commit activity commits since open issues open pull requests

Popularity

forks watchers contributors

Metadata

latest release release date license main language

Changelog

  • 8.0.0.dev0 (unreleased)

    • Fix search, which passed an empty argument to eopkg in extended mode.

    • Fix version detection on eopkg 5.0.0, which calls itself eopkg.bin in its banner: the manager left the pool on every Solus host running it.

    • Fix installed and outdated, which silently dropped the last two packages of every listing.

    • Decode the character references search descriptions carry, so ImageMagick&#xAE; suite reads as ImageMagick® suite.

    • Report the upgrade target in outdated, which had none. Both sides now name the release, so a rebuild no longer reads as the same version.

    • Correct the search commands shown on each manager’s page, which named fewer options than mpm actually runs.

    • Detect Solus, where every run reported an unrecognized platform and selected no manager at all.

  • 7.1.0 (2026-07-07)

    • upgrade --all now passes --yes-all, matching the single-package upgrade, so it no longer hangs on an interactive confirmation prompt.

  • 7.0.0 (2026-06-26)

    • Fix installed, outdated, and search returning no packages.

  • 5.20.0 (2024-11-25)

    • Add support for new eopkg manager. Closes #1093.