diff --git a/ganga/GangaLHCb/Lib/Applications/GaudiExec.py b/ganga/GangaLHCb/Lib/Applications/GaudiExec.py index aae0a544f6..59cb2e27ac 100755 --- a/ganga/GangaLHCb/Lib/Applications/GaudiExec.py +++ b/ganga/GangaLHCb/Lib/Applications/GaudiExec.py @@ -195,9 +195,9 @@ class GaudiExec(IPrepareApp): 'nMakeCores': SimpleItem(defvalue=1, doc='Number of cores to be provided via the "-j" option to the "make" command'\ 'when building the ganga-input-sandbox'), - 'apptainerBuild': SimpleItem(defvalue=False, doc="Run the build command in apptainer"), - 'containerLocation': SimpleItem(defvalue='/cvmfs/cernvm-prod.cern.ch/cvm4', - doc='Where is the container to use for the build located'), + 'useApptainer': SimpleItem(defvalue=False, doc="Run the commands in apptainer"), + 'containerLocation': SimpleItem(defvalue='/cvmfs/lhcb.cern.ch/containers/os-base/slc6-devel/prod/amd64', + doc='Where is the container to use for the build located'), # Prepared job object 'is_prepared': SimpleItem(defvalue=None, strict_sequence=0, visitable=1, copyable=1, hidden=0, typelist=[None, ShareDir], protected=0, comparable=1, @@ -557,7 +557,18 @@ def execCmd(self, cmd): if isLbEnv: initialCommand = 'source /cvmfs/lhcb.cern.ch/lib/LbEnv && source LbLogin.sh -c %s && make -j%s' % ( self.platform, self.nMakeCores) - rc, stdout, stderr = _exec_cmd(initialCommand, self.directory) + if self.useApptainer or 'slc6' in self.platform: + try: + logger.info('Building inside apptainer: %s' % self.containerLocation) + cmd_to_run = 'source /cvmfs/lhcb.cern.ch/lib/LbEnv && apptainer exec --bind $PWD --bind %s --bind /cvmfs:/cvmfs:ro ' % path.dirname( + cmd_file.name) + self.containerLocation + ' bash -c "%s"' % initialCommand + rc, stdout, stderr = _exec_cmd(cmd_to_run, self.directory) + except BaseException: + logger.error('Failed to build the application inside a container. ' + 'Perhaps the specified container location is not accessible.') + raise GangaException('Failed to execute make command') + else: + rc, stdout, stderr = _exec_cmd(initialCommand, self.directory) if rc != 0: logger.error("Failed to perform initial make on a Cmake based project") logger.error("This is required so that the './run' target exists and is callable within the project") @@ -569,8 +580,8 @@ def execCmd(self, cmd): if self.apptainerBuild or 'slc6' in self.platform: try: logger.info('Building inside apptainer: %s' % self.containerLocation) - cmd_to_run = 'source /cvmfs/lhcb.cern.ch/lib/LbEnv && apptainer exec --env "PATH=$PATH" --bind $PWD --bind /cvmfs:/cvmfs:ro '\ - + self.containerLocation + ' ' + cmd_file.name + cmd_to_run = 'source /cvmfs/lhcb.cern.ch/lib/LbEnv && apptainer exec --bind $PWD --bind %s --bind /cvmfs:/cvmfs:ro ' % path.dirname( + cmd_file.name) + self.containerLocation + ' bash -c "source ' + cmd_file.name + '"' rc, stdout, stderr = _exec_cmd(cmd_to_run, self.directory) except BaseException: logger.error('Failed to build the application inside a container. '