def build_from_spec(spec_file=None, build_dir=None, build_folder=False, sandbox=False, isolated=False, debug=False): '''build_from_spec will build a "spec" file in a "build_dir" and return the directory :param spec_file: the spec file, called "Singuarity" :param build_dir: the directory to build in. If not defined, will use tmpdir. :param isolated: "build" the image inside an isolated environment (>2.4) :param sandbox: ask for a sandbox build :param debug: ask for verbose output from builder ''' if spec_file == None: spec_file = "Singularity" if build_dir == None: build_dir = tempfile.mkdtemp() bot.debug("Building in directory %s" %build_dir) # Copy the spec to a temporary directory bot.debug("Spec file set to %s" % spec_file) spec_path = os.path.abspath(spec_file) bot.debug("Spec file for build should be in %s" %spec_path) image_path = "%s/build.simg" %(build_dir) # Run create image and bootstrap with Singularity command line tool. cli = Singularity(debug=debug) print("\nBuilding image...") # Does the user want to "build" into a folder or image? result = cli.build(image_path=image_path, spec_path=spec_path, sandbox=sandbox, isolated=isolated) print(result) # If image, rename based on hash if sandbox is False: version = get_image_file_hash(image_path) final_path = "%s/%s.simg" %(build_dir,version) os.rename(image_path,final_path) image_path = final_path bot.debug("Built image: %s" %image_path) return image_path
from singularity.cli import Singularity # Create a client S = Singularity() # Get general help: S.help() # These are the defaults, which can be specified S = Singularity(sudo=False, debug=False) # Note that the "create" and "import" workflow is deprecated in favor of build # https://singularityware.github.io/docs-build image = S.build('myimage.simg', 'docker://ubuntu:latest') # requires sudo # (Deprecated) create an image and import into it image = S.create('myimage.simg') S.importcmd(image, 'docker://ubuntu:latest') # Execute command to container result = S.execute(image, command='cat /singularity') print(result) ''' '#!/bin/sh\n\nexec "/bin/bash"\n' ''' # For any function you can get the docs: S.help(command="exec")