Package management
This document describes how packages within a Hermit environment can be found, installed, and managed. Packages are defined in configuration files called manifests which are retrieved from collections of manifests called manifest sources which in turn are commonly (but not always) Git repositories.
Keeping up to Date¶
Hermit retrieves package manifests from various locations, including Git repositories. It will periodically sync these repositories to your system to ensure you have the most up to date manifests. Similarly, Hermit will periodically update itself and packages installed by channel. You can force this by running:
project🐚~/project$ hermit update
Searching for Packages¶
Search for packages with the search
command, optionally passing a substring
to match within the package name or description:
project🐚~/project$ hermit search rust
rust (@nightly, 1.51.0)
A language empowering everyone to build reliable and efficient software.
Selecting Packages¶
Packages can be selected in one of three ways:
-
By version -
<package>-<version>
A specific version of a package can be installed by specifying
<package>-<version>
. eg.hermit install rustc-1.51.0
-
By channel -
<package>@<channel>
Channels can be explicitly selected with
<package>@<channel>
, eg.hermit install rustc@nightly
. Channels are automatically updated at a frequency defined by the package manifest. -
By preferred version -
<package>
When specifying just a package name, ie.
<package>
, the preferred version will be installed. The preferred version is, in order of priority:- The version specified as the
default
in the manifest. - The latest stable version.
- The latest unstable version.
- The last channel, alphabetically.
- The version specified as the
Installing Packages¶
To install the latest stable version of protoc
and the nightly
channel of
rust
:
project🐚~/project$ hermit install rust@nightly protoc
At this point if you ls bin
you will see something like the following:
project🐚~/project$ ls bin
README.hermit.md clippy-driver@ rust-analyzer@ rustc@
activate-hermit* hermit* rust-demangler@ rustdoc@
cargo@ hermit.hcl rust-gdb@
cargo-clippy@ miri@ rust-gdbgui@
cargo-miri@ protoc@ rust-lldb@
List Installed Packages¶
To list packages installed in the active environment:
project🐚~/project$ hermit list
protoc (3.14.0)
protoc is a compiler for protocol buffers definitions files.
rust (@nightly)
A language empowering everyone to build reliable and efficient software.
Package Information¶
You can obtain more detailed package information with hermit info <package>
, eg.
project🐚~/project$ hermit info rust
hermit info rust@nightly
Name: rust
Channel: nightly
Description: A language empowering everyone to build reliable and efficient software.
State: installed
Last used: 3m36.889138s ago
Source: https://static.rust-lang.org/dist/rust-nightly-x86_64-apple-darwin.tar.xz
Root: /home/user/.cache/hermit/pkg/rust@nightly
Binaries: cargo cargo-clippy clippy-driver cargo-miri miri rust-analyzer rust-demangler rust-gdb rust-gdbgui rust-lldb rustc rustdoc
Upgrading Packages¶
For package channels or versions that adhere to semantic versioning, Hermit
will automatically upgrade to the latest minor version using the
hermit upgrade
command:
project🐚~/project$ hermit upgrade rust
project🐚~/project$ rustc --version
rustc 1.51.0 (2fd73fabe 2021-03-23)
Downgrading / Changing Versions¶
To downgrade or switch to a specific version, use hermit install
to
explicitly specify the version. eg.
project🐚~/project$ hermit install rust-1.50.0
project🐚~/project$ rustc --version
rustc 1.50.0 (940f2a77 2021-01-02)
Uninstalling Packages¶
Use hermit uninstall
:
project🐚~/project$ hermit uninstall rust