Installing HashDist for use in software distributions¶
Dependencies¶
HashDist depends on Python 2.6+.
A bootstrap script should be made to facilitate installation everywhere...
Bundling vs. sharing¶
HashDist (by which we mean both the library/programs and the source
and build artifact directories on disk) can either be shared between
distributions or isolated; thus one may have build artifacts
in ~/.hashdist
which are shared between PyHPC and QSnake, while
Sage has its own HashDist store in ~/path/to/sage/store
.
Note
The main point of sharing HashDist is actually to share it between different versions of the same distribution; i.e., two different QSnake versions may be located in different paths on disk, but if they use the global HashDist they will share the build artifacts they have in common.
Another advantage is simply sharing the source store among distributions which build many of the same source tarballs and git repos.
Managing conflicting HashDist installations¶
By default, HashDist core tools are exposed through the hit
command and the hashdist
Python package. It is configured through
~/.hitconfig
:
[hashdist]
hit = ~/.hashdist/bin/hit
python2-path = ~/.hashdist/lib/python2
[sources]
store = ~/.hashdist/source
keep-transient = 1 week
keep-targz = forever
keep-git = forever
<...>
If a software distribution bundles its own isolated HashDist
environment then the hit
command should be rebranded (e.g.,
qsnake-hit
), and it should read a different configuration
file. Similarly, the Python package should be rebranded (e.g.,
qsnake.hashdist
).
The command hit
should always read ~/.hitconfig
(or
the configuration file specified on the command line) and launch the
command found there under the hit key. Similarly, import
hashdist
should add the package from the location specified in the
configuration file to sys.path
and then do from hashdistlib
import *
. The reason is simply that the paths mentioned in that
file are managed by a particular version of hashdist, and we want an
upgrade path. Essentially, the hit
command-line tool and the
hashdist
Python package are not part of the software stack the
distribution provides (unless rebranded). If you put an old, outdated
profile in $PATH
, the hit
command found in it will simply
read ~/.hitconfig
and then launch a newer version of
hit
. (However, qsnake-hit
is free to behave however it
likes.)
The best way of distributing HashDist is in fact to get it through the
operating system package manager. In that case, the hit key in ~/.hitconfig
will point to /usr/bin/hit
. Alternatively, a
bootstrapping solution is provided and recommended which make sure that each
distribution using a non-rebranded HashDist use the same one.
Bootstrap script¶
TODO