meta_package_manager.managers.eopkg module¶

class meta_package_manager.managers.eopkg.EOPKG[source]¶

Bases: PackageManager

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.

Initialize cli_errors list.

name: str = 'Solus eopkg'¶

Return package manager’s common name.

Default value is based on class name.

homepage_url: str | None = 'https://github.com/getsolus/eopkg/'¶

Home page of the project, only used in documentation for reference.

Slug of the brand mark standing for this manager in the documentation.

Names an SVG vendored under docs/assets/managers/, whose provenance and license are recorded in docs/assets/managers/logos.yaml. Inlined at the top of the manager’s page by meta_package_manager._docs; a manager leaving it unset keeps the page’s default package glyph.

Several managers legitimately share one slug, either because they wrap the same upstream (brew and cask) or because the tool has no mark of its own and its ecosystem’s stands in (apt under Debian’s swirl, cargo under Rust’s gear). Documentation-only, like homepage_url: no CLI output reads it.

platforms: frozenset[Platform] | Group | Platform | Iterable[Platform | Group] = frozenset({Platform(id='almalinux', name='AlmaLinux'), Platform(id='alpine', name='Alpine Linux'), Platform(id='altlinux', name='ALT Linux'), Platform(id='amzn', name='Amazon Linux'), Platform(id='android', name='Android'), Platform(id='arch', name='Arch Linux'), Platform(id='buildroot', name='Buildroot'), Platform(id='cachyos', name='CachyOS'), Platform(id='centos', name='CentOS'), Platform(id='chromeos', name='ChromeOS'), Platform(id='clearlinux', name='Clear Linux OS'), Platform(id='cloudlinux', name='CloudLinux OS'), Platform(id='debian', name='Debian'), Platform(id='endeavouros', name='EndeavourOS'), Platform(id='exherbo', name='Exherbo Linux'), Platform(id='fedora', name='Fedora'), Platform(id='generic_linux', name='Generic Linux'), Platform(id='gentoo', name='Gentoo Linux'), Platform(id='guix', name='Guix System'), Platform(id='ibm_powerkvm', name='IBM PowerKVM'), Platform(id='kali', name='Kali Linux'), Platform(id='kvmibm', name='KVM for IBM z Systems'), Platform(id='linuxmint', name='Linux Mint'), Platform(id='mageia', name='Mageia'), Platform(id='mandriva', name='Mandriva Linux'), Platform(id='manjaro', name='Manjaro Linux'), Platform(id='nixos', name='NixOS'), Platform(id='nobara', name='Nobara'), Platform(id='opensuse', name='openSUSE'), Platform(id='openwrt', name='OpenWrt'), Platform(id='oracle', name='Oracle Linux'), Platform(id='parallels', name='Parallels'), Platform(id='pidora', name='Pidora'), Platform(id='pikaos', name='PikaOS'), Platform(id='raspbian', name='Raspbian'), Platform(id='rhel', name='RedHat Enterprise Linux'), Platform(id='rocky', name='Rocky Linux'), Platform(id='scientific', name='Scientific Linux'), Platform(id='slackware', name='Slackware'), Platform(id='sles', name='SUSE Linux Enterprise Server'), Platform(id='slitaz', name='SliTaz GNU/Linux'), Platform(id='sourcemage', name='Source Mage GNU/Linux'), Platform(id='tuxedo', name='Tuxedo OS'), Platform(id='ubuntu', name='Ubuntu'), Platform(id='ultramarine', name='Ultramarine'), Platform(id='void', name='Void Linux'), Platform(id='wsl1', name='Windows Subsystem for Linux v1'), Platform(id='wsl2', name='Windows Subsystem for Linux v2'), Platform(id='xenserver', name='XenServer')})¶

List of platforms supported by the manager.

Allows for a mishmash of platforms and groups of platforms. Will be normalized into a frozenset of Platform instances at instantiation.

default_sudo: bool = True¶

Built-in escalation default, used when sudo is None.

