---
# System prepended metadata

title: Deploying software on Bridges 2 (B2) using Singularity containers
tags: [internal, Summer 2023, documentation, containerization]

---

# Deploying software on Bridges 2 (B2) using Singularity containers

###### tags: `Summer 2023` `documentation` `internal` `containerization`

## Summary
This document describes best practices when deploying software on Bridges2 using Singularity containers. This document mainly applies to Biomedical apps.

## Pre-requisites
- [ ] Account on GitHub
- [ ] Be part of the [PSC Organization](https://github.com/pscedu) on GitHub
- [ ] Account on B2
- [ ] Be a member of the `pscstaff` group
- [ ] Elevated access to run Singularity if you want to build containers on B2. If not, then have an account on SyLabs.io to build containers remotely.

## In a nutshell
End users will be loading applications into their workspace as they would any other tool. In the background, the modulefile will be calling scripts that in turn will be calling the containers.

If done properly, the end user will not be aware the tool was deployed in a Singularity container.

## Procedure
### Building the scripts, modulefiles and Singularity images

* Create a GitHub repository that will hold the recipes and scripts and add the repository to the `Biomedical Applications` team. For example, the repository below will be used in this document.

[![GitHub Card](https://i.imgur.com/gskffmP.png)](http://www.github.com/pscedu/singularity-blast)

* Create a folder within the repo that matches the version you want to install. There should be one folder per version in the repo. Avoiding multiple releases should make maintenance easier in the long run. For example, in the `singularity-blast` repository we have created two folders for versions `2.9.0` and `2.11.0`.

![](https://i.imgur.com/iiNnjj4.png)

* Search public registries for an existing Singularity image, for example [BioContainers](https://biocontainers.pro/), [SyLabs.io](https://sylabs.io/), [Quay.io](https://quay.io/), [Docker Hub](https://hub.docker.com/) or any other public registry.
* If an image exists, then create a script that pulls the image, named `pull.sh`,  and add it to the repo in the corresponding folder. For example, you can find an image for `BLAST 2.9.0` on Galaxy Depot and hence the `pull.sh` might look like

```
#!/bin/bash

singularity pull https://depot.galaxyproject.org/singularity/blast%3A2.9.0--pl526he19e7b1_7
```

* If an image does not exist, then create a Singularity definition file for the app and add to the repo in the corresponding folder. For example, for `BLAST 2.11.0` the definition file is 

```
Bootstrap: docker
From: debian:bullseye

%labels
    MAINTAINER icaoberg
    EMAIL icaoberg@psc.edu
    WEBSITE http://gitub.com/pscedu/singularity-blast
    COPYRIGHT Copyright © 2021 Pittsburgh Supercomputing Center. All Rights Reserved.    
    VERSION 2.11.0

%post
    apt update
    apt install -y ncbi-blast+
```

:::warning
:warning: Notice a COPYRIGHT string has been added to the definition file
:::

* Create a modulefile named `modulefile.lua`and add to the repo in the corresponding folder. For example, for `BLAST 2.11.0` the modulefile is 

```
--
-- BLAST+ 2.11.0 modulefile
--
-- "URL: https://www.psc.edu/resources/software"
-- "Category: Biological Sciences"
-- "Description: BLAST (basic local alignment search tool) is an algorithm and program for comparing primary biological sequence information, such as the amino-acid sequences of proteins or the nucleotides of DNA and/or RNA sequences."
-- "Keywords: singularity bioinformatics"

whatis("Name: BLAST+")
whatis("Version: 2.11.0")
whatis("Category: Biological Sciences")
whatis("URL: https://www.psc.edu/resources/software")
whatis("Description: BLAST (basic local alignment search tool) is an algorithm and program for comparing primary biological sequence information, such as the amino-acid sequences of proteins or the nucleotides of DNA and/or RNA sequences.")

help([[
Description
-----------
BLAST (basic local alignment search tool) is an algorithm and program for comparing primary biological sequence information, such as the amino-acid sequences of proteins or the nucleotides of DNA and/or RNA sequences.

To load the module type

> module load BLAST/2.11.0

To unload the module type

> module unload BLAST/2.11.0

Documentation
-------------
https://www.ncbi.nlm.nih.gov/books/NBK279690/

For help, type for example

> blastn -help

Tools included in this module are
* aalookup_unit_test
* msa2pssm_unit_test
* aascan_unit_test
* ntlookup_unit_test
* align_format_unit_test
* ntscan_unit_test
* bdbloader_unit_test
* optionshandle_unit_test
* bl2seq_unit_test
* phiblast_unit_test
* blastdb_aliastool
* prelimsearch_unit_test
* blastdbcheck
* project_tree_builder
* blastdbcmd
* psibl2seq_unit_test
* blastdbcp
* psiblast
* blastdb_format_unit_test
* psiblast_iteration_unit_test
* blastdiag_unit_test
* psiblast_unit_test
* blastengine_unit_test
* pssmcreate_unit_test
* blastextend_unit_test
* pssmenginefreqratios_unit_test
* blastfilter_unit_test
* querydata_unit_test
* blast_formatter
* queryinfo_unit_test
* blast_format_unit_test
* redoalignment_unit_test
* blasthits_unit_test
* remote_blast_unit_test
* blastinput_unit_test
* rpsblast
* blastn
* rpstblastn
* blastoptions_unit_test
* rps_unit_test
* blastp
* scoreblk_unit_test
* blast_services_unit_test
* search_strategy_unit_test
* blastsetup_unit_test
* seedtop
* blast_unit_test
* segmasker
* blastx
* seqdb_demo
* convert2blastmask
* seqdb_perf
* datatool
* seqdb_unit_test
* deltablast
* seqinfosrc_unit_test
* delta_unit_test
* seqsrc_unit_test
* dustmasker
* setupfactory_unit_test
* gapinfo_unit_test
* split_query_unit_test
* gencode_singleton_unit_test
* subj_ranges_unit_test
* gene_info_reader
* tblastn
* gene_info_unit_test
* tblastx
* hspfilter_besthit_unit_test
* tracebacksearch_unit_test
* hspfilter_culling_unit_test
* traceback_unit_test
* hspstream_unit_test
* uniform_search_unit_test
* legacy_blast.pl
* update_blastdb.pl
* linkhsp_unit_test
* version_reference_unit_test
* makeblastdb
* windowmasker
* makembindex
* makeprofiledb
* writedb_unit_test
]])

local package = "BLAST"
local version = "2.11.0"
local base    = pathJoin("/opt/packages",package,version)
prepend_path("PATH", base)
```

:::warning
:warning: Since the modulefile was build manually, then it is important that you follow the official template at the time of creation
:::

* It is very important that the modulefile is properly documented.
* Any changes to the modulefile template should be consulted with superiors.

## Add `build.sh` and `rbuild.sh` scripts
### `build.sh`
Add a script named `build.sh` that will be used to build the Singularity image locally. The file should remain the same in every reposity and the only line that should be different is the line holding the `IMAGE` variable. For example, for `BLAST 2.11.0` the file is

```
#!/bin/bash

# Copyright © 2021 Pittsburgh Supercomputing Center.
# All Rights Reserved.

IMAGE=singularity-BLAST-2.11.0.sif
DEFINITION=Singularity

if [ -f $IMAGE ]; then
	rm -fv $IMAGE
fi

sudo singularity build $IMAGE $DEFINITION

if [ -f $IMAGE ]; then
	exit 0
else
	exit 1
fi
```

### `rbuild.sh`
Add a script named `rbuild.sh` that will be used to build the Singularity image remotely. The file should remain the same in every reposity and the only line that should be different is the line holding the `IMAGE` variable. For example, for `BLAST 2.11.0` the file is

```
#!/bin/bash

# Copyright © 2021 Pittsburgh Supercomputing Center.
# All Rights Reserved.

IMAGE=singularity-BLAST-2.11.0.sif
DEFINITION=Singularity

if [ -f $IMAGE ]; then
	rm -fv $IMAGE
fi

singularity build --remote $IMAGE $DEFINITION

if [ -f $IMAGE ]; then
	exit 0
else
	exit 1
fi
```

## Add a script per binary in the container
For each binary in the container that you want to expose to the users, you will need to create a script that calls Singularity. For example, in `BLAST 2.11.0` there exists a binary called `blastn`, hence we will create a script named `blastn` that looks like

```
#!/bin/bash

VERSION=2.11.0
PACKAGE=BLAST
TOOL=blastn
DIRECTORY=$(dirname $0)

PERSISTENT_FILE_STORAGE=/ocean
if [ -d $PERSISTENT_FILE_STORAGE ]; then
	OPTIONS="-B $PERSISTENT_FILE_STORAGE"
fi

if [ -d /local ]; then
	OPTIONS=$OPTIONS" -B /local"
fi

singularity exec $OPTIONS $DIRECTORY/singularity-$PACKAGE-$VERSION.sif $TOOL "$@"
```

`BLAST` is not a good example in the sense that there are many scripts that will need to be created, i.e. 10+ scripts. To facilitate this process, some repositories have a `generate_scripts.sh` script that is used to generate the list of scripts.

## Add 'test.sh'
Add a file named `test.sh` that will be used to test the package. There should exist one file in each folder. For example, for `BLAST 2.11.0`, the file is empty and looks like

```
#!/bin/bash

echo "Nothing to see here... move along"
```

## Add `LICENSE`
Add a file named `LICENSE` to the top level of the repository. This file should remain the same in every repository.

```
Copyright © 2021, Pittsburgh Supercomputing Center. All Rights Reserved.

Permission to use, copy, and modify this software and its documentation without 
fee for personal use or non-commercial use within your organization is hereby
granted, provided that the above copyright notice is preserved in all copies and
that the copyright and this permission notice appear in supporting documentation.

Permission to redistribute this software to other organizations or individuals is not
permitted without the written permission of the Pittsburgh Supercomputing Center.
PSC makes no representations about the suitability of this software for any purpose.

It is provided "as is" without express or implied warranty.
```

## Building containers on Bridges2
### If you have elevated privileges to run Singularity
Make sure to run singularity builds as `sudo`, that’s all that matters.

:::warning
:warning: If you are constantly building containers, then run
```
singularity cache clean
```
often to clean cache
:::

### If you don’t have elevated privileges
If you do not have elevated privileges, you can still build the images remotely.

Follow these steps to do so
* Create an account on SyLabs.io.
* Click `Access Tokens` on the top-right menu

![](https://i.imgur.com/ILAwB6T.png)

* Click Create a `New Access Token`

![](https://i.imgur.com/HlKCHjo.png)

* Click `Copy token to Clipboard`

![](https://i.imgur.com/ztbbC8B.png)

* Login to Bridges2 and run the command

```
singularity remote login
```

* Paste the token and click `Enter`.

Just make sure to use the `--remote` flag when running singularity build.

:::warning
:warning: If you are constantly building containers remotely, make sure to erase them from your account to avoid running out of space.

If you are creating an image that copies a local file into the container, building the image remotely might not provide you with a solution.
:::

## Deploying software on B2
Once you have created all the files necessary for deployment copy over the files to B2.

### Singularity image and files
* First make sure the folder `/opt/packages/<package-name>` exists. Using the example above, make sure this folder exists

```
➜  pwd
/opt/packages/BLAST
```

if not, then create it. 

```
➜  pwd
/opt/packages/BLAST/2.11.0
```

* In this newly created folder copy over the Singularity image and all related scripts.

```
➜  ls
aalookup_unit_test        deltablast                      queryinfo_unit_test
aascan_unit_test          delta_unit_test                 redoalignment_unit_test
align_format_unit_test    dustmasker                      remote_blast_unit_test
bdbloader_unit_test       gapinfo_unit_test               rpsblast
bl2seq_unit_test          gencode_singleton_unit_test     rpstblastn
blastdb_aliastool         gene_info_reader                rps_unit_test
blastdbcheck              gene_info_unit_test             scoreblk_unit_test
blastdbcmd                generate_binaries.sh            search_strategy_unit_test
blastdb_convert           hspfilter_besthit_unit_test     seedtop
blastdbcp                 hspfilter_culling_unit_test     segmasker
blastdb_format_unit_test  hspstream_unit_test             seqdb_demo
blastdb_path              legacy_blast.pl                 seqdb_perf
blastdiag_unit_test       linkhsp_unit_test               seqdb_unit_test
blastengine_unit_test     makeblastdb                     seqinfosrc_unit_test
blastextend_unit_test     makembindex                     seqsrc_unit_test
blastfilter_unit_test     makeprofiledb                   setupfactory_unit_test
blast_formatter           msa2pssm_unit_test              singularity-BLAST-2.11.0.sif
blast_format_unit_test    ntlookup_unit_test              split_query_unit_test
blasthits_unit_test       ntscan_unit_test                subj_ranges_unit_test
blastinput_unit_test      optionshandle_unit_test         tblastn
blastn                    phiblast_unit_test              tblastx
blastoptions_unit_test    prelimsearch_unit_test          tracebacksearch_unit_test
blastp                    project_tree_builder            traceback_unit_test
blast_report              psibl2seq_unit_test             uniform_search_unit_test
blast_services_unit_test  psiblast                        update_blastdb.pl
blastsetup_unit_test      psiblast_iteration_unit_test    version_reference_unit_test
blast_unit_test           psiblast_unit_test              windowmasker
blastx                    pssmcreate_unit_test            writedb_unit_test
convert2blastmask         pssmenginefreqratios_unit_test
datatool                  querydata_unit_test
```

### Add modulefile
The modulefile will live in `/opt/modulefiles`. However, it is not our responsibility to add the modulefiles since these need to be reviewed first by another team member.

* Add to the `modulefile.lua` file to `http://gitlab.psc.edu/bridges2_modulefiles`
* Then create a merge request for review. 
* If approved, then the reviewer will copy over the modulefile to the appropriate location.

### What next?
Once the modulefile is in place, end users should be able to find and load the package

```
➜ module avail BLAST

------------------------------------------- /opt/modulefiles --------------------------------------------
   BLAST/2.9.0    BLAST/2.11.0 (D)

➜ module help BLAST/2.11.0

-------------------------------- Module Specific Help for "BLAST/2.11.0" --------------------------------
Description
-----------
BLAST (basic local alignment search tool) is an algorithm and program for comparing primary biological se
quence information, such as the amino-acid sequences of proteins or the nucleotides of DNA and/or RNA seq
uences.

To load the module type

> module load BLAST/2.11.0

To unload the module type

> module unload BLAST/2.11.0
```

# Advanced Topics

## Best Practices
* Avoid reinventing the wheel. Search public registries first.
* Do not reinvent the wheel again. You can modify existing images, no need to start from scratch.
* Avoid bloating images. In general avoid using Ubuntu as a starter image, however when testing and developing might be the best option (if not the only).
* Use small images for deploying packages with little or no dependencies. I particularly prefer [Alpine](https://www.alpinelinux.org/) for this purpose.
* If you wish to create a container from an existing Spack environment, then click [here](https://spack.readthedocs.io/en/latest/containers.html).
* If you wisht to create a container using Spack commands, then I’d recommend you start from scratch. Feel free to use this [template](https://gist.github.com/icaoberg/65118b1b27146a809e8165b55141a4f8).
* When deploying software in your home/projects directory Singularity >> Spack. Spack is easy to use but depending on the package you want to install there might be some dependencies that live outside of the scope of Spack. 
* It is okay to install multiple packages into a single container. For example I built a LaTeX container with LaTeX editors, Ghostscript and more.
* Make sure other users have access to these files, that is, set the right permissions. If you don’t, a reviewer will contact you about it so it is an easy fix.
* SyLabs.io is the easiest way to build containers remotely without hassling the systems team.
* Whenever an end user opens a ticket, attempt to build a user story from the ticket and build the appropriate examples for /opt/packages/examples.
* If possible, then add a link to `/opt/packages/examples` in the modulefile. Especially if examples already exist.

---

# List of Singularity containers
The table below list all the Singularity containers maintained by the Biomedical Apps team.
You can find all my public repositories [here](https://gitlab.psc.edu/icaoberg/singularity).

## STEM
| Name | Information |
| --- | --- |
| [abyss](http://github.com/pscedu/singularity-abyss) | ![Status](https://github.com/pscedu/singularity-abyss/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-abyss/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-abyss)![forks](https://img.shields.io/github/forks/pscedu/singularity-abyss)![Stars](https://img.shields.io/github/stars/pscedu/singularity-abyss)![License](https://img.shields.io/github/license/pscedu/singularity-abyss) |
| [anvio](http://github.com/pscedu/singularity-anvio) | ![Status](https://github.com/pscedu/singularity-anvio/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-anvio/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-anvio)![forks](https://img.shields.io/github/forks/pscedu/singularity-anvio)![Stars](https://img.shields.io/github/stars/pscedu/singularity-anvio)![License](https://img.shields.io/github/license/pscedu/singularity-anvio) |
| [asciigenome](http://github.com/pscedu/singularity-asciigenome) | ![Status](https://github.com/pscedu/singularity-asciigenome/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-asciigenome/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-asciigenome)![forks](https://img.shields.io/github/forks/pscedu/singularity-asciigenome)![Stars](https://img.shields.io/github/stars/pscedu/singularity-asciigenome)![License](https://img.shields.io/github/license/pscedu/singularity-asciigenome) |
| [aspera-connect](http://github.com/pscedu/singularity-aspera-connect) | ![Status](https://github.com/pscedu/singularity-aspera-connect/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-aspera-connect/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-aspera-connect)![forks](https://img.shields.io/github/forks/pscedu/singularity-aspera-connect)![Stars](https://img.shields.io/github/stars/pscedu/singularity-aspera-connect)![License](https://img.shields.io/github/license/pscedu/singularity-aspera-connect) |
| [augustus](http://github.com/pscedu/singularity-augustus) | ![Status](https://github.com/pscedu/singularity-augustus/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-augustus/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-augustus)![forks](https://img.shields.io/github/forks/pscedu/singularity-augustus)![Stars](https://img.shields.io/github/stars/pscedu/singularity-augustus)![License](https://img.shields.io/github/license/pscedu/singularity-augustus) |
| [bamtools](http://github.com/pscedu/singularity-bamtools) | ![Status](https://github.com/pscedu/singularity-bamtools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bamtools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bamtools)![forks](https://img.shields.io/github/forks/pscedu/singularity-bamtools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bamtools)![License](https://img.shields.io/github/license/pscedu/singularity-bamtools) |
| [bcftools](http://github.com/pscedu/singularity-bcftools) | ![Status](https://github.com/pscedu/singularity-bcftools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bcftools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bcftools)![forks](https://img.shields.io/github/forks/pscedu/singularity-bcftools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bcftools)![License](https://img.shields.io/github/license/pscedu/singularity-bcftools) |
| [bedops](http://github.com/pscedu/singularity-bedops) | ![Status](https://github.com/pscedu/singularity-bedops/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bedops/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bedops)![forks](https://img.shields.io/github/forks/pscedu/singularity-bedops)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bedops)![License](https://img.shields.io/github/license/pscedu/singularity-bedops) |
| [bedtools](http://github.com/pscedu/singularity-bedtools) | ![Status](https://github.com/pscedu/singularity-bedtools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bedtools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bedtools)![forks](https://img.shields.io/github/forks/pscedu/singularity-bedtools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bedtools)![License](https://img.shields.io/github/license/pscedu/singularity-bedtools) |
| [bioformats2raw](http://github.com/pscedu/singularity-bioformats2raw) | ![Status](https://github.com/pscedu/singularity-bioformats2raw/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bioformats2raw/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bioformats2raw)![forks](https://img.shields.io/github/forks/pscedu/singularity-bioformats2raw)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bioformats2raw)![License](https://img.shields.io/github/license/pscedu/singularity-bioformats2raw) |
| [bismark](http://github.com/pscedu/singularity-bismark) | ![Status](https://github.com/pscedu/singularity-bismark/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bismark/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bismark)![forks](https://img.shields.io/github/forks/pscedu/singularity-bismark)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bismark)![License](https://img.shields.io/github/license/pscedu/singularity-bismark) |
| [blast](http://github.com/pscedu/singularity-blast) | ![Status](https://github.com/pscedu/singularity-blast/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-blast/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-blast)![forks](https://img.shields.io/github/forks/pscedu/singularity-blast)![Stars](https://img.shields.io/github/stars/pscedu/singularity-blast)![License](https://img.shields.io/github/license/pscedu/singularity-blast) |
| [blat](http://github.com/pscedu/singularity-blat) | ![Status](https://github.com/pscedu/singularity-blat/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-blat/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-blat)![forks](https://img.shields.io/github/forks/pscedu/singularity-blat)![Stars](https://img.shields.io/github/stars/pscedu/singularity-blat)![License](https://img.shields.io/github/license/pscedu/singularity-blat) |
| [bowtie2](http://github.com/pscedu/singularity-bowtie2) | ![Status](https://github.com/pscedu/singularity-bowtie2/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bowtie2/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bowtie2)![forks](https://img.shields.io/github/forks/pscedu/singularity-bowtie2)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bowtie2)![License](https://img.shields.io/github/license/pscedu/singularity-bowtie2) |
| [braker2](http://github.com/pscedu/singularity-braker2) | ![Status](https://github.com/pscedu/singularity-braker2/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-braker2/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-braker2)![forks](https://img.shields.io/github/forks/pscedu/singularity-braker2)![Stars](https://img.shields.io/github/stars/pscedu/singularity-braker2)![License](https://img.shields.io/github/license/pscedu/singularity-braker2) |
| [bsmap](http://github.com/pscedu/singularity-bsmap) | ![Status](https://github.com/pscedu/singularity-bsmap/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bsmap/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bsmap)![forks](https://img.shields.io/github/forks/pscedu/singularity-bsmap)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bsmap)![License](https://img.shields.io/github/license/pscedu/singularity-bsmap) |
| [busco](http://github.com/pscedu/singularity-busco) | ![Status](https://github.com/pscedu/singularity-busco/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-busco/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-busco)![forks](https://img.shields.io/github/forks/pscedu/singularity-busco)![Stars](https://img.shields.io/github/stars/pscedu/singularity-busco)![License](https://img.shields.io/github/license/pscedu/singularity-busco) |
| [bwa](http://github.com/pscedu/singularity-bwa) | ![Status](https://github.com/pscedu/singularity-bwa/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bwa/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bwa)![forks](https://img.shields.io/github/forks/pscedu/singularity-bwa)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bwa)![License](https://img.shields.io/github/license/pscedu/singularity-bwa) |
| [checkm](http://github.com/pscedu/singularity-checkm) | ![Status](https://github.com/pscedu/singularity-checkm/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-checkm/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-checkm)![forks](https://img.shields.io/github/forks/pscedu/singularity-checkm)![Stars](https://img.shields.io/github/stars/pscedu/singularity-checkm)![License](https://img.shields.io/github/license/pscedu/singularity-checkm) |
| [cutadapt](http://github.com/pscedu/singularity-cutadapt) | ![Status](https://github.com/pscedu/singularity-cutadapt/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-cutadapt/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-cutadapt)![forks](https://img.shields.io/github/forks/pscedu/singularity-cutadapt)![Stars](https://img.shields.io/github/stars/pscedu/singularity-cutadapt)![License](https://img.shields.io/github/license/pscedu/singularity-cutadapt) |
| [fastani](http://github.com/pscedu/singularity-fastani) | ![Status](https://github.com/pscedu/singularity-fastani/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-fastani/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-fastani)![forks](https://img.shields.io/github/forks/pscedu/singularity-fastani)![Stars](https://img.shields.io/github/stars/pscedu/singularity-fastani)![License](https://img.shields.io/github/license/pscedu/singularity-fastani) |
| [fastq-tools](http://github.com/pscedu/singularity-fastq-tools) | ![Status](https://github.com/pscedu/singularity-fastq-tools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-fastq-tools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-fastq-tools)![forks](https://img.shields.io/github/forks/pscedu/singularity-fastq-tools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-fastq-tools)![License](https://img.shields.io/github/license/pscedu/singularity-fastq-tools) |
| [fastqc](http://github.com/pscedu/singularity-fastqc) | ![Status](https://github.com/pscedu/singularity-fastqc/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-fastqc/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-fastqc)![forks](https://img.shields.io/github/forks/pscedu/singularity-fastqc)![Stars](https://img.shields.io/github/stars/pscedu/singularity-fastqc)![License](https://img.shields.io/github/license/pscedu/singularity-fastqc) |
| [fasttree](http://github.com/pscedu/singularity-fasttree) | ![Status](https://github.com/pscedu/singularity-fasttree/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-fasttree/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-fasttree)![forks](https://img.shields.io/github/forks/pscedu/singularity-fasttree)![Stars](https://img.shields.io/github/stars/pscedu/singularity-fasttree)![License](https://img.shields.io/github/license/pscedu/singularity-fasttree) |
| [flash](http://github.com/pscedu/singularity-flash) | ![Status](https://github.com/pscedu/singularity-flash/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-flash/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-flash)![forks](https://img.shields.io/github/forks/pscedu/singularity-flash)![Stars](https://img.shields.io/github/stars/pscedu/singularity-flash)![License](https://img.shields.io/github/license/pscedu/singularity-flash) |
| [funannotate](http://github.com/pscedu/singularity-funannotate) | ![Status](https://github.com/pscedu/singularity-funannotate/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-funannotate/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-funannotate)![forks](https://img.shields.io/github/forks/pscedu/singularity-funannotate)![Stars](https://img.shields.io/github/stars/pscedu/singularity-funannotate)![License](https://img.shields.io/github/license/pscedu/singularity-funannotate) |
| [gatk](http://github.com/pscedu/singularity-gatk) | ![Status](https://github.com/pscedu/singularity-gatk/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-gatk/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-gatk)![forks](https://img.shields.io/github/forks/pscedu/singularity-gatk)![Stars](https://img.shields.io/github/stars/pscedu/singularity-gatk)![License](https://img.shields.io/github/license/pscedu/singularity-gatk) |
| [genemark-es](http://github.com/pscedu/singularity-genemark-es) | ![Status](https://github.com/pscedu/singularity-genemark-es/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-genemark-es/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-genemark-es)![forks](https://img.shields.io/github/forks/pscedu/singularity-genemark-es)![Stars](https://img.shields.io/github/stars/pscedu/singularity-genemark-es)![License](https://img.shields.io/github/license/pscedu/singularity-genemark-es) |
| [gent](http://github.com/pscedu/singularity-gent) | ![Status](https://github.com/pscedu/singularity-gent/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-gent/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-gent)![forks](https://img.shields.io/github/forks/pscedu/singularity-gent)![Stars](https://img.shields.io/github/stars/pscedu/singularity-gent)![License](https://img.shields.io/github/license/pscedu/singularity-gent) |
| [guppy](http://github.com/pscedu/singularity-guppy) | ![Status](https://github.com/pscedu/singularity-guppy/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-guppy/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-guppy)![forks](https://img.shields.io/github/forks/pscedu/singularity-guppy)![Stars](https://img.shields.io/github/stars/pscedu/singularity-guppy)![License](https://img.shields.io/github/license/pscedu/singularity-guppy) |
| [guppy-gpu](http://github.com/pscedu/singularity-guppy-gpu) | ![Status](https://github.com/pscedu/singularity-guppy-gpu/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-guppy-gpu/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-guppy-gpu)![forks](https://img.shields.io/github/forks/pscedu/singularity-guppy-gpu)![Stars](https://img.shields.io/github/stars/pscedu/singularity-guppy-gpu)![License](https://img.shields.io/github/license/pscedu/singularity-guppy-gpu) |
| [hisat2](http://github.com/pscedu/singularity-hisat2) | ![Status](https://github.com/pscedu/singularity-hisat2/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-hisat2/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-hisat2)![forks](https://img.shields.io/github/forks/pscedu/singularity-hisat2)![Stars](https://img.shields.io/github/stars/pscedu/singularity-hisat2)![License](https://img.shields.io/github/license/pscedu/singularity-hisat2) |
| [hmmer](http://github.com/pscedu/singularity-hmmer) | ![Status](https://github.com/pscedu/singularity-hmmer/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-hmmer/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-hmmer)![forks](https://img.shields.io/github/forks/pscedu/singularity-hmmer)![Stars](https://img.shields.io/github/stars/pscedu/singularity-hmmer)![License](https://img.shields.io/github/license/pscedu/singularity-hmmer) |
| [htslib](http://github.com/pscedu/singularity-htslib) | ![Status](https://github.com/pscedu/singularity-htslib/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-htslib/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-htslib)![forks](https://img.shields.io/github/forks/pscedu/singularity-htslib)![Stars](https://img.shields.io/github/stars/pscedu/singularity-htslib)![License](https://img.shields.io/github/license/pscedu/singularity-htslib) |
| [kraken2](http://github.com/pscedu/singularity-kraken2) | ![Status](https://github.com/pscedu/singularity-kraken2/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-kraken2/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-kraken2)![forks](https://img.shields.io/github/forks/pscedu/singularity-kraken2)![Stars](https://img.shields.io/github/stars/pscedu/singularity-kraken2)![License](https://img.shields.io/github/license/pscedu/singularity-kraken2) |
| [meme-suite](http://github.com/pscedu/singularity-meme-suite) | ![Status](https://github.com/pscedu/singularity-meme-suite/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-meme-suite/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-meme-suite)![forks](https://img.shields.io/github/forks/pscedu/singularity-meme-suite)![Stars](https://img.shields.io/github/stars/pscedu/singularity-meme-suite)![License](https://img.shields.io/github/license/pscedu/singularity-meme-suite) |
| [methylpy](http://github.com/pscedu/singularity-methylpy) | ![Status](https://github.com/pscedu/singularity-methylpy/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-methylpy/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-methylpy)![forks](https://img.shields.io/github/forks/pscedu/singularity-methylpy)![Stars](https://img.shields.io/github/stars/pscedu/singularity-methylpy)![License](https://img.shields.io/github/license/pscedu/singularity-methylpy) |
| [ncview](http://github.com/pscedu/singularity-ncview) | ![Status](https://github.com/pscedu/singularity-ncview/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-ncview/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-ncview)![forks](https://img.shields.io/github/forks/pscedu/singularity-ncview)![Stars](https://img.shields.io/github/stars/pscedu/singularity-ncview)![License](https://img.shields.io/github/license/pscedu/singularity-ncview) |
| [octave](http://github.com/pscedu/singularity-octave) | ![Status](https://github.com/pscedu/singularity-octave/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-octave/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-octave)![forks](https://img.shields.io/github/forks/pscedu/singularity-octave)![Stars](https://img.shields.io/github/stars/pscedu/singularity-octave)![License](https://img.shields.io/github/license/pscedu/singularity-octave) |
| [phylip-suite](http://github.com/pscedu/singularity-phylip-suite) | ![Status](https://github.com/pscedu/singularity-phylip-suite/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-phylip-suite/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-phylip-suite)![forks](https://img.shields.io/github/forks/pscedu/singularity-phylip-suite)![Stars](https://img.shields.io/github/stars/pscedu/singularity-phylip-suite)![License](https://img.shields.io/github/license/pscedu/singularity-phylip-suite) |
| [picard](http://github.com/pscedu/singularity-picard) | ![Status](https://github.com/pscedu/singularity-picard/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-picard/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-picard)![forks](https://img.shields.io/github/forks/pscedu/singularity-picard)![Stars](https://img.shields.io/github/stars/pscedu/singularity-picard)![License](https://img.shields.io/github/license/pscedu/singularity-picard) |
| [prodigal](http://github.com/pscedu/singularity-prodigal) | ![Status](https://github.com/pscedu/singularity-prodigal/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-prodigal/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-prodigal)![forks](https://img.shields.io/github/forks/pscedu/singularity-prodigal)![Stars](https://img.shields.io/github/stars/pscedu/singularity-prodigal)![License](https://img.shields.io/github/license/pscedu/singularity-prodigal) |
| [raw2ometiff](http://github.com/pscedu/singularity-raw2ometiff) | ![Status](https://github.com/pscedu/singularity-raw2ometiff/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-raw2ometiff/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-raw2ometiff)![forks](https://img.shields.io/github/forks/pscedu/singularity-raw2ometiff)![Stars](https://img.shields.io/github/stars/pscedu/singularity-raw2ometiff)![License](https://img.shields.io/github/license/pscedu/singularity-raw2ometiff) |
| [raxml](http://github.com/pscedu/singularity-raxml) | ![Status](https://github.com/pscedu/singularity-raxml/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-raxml/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-raxml)![forks](https://img.shields.io/github/forks/pscedu/singularity-raxml)![Stars](https://img.shields.io/github/stars/pscedu/singularity-raxml)![License](https://img.shields.io/github/license/pscedu/singularity-raxml) |
| [rnaview](http://github.com/pscedu/singularity-rnaview) | ![Status](https://github.com/pscedu/singularity-rnaview/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-rnaview/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-rnaview)![forks](https://img.shields.io/github/forks/pscedu/singularity-rnaview)![Stars](https://img.shields.io/github/stars/pscedu/singularity-rnaview)![License](https://img.shields.io/github/license/pscedu/singularity-rnaview) |
| [rust](http://github.com/pscedu/singularity-rust) | ![Status](https://github.com/pscedu/singularity-rust/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-rust/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-rust)![forks](https://img.shields.io/github/forks/pscedu/singularity-rust)![Stars](https://img.shields.io/github/stars/pscedu/singularity-rust)![License](https://img.shields.io/github/license/pscedu/singularity-rust) |
| [salmon](http://github.com/pscedu/singularity-salmon) | ![Status](https://github.com/pscedu/singularity-salmon/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-salmon/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-salmon)![forks](https://img.shields.io/github/forks/pscedu/singularity-salmon)![Stars](https://img.shields.io/github/stars/pscedu/singularity-salmon)![License](https://img.shields.io/github/license/pscedu/singularity-salmon) |
| [samtools](http://github.com/pscedu/singularity-samtools) | ![Status](https://github.com/pscedu/singularity-samtools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-samtools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-samtools)![forks](https://img.shields.io/github/forks/pscedu/singularity-samtools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-samtools)![License](https://img.shields.io/github/license/pscedu/singularity-samtools) |
| [spades](http://github.com/pscedu/singularity-spades) | ![Status](https://github.com/pscedu/singularity-spades/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-spades/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-spades)![forks](https://img.shields.io/github/forks/pscedu/singularity-spades)![Stars](https://img.shields.io/github/stars/pscedu/singularity-spades)![License](https://img.shields.io/github/license/pscedu/singularity-spades) |
| [sra-toolkit](http://github.com/pscedu/singularity-sra-toolkit) | ![Status](https://github.com/pscedu/singularity-sra-toolkit/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-sra-toolkit/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-sra-toolkit)![forks](https://img.shields.io/github/forks/pscedu/singularity-sra-toolkit)![Stars](https://img.shields.io/github/stars/pscedu/singularity-sra-toolkit)![License](https://img.shields.io/github/license/pscedu/singularity-sra-toolkit) |
| [star](http://github.com/pscedu/singularity-star) | ![Status](https://github.com/pscedu/singularity-star/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-star/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-star)![forks](https://img.shields.io/github/forks/pscedu/singularity-star)![Stars](https://img.shields.io/github/stars/pscedu/singularity-star)![License](https://img.shields.io/github/license/pscedu/singularity-star) |
| [star-fusion](http://github.com/pscedu/singularity-star-fusion) | ![Status](https://github.com/pscedu/singularity-star-fusion/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-star-fusion/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-star-fusion)![forks](https://img.shields.io/github/forks/pscedu/singularity-star-fusion)![Stars](https://img.shields.io/github/stars/pscedu/singularity-star-fusion)![License](https://img.shields.io/github/license/pscedu/singularity-star-fusion) |
| [tiger](http://github.com/pscedu/singularity-tiger) | ![Status](https://github.com/pscedu/singularity-tiger/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-tiger/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-tiger)![forks](https://img.shields.io/github/forks/pscedu/singularity-tiger)![Stars](https://img.shields.io/github/stars/pscedu/singularity-tiger)![License](https://img.shields.io/github/license/pscedu/singularity-tiger) |
| [trimmomatic](http://github.com/pscedu/singularity-trimmomatic) | ![Status](https://github.com/pscedu/singularity-trimmomatic/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-trimmomatic/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-trimmomatic)![forks](https://img.shields.io/github/forks/pscedu/singularity-trimmomatic)![Stars](https://img.shields.io/github/stars/pscedu/singularity-trimmomatic)![License](https://img.shields.io/github/license/pscedu/singularity-trimmomatic) |
| [vcf2maf](http://github.com/pscedu/singularity-vcf2maf) | ![Status](https://github.com/pscedu/singularity-vcf2maf/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-vcf2maf/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-vcf2maf)![forks](https://img.shields.io/github/forks/pscedu/singularity-vcf2maf)![Stars](https://img.shields.io/github/stars/pscedu/singularity-vcf2maf)![License](https://img.shields.io/github/license/pscedu/singularity-vcf2maf) |
| [viennarna](http://github.com/pscedu/singularity-viennarna) | ![Status](https://github.com/pscedu/singularity-viennarna/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-viennarna/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-viennarna)![forks](https://img.shields.io/github/forks/pscedu/singularity-viennarna)![Stars](https://img.shields.io/github/stars/pscedu/singularity-viennarna)![License](https://img.shields.io/github/license/pscedu/singularity-viennarna) |

## Utilities
| Name | Information |
| --- | --- |
| [asciinema](http://github.com/pscedu/singularity-asciinema) | ![Status](https://github.com/pscedu/singularity-asciinema/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-asciinema/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-asciinema)![forks](https://img.shields.io/github/forks/pscedu/singularity-asciinema)![Stars](https://img.shields.io/github/stars/pscedu/singularity-asciinema)![License](https://img.shields.io/github/license/pscedu/singularity-asciinema) |
| [aws-cli](http://github.com/pscedu/singularity-aws-cli) | ![Status](https://github.com/pscedu/singularity-aws-cli/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-aws-cli/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-aws-cli)![forks](https://img.shields.io/github/forks/pscedu/singularity-aws-cli)![Stars](https://img.shields.io/github/stars/pscedu/singularity-aws-cli)![License](https://img.shields.io/github/license/pscedu/singularity-aws-cli) |
| [bat](http://github.com/pscedu/singularity-bat) | ![Status](https://github.com/pscedu/singularity-bat/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-bat/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-bat)![forks](https://img.shields.io/github/forks/pscedu/singularity-bat)![Stars](https://img.shields.io/github/stars/pscedu/singularity-bat)![License](https://img.shields.io/github/license/pscedu/singularity-bat) |
| [browsh](http://github.com/pscedu/singularity-browsh) | ![Status](https://github.com/pscedu/singularity-browsh/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-browsh/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-browsh)![forks](https://img.shields.io/github/forks/pscedu/singularity-browsh)![Stars](https://img.shields.io/github/stars/pscedu/singularity-browsh)![License](https://img.shields.io/github/license/pscedu/singularity-browsh) |
| [btop](http://github.com/pscedu/singularity-btop) | ![Status](https://github.com/pscedu/singularity-btop/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-btop/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-btop)![forks](https://img.shields.io/github/forks/pscedu/singularity-btop)![Stars](https://img.shields.io/github/stars/pscedu/singularity-btop)![License](https://img.shields.io/github/license/pscedu/singularity-btop) |
| [circos](http://github.com/pscedu/singularity-circos) | ![Status](https://github.com/pscedu/singularity-circos/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-circos/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-circos)![forks](https://img.shields.io/github/forks/pscedu/singularity-circos)![Stars](https://img.shields.io/github/stars/pscedu/singularity-circos)![License](https://img.shields.io/github/license/pscedu/singularity-circos) |
| [cwltool](http://github.com/pscedu/singularity-cwltool) | ![Status](https://github.com/pscedu/singularity-cwltool/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-cwltool/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-cwltool)![forks](https://img.shields.io/github/forks/pscedu/singularity-cwltool)![Stars](https://img.shields.io/github/stars/pscedu/singularity-cwltool)![License](https://img.shields.io/github/license/pscedu/singularity-cwltool) |
| [dust](http://github.com/pscedu/singularity-dust) | ![Status](https://github.com/pscedu/singularity-dust/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-dust/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-dust)![forks](https://img.shields.io/github/forks/pscedu/singularity-dust)![Stars](https://img.shields.io/github/stars/pscedu/singularity-dust)![License](https://img.shields.io/github/license/pscedu/singularity-dust) |
| [fdupes](http://github.com/pscedu/singularity-fdupes) | ![Status](https://github.com/pscedu/singularity-fdupes/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-fdupes/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-fdupes)![forks](https://img.shields.io/github/forks/pscedu/singularity-fdupes)![Stars](https://img.shields.io/github/stars/pscedu/singularity-fdupes)![License](https://img.shields.io/github/license/pscedu/singularity-fdupes) |
| [ffmpeg](http://github.com/pscedu/singularity-ffmpeg) | ![Status](https://github.com/pscedu/singularity-ffmpeg/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-ffmpeg/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-ffmpeg)![forks](https://img.shields.io/github/forks/pscedu/singularity-ffmpeg)![Stars](https://img.shields.io/github/stars/pscedu/singularity-ffmpeg)![License](https://img.shields.io/github/license/pscedu/singularity-ffmpeg) |
| [flac](http://github.com/pscedu/singularity-flac) | ![Status](https://github.com/pscedu/singularity-flac/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-flac/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-flac)![forks](https://img.shields.io/github/forks/pscedu/singularity-flac)![Stars](https://img.shields.io/github/stars/pscedu/singularity-flac)![License](https://img.shields.io/github/license/pscedu/singularity-flac) |
| [glances](http://github.com/pscedu/singularity-glances) | ![Status](https://github.com/pscedu/singularity-glances/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-glances/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-glances)![forks](https://img.shields.io/github/forks/pscedu/singularity-glances)![Stars](https://img.shields.io/github/stars/pscedu/singularity-glances)![License](https://img.shields.io/github/license/pscedu/singularity-glances) |
| [gnuplot](http://github.com/pscedu/singularity-gnuplot) | ![Status](https://github.com/pscedu/singularity-gnuplot/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-gnuplot/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-gnuplot)![forks](https://img.shields.io/github/forks/pscedu/singularity-gnuplot)![Stars](https://img.shields.io/github/stars/pscedu/singularity-gnuplot)![License](https://img.shields.io/github/license/pscedu/singularity-gnuplot) |
| [graphviz](http://github.com/pscedu/singularity-graphviz) | ![Status](https://github.com/pscedu/singularity-graphviz/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-graphviz/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-graphviz)![forks](https://img.shields.io/github/forks/pscedu/singularity-graphviz)![Stars](https://img.shields.io/github/stars/pscedu/singularity-graphviz)![License](https://img.shields.io/github/license/pscedu/singularity-graphviz) |
| [hashdeep](http://github.com/pscedu/singularity-hashdeep) | ![Status](https://github.com/pscedu/singularity-hashdeep/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-hashdeep/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-hashdeep)![forks](https://img.shields.io/github/forks/pscedu/singularity-hashdeep)![Stars](https://img.shields.io/github/stars/pscedu/singularity-hashdeep)![License](https://img.shields.io/github/license/pscedu/singularity-hashdeep) |
| [hyperfine](http://github.com/pscedu/singularity-hyperfine) | ![Status](https://github.com/pscedu/singularity-hyperfine/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-hyperfine/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-hyperfine)![forks](https://img.shields.io/github/forks/pscedu/singularity-hyperfine)![Stars](https://img.shields.io/github/stars/pscedu/singularity-hyperfine)![License](https://img.shields.io/github/license/pscedu/singularity-hyperfine) |
| [imagemagick](http://github.com/pscedu/singularity-imagemagick) | ![Status](https://github.com/pscedu/singularity-imagemagick/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-imagemagick/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-imagemagick)![forks](https://img.shields.io/github/forks/pscedu/singularity-imagemagick)![Stars](https://img.shields.io/github/stars/pscedu/singularity-imagemagick)![License](https://img.shields.io/github/license/pscedu/singularity-imagemagick) |
| [jp](http://github.com/pscedu/singularity-jp) | ![Status](https://github.com/pscedu/singularity-jp/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-jp/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-jp)![forks](https://img.shields.io/github/forks/pscedu/singularity-jp)![Stars](https://img.shields.io/github/stars/pscedu/singularity-jp)![License](https://img.shields.io/github/license/pscedu/singularity-jp) |
| [jq](http://github.com/pscedu/singularity-jq) | ![Status](https://github.com/pscedu/singularity-jq/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-jq/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-jq)![forks](https://img.shields.io/github/forks/pscedu/singularity-jq)![Stars](https://img.shields.io/github/stars/pscedu/singularity-jq)![License](https://img.shields.io/github/license/pscedu/singularity-jq) |
| [lazygit](http://github.com/pscedu/singularity-lazygit) | ![Status](https://github.com/pscedu/singularity-lazygit/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-lazygit/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-lazygit)![forks](https://img.shields.io/github/forks/pscedu/singularity-lazygit)![Stars](https://img.shields.io/github/stars/pscedu/singularity-lazygit)![License](https://img.shields.io/github/license/pscedu/singularity-lazygit) |
| [libtiff-tools](http://github.com/pscedu/singularity-libtiff-tools) | ![Status](https://github.com/pscedu/singularity-libtiff-tools/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-libtiff-tools/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-libtiff-tools)![forks](https://img.shields.io/github/forks/pscedu/singularity-libtiff-tools)![Stars](https://img.shields.io/github/stars/pscedu/singularity-libtiff-tools)![License](https://img.shields.io/github/license/pscedu/singularity-libtiff-tools) |
| [lowcharts](http://github.com/pscedu/singularity-lowcharts) | ![Status](https://github.com/pscedu/singularity-lowcharts/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-lowcharts/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-lowcharts)![forks](https://img.shields.io/github/forks/pscedu/singularity-lowcharts)![Stars](https://img.shields.io/github/stars/pscedu/singularity-lowcharts)![License](https://img.shields.io/github/license/pscedu/singularity-lowcharts) |
| [mc](http://github.com/pscedu/singularity-mc) | ![Status](https://github.com/pscedu/singularity-mc/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-mc/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-mc)![forks](https://img.shields.io/github/forks/pscedu/singularity-mc)![Stars](https://img.shields.io/github/stars/pscedu/singularity-mc)![License](https://img.shields.io/github/license/pscedu/singularity-mc) |
| [ncdu](http://github.com/pscedu/singularity-ncdu) | ![Status](https://github.com/pscedu/singularity-ncdu/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-ncdu/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-ncdu)![forks](https://img.shields.io/github/forks/pscedu/singularity-ncdu)![Stars](https://img.shields.io/github/stars/pscedu/singularity-ncdu)![License](https://img.shields.io/github/license/pscedu/singularity-ncdu) |
| [octave](http://github.com/pscedu/singularity-octave) | ![Status](https://github.com/pscedu/singularity-octave/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-octave/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-octave)![forks](https://img.shields.io/github/forks/pscedu/singularity-octave)![Stars](https://img.shields.io/github/stars/pscedu/singularity-octave)![License](https://img.shields.io/github/license/pscedu/singularity-octave) |
| [pandoc](http://github.com/pscedu/singularity-pandoc) | ![Status](https://github.com/pscedu/singularity-pandoc/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-pandoc/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-pandoc)![forks](https://img.shields.io/github/forks/pscedu/singularity-pandoc)![Stars](https://img.shields.io/github/stars/pscedu/singularity-pandoc)![License](https://img.shields.io/github/license/pscedu/singularity-pandoc) |
| [rclone](http://github.com/pscedu/singularity-rclone) | ![Status](https://github.com/pscedu/singularity-rclone/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-rclone/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-rclone)![forks](https://img.shields.io/github/forks/pscedu/singularity-rclone)![Stars](https://img.shields.io/github/stars/pscedu/singularity-rclone)![License](https://img.shields.io/github/license/pscedu/singularity-rclone) |
| [rich-cli](http://github.com/pscedu/singularity-rich-cli) | ![Status](https://github.com/pscedu/singularity-rich-cli/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-rich-cli/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-rich-cli)![forks](https://img.shields.io/github/forks/pscedu/singularity-rich-cli)![Stars](https://img.shields.io/github/stars/pscedu/singularity-rich-cli)![License](https://img.shields.io/github/license/pscedu/singularity-rich-cli) |
| [shellcheck](http://github.com/pscedu/singularity-shellcheck) | ![Status](https://github.com/pscedu/singularity-shellcheck/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-shellcheck/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-shellcheck)![forks](https://img.shields.io/github/forks/pscedu/singularity-shellcheck)![Stars](https://img.shields.io/github/stars/pscedu/singularity-shellcheck)![License](https://img.shields.io/github/license/pscedu/singularity-shellcheck) |
| [visidata](http://github.com/pscedu/singularity-visidata) | ![Status](https://github.com/pscedu/singularity-visidata/actions/workflows/main.yml/badge.svg)![Status](https://github.com/pscedu/singularity-visidata/actions/workflows/pretty.yml/badge.svg)![Issue](https://img.shields.io/github/issues/pscedu/singularity-visidata)![forks](https://img.shields.io/github/forks/pscedu/singularity-visidata)![Stars](https://img.shields.io/github/stars/pscedu/singularity-visidata)![License](https://img.shields.io/github/license/pscedu/singularity-visidata) |

# Examples

## visidata

```
Bootstrap: docker
From: python:3.8-alpine

%labels
    AUTHOR icaoberg
    EMAIL icaoberg@psc.edu
    SUPPORT help@psc.edu
    REPOSITORY http://gitub.com/pscedu/singularity-visidata
    COPYRIGHT Copyright © 2021-2023 Pittsburgh Supercomputing Center. All Rights Reserved.
    VERSION 2.11

%environment
    export TERM="xterm-256color"

%post
    apk update
    apk add git man-pages mandoc
    pip install requests python-dateutil wcwidth tabulate
    mkdir -p /opt/visidata
    git clone https://github.com/saulpw/visidata.git
    cd visidata
    git checkout tags/v2.11
    sh -c 'yes | pip install -vvv .'
    rm -rfv visidata
    pip install --upgrade pip
    pip install xlrd openpyxl
```


---
Copyright © 2020-2023 Pittsburgh Supercomputing Center. All Rights Reserved.

The [Biomedical Applications Group](https://www.psc.edu/biomedical-applications/) at the [Pittsburgh Supercomputing Center](http://www.psc.edu) in the [Mellon College of Science](https://www.cmu.edu/mcs/) at [Carnegie Mellon University](http://www.cmu.edu)
