SW:Singularity:Examples
Contents
Examples
Prebuilt images
HPRC provides (will provide) images using the steps below on ada/terra in /scratch/datasets/Singularity/images if you want to use a prebuilt image. At present(/soon) they include.
- Fedora28-HPRCLAB-40GB.img - a Fedora 28 image based on HPRC lab workstations with room to work
- Note: this will not work on ada. Various versions of Fedora from 23 to 28 were tried and all failed on ada due to the older kernel in CentOS6.
- CentOS6-XXGB.img - a CentOS 6 image populated with packages based on HPRCLAB workstations (where possible) with room to work
- CentOS7-XXGB.img - a CentOS 7 image populated with packages based on HPRClab workstations (where possible) with room to work
Building your own images
In order to build Singularity images yourself you will need a system with a modern Linux distribution (e.g. Ubuntu/Fedora/CentOS/etc) that you have sudo/root on. HPRC users cannot do this on HPRC systems given the lack of sudo.
Fedora 28
Note that the final image requires a kernel newer than the one provided by CentOS6. This means it can not be used on ada (only on terra). Fedora version 23-28 were attempted but they eventually failed on ada. So if you plan to use a Fedora-based Singularity image you will need to use terra.
Objective
The objective in this case is a Fedora28-HPRCLAB.img file that has space for users to manuever around and install stuff:
- that we can provide to users, a Singularity .img file (self-contained), for them to update as needed (as root on their own workstations) that also runs on our clusters.
- is already populated with HPRCLAB RPMs
- has plenty of disk space for the user to add files (as non-root) while on the cluster
- Example below was created on HPRCLAB workstations.
Building an image on your Fedora 28 workstation
Gather information for package installation
- Before you start, create a list of RPMs (rpmlist) you want to install. Also make a file (repoURLs) listing the URLs for the repo install RPMs. Then place both in /root/forFedora28 on the host/build system. These will be used later while in the sandbox shell. For Fedora 28 we will use the RPMFusion repos and the package list from current HPRC lab workstations.
# cat /root/forFedora28/repoURLs https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-28.noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-28.noarch.rpm # head -5 /root/forFedora28/rpmlist a2ps a52dec aajohan-comfortaa-fonts aalib-libs aalto-xml
Create/start a shell in a "sandbox"
- create a Singularity sandbox from one of Fedora's Docker images
sudo singularity build --sandbox Fedora28-HPRCLAB.sandbox docker://fedora:28
- start a shell in the sandbox for the next steps
sudo singularity shell --writable Fedora28-HPRCLAB.sandbox/
- go ahead and create bind points for HPRC cluster filesystems
mkdir /scratch /work
Populate the sandbox with packages =
- Install the RPMFUSION repos (needed for below)
dnf -y install `cat /root/forFedora28/repoURLs`
- populate the sandbox with all the RPMs (we do them in groups at first in case there a problems and then do all to see what those problems were. (get a snack, take a walk... it can take awhile)
for x in {a..z} ; do dnf -y --skip-broken install `grep ^$x /root/forFedora28/rpmlist` done dnf -y --skip-broken install `cat /root/forFedora28/rpmlist`
There will still be packages that have "No match" due to not including the repos for them.
- do NOT add users with useradd... if you do, be sure not to add your NetID or things will break.
- create bind directories for interfacing with HPRC clusters (Note: have to do this now while still in sudo shell)
mkdir /scratch /work
- once you are happy with the sandbox log out from it (logout/exit/Ctrl-D).
Create an image (.img)
- to make an .img file that provides space for the user to work in (e.g. download/install software). These steps do not require sudo since they don't really create anything in the image.
- first, determine the installed size of the sandbox
* Given that, add some space for the user to work in. In this case, we will use 40GB (approx. sandbox size + 15G). <pre> singularity image.create Fedora28-HPRCLAB-40GB.img # create .img file singularity image.expand -s 40960 Fedora28-HPRCLAB-40GB.img # expand to 40GB, get another snack while you wait
Note: works because there is no real filesystem yet [some ext3/4 filesystems seem to have a problem with expand]
- Now import the sandbox into the 40GB image (more snacks/time)
sudo tar -cvf - -C Fedora28-HPRCLAB.sandbox/ . | sudo singularity image.import Fedora28-HPRCLAB-40GB.img
(see the last/tar example in 'singularity image.import --help')
Test on host build system
- open a non-sudo shell and see if you can do "things"
singularity shell Fedora28-HPRCLAB-40GB.img
Using your image on HPRC clusters
CentOS 6
[JACK: delete the duplication once absorbed above and point out slight differences for CentOS]
- Before you start, create a list of RPMs (rpmlist) you want to install. Also make a file (repoURLs) listing the URLs for the repo install RPMs. Then place both in /root/forCentOS6 on the host/build system. These will be used later while in the sandbox shell.
Create a sandbox
- create/start sandbox
sudo singularity build --sandbox CentOS6.sandbox docker://centos:6 sudo singularity shell --writable CentOS6.sandbox/
- create bind points for HPRC cluster filesystems
mkdir /scratch /work
- install repos for other RPMS (see the note you left above in /root with URL)
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
- populate sandbox with RPMs
for x in `cat /root/rpmlist` ; do yum -y install $x ; done mkdir /scratch /work exit
- exit sandbox shell
exit