False on the base: most managers install into user-writable trees and never need root. The system package managers whose privileged operations require root (apt, dnf, pacman, zypper, …) set this to True so their build_cli(..., sudo=True) operations escalate out of the box, while staying switchable off through sudo (--no-sudo or config) for rootless setups.

requirement: str | None = '>=3.2.0'¶

Version requirement specifier.

Supports a comma-separated range of constraints (e.g. ">=1.20.0,<2.0.0"). A bare version string like "1.20.0" is treated as >=1.20.0.

Parsed by meta_package_manager.version.VersionRange.

Defaults to None, which deactivates version check entirely.

pre_args: tuple[str, ...] = ('--no-color',)¶
version_regexes: tuple[str, ...] = ('eopkg\\s+(?P<version>\\S+)',)¶
$ eopkg --version
eopkg 3.2.0
property installed: Iterator[Package]¶

Fetch installed packages.

$ eopkg --no-color list-installed --install-info
Package Name          |St|        Version|  Rel.|  Distro|       Date
=====================================================================
aalib                 | i|        1.4.0_5|     8|   Solus|14 Oct 2024
abseil-cpp            | i|     20240116.2|    10|   Solus|14 Oct 2024
accountsservice       | i|        23.13.9|    36|   Solus|14 Oct 2024
acl                   | i|          2.3.2|    21|   Solus|14 Oct 2024
adwaita-icon-theme    | i|           46.2|    28|   Solus|14 Oct 2024
adwaita-icon-theme-legacy  | i|           46.2|     2|   Solus|14 Oct 2024
alsa-firmware         | i|          1.2.4|     7|   Solus|14 Oct 2024
alsa-lib              | i|         1.2.12|    38|   Solus|14 Oct 2024
alsa-plugins          | i|         1.2.12|    26|   Solus|14 Oct 2024
alsa-utils            | i|         1.2.12|    28|   Solus|14 Oct 2024
aom                   | i|         3.10.0|    24|   Solus|14 Oct 2024
appstream             | i|          1.0.1|     9|   Solus|14 Oct 2024
appstream-data        | i|             49|    51|   Solus|14 Oct 2024
appstream-glib        | i|          0.8.2|    13|   Solus|14 Oct 2024
argon2                | i|       20190702|     6|   Solus|14 Oct 2024
at-spi2               | i|         2.52.0|    44|   Solus|14 Oct 2024
atkmm                 | i|         2.28.4|    19|   Solus|14 Oct 2024
attr                  | i|          2.5.2|    25|   Solus|14 Oct 2024
audit                 | i|          4.0.2|    19|   Solus|14 Oct 2024
avahi                 | i|            0.8|    27|   Solus|14 Oct 2024
baobab                | i|           46.0|    27|   Solus|14 Oct 2024
property outdated: Iterator[Package]¶

Fetch outdated packages.

$ eopkg --no-color list-upgrades --install-info
Package Name          |St|        Version|  Rel.|  Distro|       Date
=====================================================================
adwaita-icon-theme   | i|           46.2|    28|   Solus|14 Oct 2024
appstream-data       | i|             49|    51|   Solus|14 Oct 2024
at-spi2              | i|         2.52.0|    44|   Solus|14 Oct 2024
baobab               | i|           46.0|    27|   Solus|14 Oct 2024
search(query, extended, exact)[source]¶

Fetch matching packages.

Caution

Search does not supports exact matching.

Naked search without parameters is the same as extended search with all filtering parameters (i.e. --name --summary --description):

$ eopkg --no-color search firefox
gjs-dbginfo                 - Debug symbols for gjs
bleachbit                   - BleachBit frees disk space and maintains privacy
firefox                     - Firefox web browser
eid-mw-firefox              - Belgian eID add-on for Mozilla Firefox
gjs                         - GNOME JavaScript
font-fira-ttf               - Mozilla's new typeface, used in Firefox OS
geckodriver                 - WebDriver for Firefox
firefox-dbginfo             - Debug symbols for firefox
nvidia-vaapi-driver-dbginfo - Debug symbols for nvidia-vaapi-driver
font-clear-sans-ttf         - Clear Sans Fonts - TrueType
gjs-devel                   - Development files for gjs
geckodriver-dbginfo         - Debug symbols for geckodriver

