Usage¶
seamm-manager is a command with sub-commands; seamm-manager --help lists them
and seamm-manager <command> --help the options of each. Global options come first:
--root DIR chooses the SEAMM root (default $SEAMM_ROOT if set, else the
installation whose environment the manager runs from – ~/SEAMM_DEV/venv/bin/seamm-manager
and the app SEAMM-Manager (SEAMM_DEV) work on ~/SEAMM_DEV – else ~/SEAMM), --development uses ~/SEAMM_DEV and adds the development tools,
--name sets the installation’s name in its services and apps, and --log-level
controls verbosity. With no command the graphical installer opens.
Command |
What it does |
|---|---|
|
Install SEAMM and all MolSSI plug-ins (creating the
environment if needed); |
|
Update the manager, then the packages, to the versions in the published lock, in a new version of the environment (see below); restarts the services that were running, leaving stopped ones stopped. |
|
List the SEAMM packages with installed and available versions. |
|
Remove packages (running their plug-in uninstallers);
|
|
Inspect, create, or rebuild |
|
( |
|
The versions of the environment; switch to one, go back |
|
to the previous one, or remove old unused ones. |
|
Keep a version from prune, e.g. for jobs on a cluster’s compute nodes that name it directly. |
|
Run a flowchart in two environments (versions, installations) and compare every result file. |
|
Manage the JobServer and web-interface background services (launchd on macOS, systemd on Linux). |
|
Desktop apps for the flowchart editor and services. |
|
Inspect or migrate the jobs database. |
|
Rebuild the jobs database from the job directories, keeping the accounts and job owners; the old database is kept as a dated backup. |
|
Report how many job flowcharts are still in format 2.0. |
|
Convert the job flowcharts and the jobs database to
flowchart format 3.0 (dry run and confirmation first;
|
|
Re-read the package list from Zenodo. |
Versions of the environment¶
<root>/venv is a link to the current version of the environment, in
<root>/venvs/<date and time>. install and update never change the current
version while it may be in use: they build the next version beside it from a copy of
the current one plus the change, switch the link, and restart the services that
were running so that they run from it (a service stopped on purpose stays stopped). Jobs already running keep the version they started in, and the
services and apps always name the real path, never the link, since Python does not
follow the link when it starts (--in-place changes the current environment
directly instead, which is only safe with no jobs running). environment versions
lists the versions and the processes using each; rollback and switch move
the link; prune removes versions that are old, unused, unpinned and not among
the newest two. A switch is refused while a process started through the link is running (a job
begun before the first versioned update), and --force overrides that.
Versions and the lock file¶
The package list and a lock file – the pinned versions of every SEAMM package and
every dependency that resolved together – are published nightly to Zenodo by
seamm_packaging. install and update pass that lock to uv as
constraints, so what you get is the tested set, and two installations made the same
day are identical. --no-constraints opts out and takes the newest releases that
resolve. Because the list is refreshed nightly, a release made today is invisible to
update until tomorrow; update --latest asks PyPI for each package’s newest
release instead, pins it exactly, and skips the lock (which would pin yesterday’s
version). Without the lock the manager resolves the whole installation together: the
packages being updated, their dependencies, and the requirements of every other
installed package. Dependencies are upgraded as far as all of them allow, and if no set
of versions satisfies everything the update stops, reports why, and changes nothing.
The lock never moves an installed package backwards: where the installed version is
newer than the lock’s pin (a release made since the nightly list, or a development
build), that version is the floor instead, and the manager says which packages it kept.
Before switching to a new version of the environment the manager compares it with the
current one; if a package would go back to an older version you did not ask for, a
package would be removed, or an installed package’s requirements would newly be unmet,
the new version is left built but not switched to, and the manager says why and what to
run instead (update --latest, or environment switch to use it anyway). The
command then exits with status 1, as it does when a switch is refused because processes
started through the link are running, so scripts can tell that nothing changed.
environment recreate is the exception: it is a deliberate clean rebuild at the
lock’s versions, so it is not checked this way and may move packages back; use
environment recreate --latest to keep today’s releases. After any install
or update it also warns about any package whose requirements are not met. If Zenodo
cannot be reached, the manager says so and uses the package list and lock it saved last
time.
When a plug-in’s installer updates its code’s conda environment, it applies the
plug-in’s environment file only if the file changed since it was last applied, or if
that was more than a week ago, since re-solving a conda environment is slow.
update --refresh-codes applies them all now, to pick up new builds of the codes.
The one exception is the manager itself: since the list is refreshed
nightly, after an install or update the manager makes sure the environment holds
the same release it is running, so the plug-ins’ installers never run on an older
one. After every change the manager writes <root>/environments/<timestamp>_*.txt
with the full pip freeze of the environment as a record.
Several installations¶
Any number of installations can live side by side, e.g. production in ~/SEAMM,
development in ~/SEAMM_DEV and a trial of a new release in ~/SEAMM_NEW. Each
has its own environment, configuration, data and jobs; SEAMM finds the installation
from the environment it runs in, so nothing needs --root once installed.
The default installation ~/SEAMM has the plain names: services jobserver and
webui, the app SEAMM. Any other installation carries its name, which is the
root’s directory name unless --name gives another: jobserver-SEAMM_NEW,
SEAMM (SEAMM_NEW).app, and on macOS the process SEAMM-JobServer-SEAMM_NEW.
seamm-manager services status --all lists every installation’s services.
services create gives the web interface the service’s existing port, or else
the first free port from 55055, so a second installation’s web interface does not
clash with the first’s; --port chooses one. It also stops and replaces any other
SEAMM service of the same kind started with the same root, whatever its name (such
as an older dev_jobserver), so two JobServers never share one datastore.
Reference data – VASP potentials, local: forcefields and models, the
thermochemistry database, dashboards.ini – is taken from the installation’s own
root if it has a copy, else from ~/SEAMM, so a new installation works without
copying it.
The external codes’ conda environments (seamm-lammps, seamm-mopac, …) are
governed by the installation’s code-environment policy, kept in
<root>/installation.ini and shown by environment show:
ownThe plug-ins create and update the codes’ environments. Always the case for
~/SEAMM.sharedThe default for any other installation. Installing a plug-in copies
~/SEAMM’s<code>.iniinto the root, so the code runs from the same environment; installing or updating never creates, updates or removes a conda environment, and a code that~/SEAMMlacks is reported instead. So a trial installation cannot change the codes production uses.prefixedThe installation gets its own copies, named
seamm-<name>-<code>(e.g.seamm-SEAMM_NEW-lammps), for trying new versions of the codes themselves.
Choose it with seamm-manager --root <root> install --code-environments <policy>.
The plug-ins’ installers honour it through the seamm-manager in the installation’s
own environment; if that copy is too old to know about policies, the manager skips
their install, update and uninstall steps rather than risk the shared environments.
Trying a new release beside production¶
To try new versions of SEAMM and the plug-ins without touching the installation you use, make a second one, use it, and remove it:
$ seamm-manager --root ~/SEAMM_NEW install --all
$ seamm-manager --root ~/SEAMM_NEW update --all --latest # today's releases
$ seamm-manager --root ~/SEAMM_NEW install seamm-webui
$ seamm-manager --root ~/SEAMM_NEW services create jobserver
$ seamm-manager --root ~/SEAMM_NEW services create webui --webui-host 127.0.0.1
$ seamm-manager --root ~/SEAMM_NEW apps create
The new installation shares ~/SEAMM’s codes (it copies their .ini files and
never creates or updates a conda environment), gets its own JobServer
(jobserver-SEAMM_NEW), web interface on the next free port (55056 beside
production’s 55055) and apps (SEAMM (SEAMM_NEW)), and keeps its jobs in
~/SEAMM_NEW/Jobs. Submit jobs to it through its own web interface or app.
To remove it:
$ seamm-manager --root ~/SEAMM_NEW services delete jobserver webui
$ seamm-manager --root ~/SEAMM_NEW apps delete
$ seamm-manager --root ~/SEAMM_NEW environment remove
$ rm -rf ~/SEAMM_NEW
environment remove removes only the Python environment; the last command removes
the rest (jobs, logs, configuration, the web interface’s environment).
Where things are¶
~/SEAMM/ the root (--root)
~/SEAMM/venv/ the Python environment: SEAMM and all plug-ins
~/SEAMM/venv-webui/ the web interface's environment (optional)
~/SEAMM/environments/ the lock file and per-change snapshots
~/SEAMM/Jobs/ the datastore (jobs and their files)
~/SEAMM/services/ on macOS, the apps the services run as (SEAMM-JobServer, ...)
~/SEAMM/*.ini configuration for SEAMM and each code
On macOS each service runs the environment’s Python from a small background app in
~/SEAMM/services, so it shows up in Activity Monitor as SEAMM-JobServer or
SEAMM-WebUI with the SEAMM icon rather than as python3.12.
The manager itself, installed with uv tool install, lives in uv’s tool directory
and is also installed into ~/SEAMM/venv so that the plug-ins’ own installers can
import it there.
The queue file¶
install also writes <root>/queues-example.ini, an annotated example of
the JobServer’s queue file <root>/<name>.ini (the hostname by default),
which says where jobs may be sent: this machine, its own SLURM, a cluster over
ssh. Copy it to that name, edit it and restart the JobServer. The JobServer’s
user guide and the SEAMM documentation’s how-to “Configure the JobServer’s
Queues” describe the keys.