While not necessary to understand the basic usage, those
advanced concepts are fundamental to understand Mamba in details.
repo, is a generic way to describe a storage location for software packages.
In the Mamba’s context, it may points to a packages server, a channel or a subdir.
channelis an independant and isolated repo structure that is used to classify and administrate more easily a packages server.
A packages server may host one or multiple
subdiris a channel subdirectory specific to a given operating system/platform pair.
Mamba is a general purpose, langage agnostic package manager. The
subdir structure is a convenient way to provide and access packages depending on the targeted os and platform.
win-64 but not limited to those ones.
subdir provides the packages tarballs alongside a packages index including additional metadata.
In most cases, both
<os>-<platform> subdirs are used for an operation requiring data from the repo
Those metadata include license, file size, checksums, etc.
In Mamba, it is more often called a
repodata in reference to the index filename
repodata is specific to a channel subdirectory.
zipfile or so.
In the case of Mamba, 2
conda formats are used as package tarball:
tar.bz2is the historical formats: a
tarfile/ball that has been compressed using
condamore recent format that allows faster access to packages metadata
Each package contains its files index, used at a step called
linking consists in creating a link between the package cache where the tarballs are expanded into multiple directories/files and the installation target prefix.
The 3 kinds of links are:
hard-linksand fallback to
The advanced user may want to change that behavior using configuration (see the relevant CLI or API reference for more details):
soft-linksto be used as a prefered fallback to
hard-linksas default behavior (
copyis still a fallback)
hard-linksas default behavior (no fallback then)
soft-links more easily lead to broken environment due to their property of becoming invalid when the target is deleted/moved
hard-linkis the relation between a name/path and the actual file located on the file system.
hard-linkspointed the same file, but the ownership of the file is shared accross all those links (equivalent to a C++ shared pointer):
a reference counter is incremented when creating a new
hard-link, decremented when deleting one
the file system location is freed only when that counter decreases to 0
This is the most efficient way to link:
the underlying file on the file system is not duplicated
it is super efficient and resource friendly
hard-linkstays valid when another
hard-linkto the same reference is deleted/moved
There are some limitations to use
all the file systems are not supporting such links
those links are not working accross file systems/partitions
soft-link, also called
symlink(symbolic link), is much more similar to a shortcut or a redirection to another name.
It is as efficient as a
hard-link but has different properties:
works accross a filesystem/partition boundaries
becomes invalid then the pointed name is deleted or moved (no shared ownership)
It is not efficient nor resource friendly but preserve the file from deletion/modification of the reference.