Package: ejpm
ejpmejpmstands foreJANApacketmanagerhelperThe main goalof ejpm is to provide easy experience of:installing eJANAreconstruction framework and dependent packagesunify installation for different environments: various operating systems, docker images, etc.The secondary goal is to help users with e^JANA plugin development cycle.TL;DR;example for CentOS/RHEL7# INSTALL PREREQUESTIESejpmreqcentosejana# get list of OS packets required to build jana and depssudoyuminstall...# install watever 'ejpm req' shows# or if you are a lucky bash user (yes, csh is still common in physics):sudoyuminstall$(ejpmreqcentosejana--all)# SETUP EJPMejpm--top-dir=<where-to># Directory where packets will be installedejpmsetroot`$ROOTSYS`# (optional) if you have CERN.ROOT or other monster packets:# INSTALL PACKETSejpminstallejana# install ejana and dependencies (like genfit, jana and rave)ejpminstallg4e# install 'Geant 4 EIC' and dependencies (like vgm, hepmc)# SET RIGHT ENVIRONMENTsource<$(ejpmenv)# set environment variables,source~/.local/share/ejpm/env.sh# more convenient way. Use *.csh file for tcshMotivationejpmis here as there is no standard convention in HEP and NP of how to distribute and install software packages
with its dependencies. Some packages (like eigen, xerces, etc.) are usually supported by
OS maintainers, while others (Cern ROOT, Geant4, Rave) are usually built by users or
other packet managers and could be located anywhere. Here comes "version hell" multiplied by lack of software manpower
(e.g. to continuously maintain packages on distros level or even to fix GitHub issues)
Still we love our users and try to get things easier for them!
So here is ejpm.At this pointsejpmtries to unify experience and make it simple to deploy e^JANA for:Users on RHEL 7, 8 and CentOSUsers on Ubutnu/Debian (and Windows with WSL) **Docker and other containersIt should be as easy as> ejpm install ejanato build and install a packet called 'ejana'
and its dependencies. But it should also provide a possibility to adopt existing installations
and have a fine control over dependencies:> ejpm set root /opt/root6_04_16ejpmis not:It is not arealpackage manager, which automatically solves dependencies,
download binaries (working with GPG keys, etc.), finds fastest mirrors, manage... etc.ejpm is not a requirmentfor eJANA. It is not a part of eJANAbuild system and one can compile and install eJANAwithout ejpmGet ejana installedStep by step explained instruction:Install prerequisitesutilizing OS packet manager:# To see the prerequestiesejpmrequbuntu# for all packets that ejpm knowsejpmreqcentosejana# for ejana and its dependencies only# To put everything into packet managerapt-get-yinstall`ejpmrequbuntu--all`# debianyum-yinstall`ejpmreqcentos--all`# centos/centosAt this point only'ubuntu'and'centos'are known words for req command. Put:ubuntufor debian familycentosfor RHEL and CentOS systems.In the future this will be updated to support macOS and to have more detailed versionsSet top-dir. This is where all missing packets will be installed.ejpm--top-dir=<where-to-install-all>Register installed packets. You may have CERN.ROOT installed (req. version >= 6.14.00). Run this:ejpmsetroot`$ROOTSYS`You may set paths for other installed dependencies combining:ejpminstallejana--missing--explain# to see missing dependenciesejpmset<name><path># to set dependency pathOr you may skip this step and just get everything installed by ejpmInstall ejanaand all missing dependencies:ejpminstallejanaSet environment. There are 3 ways for doing this this:Dynamically source output ofejpm envcommand (recommended)source<(ejpmenv)# works for bash onlySave output ofejpm envcommand to a file (can be useful)ejpmenvsh>your-file.sh# get environment for bash or compatible shellsejpmenvcsh>your-file.csh# get environment for CSH/TCSHUse ejpm generatedenv.shandenv.cshfiles (lazy and convenient)$HOME/.local/share/ejpm/env.sh# bash and compatible$HOME/.local/share/ejpm/env.csh# for CSH/TCSH(!) The files are regenerated each timeejpm <command>changes something in EJPM.
If you changedb.jsonby yourself, ejpm doesn't track it automatically, so call 'ejpm env'
to regenerate these 2 filesEnvironmentEJPM_DATA_PATH- sets the path where the configuration db.json and env.sh, env.csh are locatedEach time you make changes to packets,
EJPM generatesenv.shandenv.cshfiles,
that could be found in standard apps user directory.For linux it is in XDG_DATA_HOME:~/.local/share/ejpm/env.sh      # sh version
~/.local/share/ejpm/env.csh     # csh version
~/.local/share/ejpm/db.json     # open it, edit it, love itXDG is the standard POSIX paths to store applications data, configs, etc.
EJPM usesXDG_DATA_HOMEto storeenv.sh,env.cshanddb.jsonanddb.jsonYou can always get fresh environment with ejpmenvcommandejpmenvYou can directly source it like:source<(ejpmenv)You can control where ejpm stores data by settingEJPM_DATA_PATHenvironment variable.