$ eopkg --no-color search firefox --name --summary --description
gjs-dbginfo                 - Debug symbols for gjs
bleachbit                   - BleachBit frees disk space and maintains privacy
firefox                     - Firefox web browser
eid-mw-firefox              - Belgian eID add-on for Mozilla Firefox
gjs                         - GNOME JavaScript
font-fira-ttf               - Mozilla's new typeface, used in Firefox OS
geckodriver                 - WebDriver for Firefox
firefox-dbginfo             - Debug symbols for firefox
nvidia-vaapi-driver-dbginfo - Debug symbols for nvidia-vaapi-driver
font-clear-sans-ttf         - Clear Sans Fonts - TrueType
gjs-devel                   - Development files for gjs
geckodriver-dbginfo         - Debug symbols for geckodriver

For default search on package name only, we rescript filtering to --name only:

$ eopkg --no-color search firefox --name
firefox         - Firefox web browser
eid-mw-firefox  - Belgian eID add-on for Mozilla Firefox
firefox-dbginfo - Debug symbols for firefox
Return type:

Iterator[Package]

install(package_id, version=None)[source]¶

Install one package.

$ sudo eopkg --no-color install --yes-all 0ad
Warning: Updates available, checking reverse dependencies of runtime dependencies for safety.
Following packages will be installed:
0ad          0ad-data         assimp           at-spi2             baobab             breeze-icons      budgie-control-center  budgie-desktop      dav1d                  enet                   evolution-data-server       ffmpeg
file-roller  firefox          fmt              fontconfig          gcr-4              gloox             gnome-calculator       gnome-calendar      gnome-online-accounts  gnome-settings-daemon  gnome-system-monitor        gnome-terminal
gvfs         harfbuzz         ibus             kf6-karchive        kf6-kauth          kf6-kbookmarks    kf6-kcodecs            kf6-kcolorscheme    kf6-kcompletion        kf6-kconfig            kf6-kconfigwidgets          kf6-kcoreaddons
kf6-kcrash   kf6-kdbusaddons  kf6-kded         kf6-kdoctools       kf6-kglobalaccel   kf6-kguiaddons    kf6-ki18n              kf6-kiconthemes     kf6-kio                kf6-kitemviews         kf6-kjobwidgets             kf6-knotifications
kf6-kparts   kf6-kservice     kf6-kwallet      kf6-kwidgetsaddons  kf6-kwindowsystem  kf6-kxmlgui       kf6-solid              kpmcore             ldb                    libadwaita             libarchive                  libass
libcheese    libgtk-4         libgtkmm-4       libgtksourceview5   libheif            libpng            libportal              libportal-gtk4      libreoffice-common     librsvg                libsodium                   libtiff
libtool      libvte           libwebkit-gtk41  libwebkit-gtk6      lzo                mesalib           miniupnpc              nautilus-extension  nemo                   network-manager        networkmanager-openconnect  openconnect
pipewire     pipewire-lib     pixman           poppler             poppler-utils      postgresql-libpq  python-pysmbc          qt6-base            qt6-declarative        qt6-multimedia         qt6-quick3d                 qt6-quicktimeline
qt6-wayland  rav1e            rhythmbox        samba               sdl2               svt-av1           thunderbird            wayland             xapp                   xmlsec1                xorg-server                 xorg-xwayland
xreader      xviewer          zenity
Total size of package(s): 1.94 GB
Downloading 1 / 111
Package ldb found in repository Solus
ldb-2.8.2-31-1-x86_64.eopkg    (137.0 KB)100%      0.00 --/- [--:--:--] [complete]
(...)
Package 0ad-data found in repository Solus
0ad-data-0.0.26a-10-1-x86_64.eopkg (1.4 GB) 39%
(...)
Return type:

str

upgrade_all_cli()[source]¶

Generates the CLI to upgrade all outdated packages.

$ sudo eopkg --no-color upgrade --yes-all
Return type:

tuple[str, ...]

upgrade_one_cli(package_id, version=None)[source]¶

Generates the CLI to upgrade the provided package.

