Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The documented method to build a Singularity container image requires using sudo privilege. In the howthis ow-to document, we outline how to work with this constraint. Obviously if you have sudo somewhere that you can use to build a Singularity container image, your problem is solved. For those who don't, here are some of the options:

  1. Install an Oracle Virtual Box on your desktop or laptop. You can them then install your own Linux virtual machine with the Singularity rpm, giving yourself root/sudo privilege on that VM. This will allows you to build an image. The solution works for both Windows, Mac and Linux desktop/laptop.
  2. Similarly, one can install Docker on your desktop or laptop. The Then install / pull a Linux Docker container and install Singularity rpm in the container. The rest is the same as above.
  3. Build what you need in a Docker image and upload to Docker Hub, and on a SLAC Linux host, use command "singularity pull your_docker_image" to convert and save it as a Singularity image.

If you want to do none of the above, you have an option to build a Singularity container image without root on a SLAC CentOS 7 machine. This method is a bit of hacking so it may not work in the future when Singularity make makes significant changes. The follows are the steps to do this, assuming you are on a SLAC CentOS 7 public login node (centos7.slac.stanford.edu), you current directory is /tmp, and you want to build a CentOS based Singularity container image:

  • Download and save a basic base CentOS image from Docker with the following command. This command will save a file download the image to /tmp/centos_centos7.7.1908.sif to /tmp. The image contains a very basic set of CentOS 7 operating system. It does include yum and rpm commands so that one can install more rpms.

singularity pull docker://centos:centos7.7.1908

...

singularity sif dump 3 /tmp/centos_centos7.7.1908.sif > /tmp/centos_centos7.7.1908.sqsh

  • Unpack the CentOS 7 operating system files from the squashfs image. This will create a sub-directory squashfs-root , which contains the OS filesand put all the files there. All files under this directory are own by you, not root.

...

    :param base: a :class:`yum.Yumbase` object.
    :raises: :class:`cli.CliError`
    """
    # if base.conf.uid != 0:
    # base.logger.critical(_('You need to be root to perform this command.'))
    # raise cli.CliError

  • After the above changechanges, you can start using the image, installing rpms or do other customization, such as

...