Shell history

If vpsAdminOS is used as a live system, you'll find that root's shell history is lost after every reboot. There are several ways to store the history persistently.

Saving history on ZFS pools

The most straightforward way is to change the shells's $HISTFILE to a persistent location:

programs.bash.root.historyFile = "/tank/.bash_history";

This approach, however, is not recommended. Should the pool become suspended or any other ZFS error occur, the pool may become inaccessible. When the shell would attempt to access the history file, it may get stuck in an uninterruptible state, preventing you from logging in.

To connect to such a machine, you'd have to tell the shell to skip loading its configuration files, including the file where the custom $HISTFILE is set.

ssh -t vpsadminos /usr/bin/env bash --norc --noprofile

Mirroring history

vpsAdminOS makes it easy to mirror shell history on one or more ZFS pools, where it can be stored persistently. On boot, the history is restored from one of the pools.

To save history on pool tank, set:

programs.bash.root.historyPools = [ "tank" ];

For every pool that the shell history is mirrored to, a runit service histfile-<pool> is generated. The service monitors programs.bash.root.historyFile for changes and mirrors it on the pool.

In case the pool becomes inaccessible, the service will get stuck and mirroring will stop, but you will be able to login without any problems.