$ sudo eopkg --no-color upgrade --yes-all xz
Updating repositories
Updating repository: Solus
eopkg-index.xml.xz.sha1sum     (40.0  B)100%      0.00 --/- [--:--:--] [complete]
Solus repository information is up-to-date.
Warning: Safety switch forces the installation of following packages:
os-release
Warning: Safety switch forces the upgrade of following packages:
bash    bash-completion  brotli   eopkg    gawk            glib2    glibc         gobject-introspection  hwdata  json-c   libcap2  libdw
libelf  libjson-glib     libnspr  libnss   libpipeline     libssh2  libunistring  lvm2                   lzip    ncurses  nghttp2  nghttp3
pisi    readline         sqlite3  systemd  wireless-regdb  xz
Total size of package(s): 55.40 MB
Warning: There are extra packages due to dependencies.
Downloading 1 / 32
Package ncurses found in repository Solus
ncurses-6.5.20241006-29-1-x86_64.eopkg (767.0 KB)100%      0.00 --/- [--:--:--] [complete]
(...)
[âś“] Syncing filesystems                                                success
[âś“] Updating dynamic library cache                                     success
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[âś“] Updating hwdb                                                      success
[âś“] Updating system users                                              success
[âś“] Updating systemd tmpfiles                                          success
[âś“] Reloading systemd configuration                                    success
[ ] Re-starting vendor-enabled .socket units                           skipped
[ ] Re-executing systemd                                               skipped
[âś“] Compiling glib-schemas                                             success
[âś“] Creating GIO modules cache                                         success
[âś“] Updating manpages database                                         success
[âś“] Reloading udev rules                                               success
[âś“] Applying udev rules                                                success
Return type:

tuple[str, ...]

remove(package_id)[source]¶

Remove one package.

$ sudo eopkg --no-color remove --yes-all firefox
The following list of packages will be removed
in the respective order to satisfy dependencies:
firefox
Removing package firefox
Rebuilding the FilesDB...
Adding packages to FilesDB /var/lib/eopkg/info/files.db:
................
847 packages added in total.
Done rebuilding FilesDB (version: 3)
Removed firefox
[âś“] Syncing filesystems                                                success
[âś“] Updating dynamic library cache                                     success
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Updating clr-boot-manager                                          skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Registering QoL migration on next boot                             skipped
[ ] Re-starting vendor-enabled .socket units                           skipped
[ ] Re-executing systemd                                               skipped
[âś“] Updating icon theme cache: hicolor                                 success
[âś“] Updating desktop database                                          success
[âś“] Updating manpages database                                         success
Return type:

str

sync()[source]¶

Sync package metadata.

$ sudo eopkg --no-color update-repo
Updating repository: Solus
eopkg-index.xml.xz.sha1sum  (40.0  B)100%   0.00 --/- [--:--:--] [complete]
eopkg-index.xml.xz           (3.1 MB)100%  87.40 KB/s [00:00:34] [complete]
Package database updated.
Return type:

None

cleanup_cache()[source]¶

Removes things we don’t need anymore: - orphaned packages, - outdated package locks - package cache and package manager cache

$ sudo eopkg --no-color remove-orphans --yes-all
$ sudo eopkg --no-color clean
$ sudo eopkg --no-color delete-cache
Return type:

None

cli_names: tuple[str, ...] = ('eopkg',)¶

List of CLI names the package manager is known as.

This list of recognized CLI names is ordered by priority. That way we can influence the search of the right binary.

..hint::

This was helpful in the case of the Python transition from 2.x to 3.x, where multiple versions of the same executable were named python or python3.

By default, this property’s value is derived from the manager’s ID (see the MetaPackageManager.__init__ method above).

id: str = 'eopkg'¶

Package manager’s ID.

Derived by defaults from the lower-cased class name in which underscores _ are replaced by dashes -.

This ID must be unique among all package manager definitions and lower-case, as they’re used as feature flags for the mpm CLI.

virtual: bool = False¶

Should we expose the package manager to the user?

Virtual package manager are just skeleton classes used to factorize code among managers of the same family.