Image Packaging System

ID

ips

Home page

https://github.com/OpenIndiana/pkg5

Platforms

⨂ Unix (illumos, Solaris only)

Operations

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

purl types

pkg:ips

CLI name

pkg

Issues and PRs

📦 manager: ips

Source

meta_package_manager/managers/ips.py

The Image Packaging System, the native pkg of Solaris and illumos.

Documentation: pkg(1) man page.

The CLI is named pkg, which the FreeBSD PKG manager also claims. The two never coexist, their platforms being disjoint, but the manager ID here is ips so the two stay addressable apart.

Note

Only root may modify the image, so mutating operations escalate through sudo. sync escalates too: refreshing the catalog writes into the image’s own metadata rather than a user cache.

Caution

installed passes --no-refresh to keep the inventory a local read. Left off, pkg list contacts every configured publisher first, which turns a listing into a network round-trip and fails outright when the host is offline.

Todo

outdated is not implemented. The operation needs a sample naming both the installed and the available version, and the only illumos host available reported no packages have newer versions available.

That state cannot be manufactured on a consistent image, so do not spend time trying: installing a superseded build to force one is refused with did not match any allowable packages, the release incorporations constraining an image to one allowable version per package. Inventing a fixture is not an option either, a sample having to parse through this manager’s own parser and having to be real.

Capture it on a host whose image has fallen behind its publisher, which is the only state that emits the output.

What mpm adds to ips

Through mpm, ips gains --exact and --extended search, to narrow to exact names or match descriptions.

Bigger still, mpm reaches across every manager at once: mpm installed and mpm outdated cover ips 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 ips commands, in mpm

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

To…

With ips

With mpm

List what’s installed

pkg list -H --no-refresh

mpm --ips installed

Search for a package

pkg search -H -p tar

mpm --ips search tar

Install a package

sudo pkg install --accept archiver/gnu-tar

mpm install pkg:ips/archiver/gnu-tar

Upgrade one package

sudo pkg update --accept archiver/gnu-tar

mpm --ips upgrade archiver/gnu-tar

Upgrade everything

sudo pkg update --accept

mpm --ips upgrade --all

Remove a package

sudo pkg uninstall archiver/gnu-tar

mpm remove pkg:ips/archiver/gnu-tar

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 and extended search backfilled by mpm

install

upgrade

upgrade_all

remove

sync

cleanup

doctor

Selecting and configuring ips

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

[mpm]
ips = false

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

[mpm.managers.ips]
timeout = 900

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

Recipes

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

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

  • Export a compliance SBOM: mpm --ips 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 Image Packaging System’s release-age gating, from the cooldown support table:

Status: ❌ None (packaging dates are publisher-set manifest metadata)

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:

$ pkg list -H --no-refresh package/pkg
package/pkg                                       0.5.11-2025.0.0.5626       i--

and extracted with:

r"package/pkg\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 Image Packaging System well and a transcript below looks wrong, or a newer release changed its output format, report it.

$ pkg list -H --no-refresh
SUNWcs                                            0.5.11-2026.0.0.23029      i--
SUNWcsd                                           0.5.11-2026.0.0.23029      i--
archiver/gnu-tar                                  1.35-2023.0.0.0            i--
audio/audio-utilities                             0.5.11-2026.0.0.23029      i--
audio/lame                                        3.100-2025.0.0.3           i--

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 --ips installed --output json, or csv, toml, yaml), each package carrying a purl and a version comparable across managers.

Changelog

  • 8.0.0.dev0 (unreleased)

    • Add the Image Packaging System of Solaris and illumos, with inventory, search, install, remove, upgrade, catalog sync and history purge.