You have now reached the end of this tutorial and should be able to design assignments using INGInious. Some things remain uncovered like natch jobs and plugins. Those are advanced features for the superadministrator; please refer to the complete documentation.

In this last section you'll find out how to add some environments to your INGInious installation. Indeed, our default environment only provides Python 2/3 along with some standard command-line tools. Please note that this is only accessible to the superadministrator, who has access to the INGInious installation.

### Supported environments

Some environments based on free and open source software are provided by the INGInious authors:

default: Default Python 2/3 environment. Includes GCC toolchain for C/C++ development. Includes Java 7 and JUnit. Includes Java 8 and Scala. Includes Octave and Julia. Includes the Mono framework for cross-platform dotnet development. Includes Mozart/Oz v2.0.0alpha. Includes PHP5. Includes R. Includes Sekexe to run process in user-mode Linux. Includes Icarus Verilog.

INGInious supported environments are available through the Docker hub, and can be downloaded via the following command on your INGInious instances:

docker pull ingi/inginious-c-ENVIRONMENT_NAME


Then, restart the INGInious agent in order to see the new environment on the environment list.

### Custom environments

All INGInious environment containers inherits from the ingi/inginious-c-base container which provides the INGInious API on CentOS distribution. To define a new environment, you'll need to:

• Define a Docker container that inherits from ingi/inginious-c-base using a Dockerfile.
• Name the environment using the org.inginious.grading.name label.

For instance, these basic Dockerfile will provide you with GCC for C/C++ development with environment name cpp:

FROM  ingi/inginious-c-base
RUN   yum install -y gcc cpp make binutils libstdc++ && yum clean all


This new container can be built and used inside INGInious (after INGInious restart) by using the following command:

docker build -t ingi/inginious-c-ENVIRONMENT_NAME FOLDER_TO_DOCKERFILE


### Let's review

Below you'll find a small MCQ to review and better understand how to make additional INGInious environments.

##### Question 1: Supported environments

You want to download the provided cpp environment. What should you type into your shell ?

##### Question 2: Environment names

How is the INGInious environment name provided from the container ?

##### Question 3: Building a new environment

You want to build a new go environment. The path to your Dockerfile is /home/tux/go/Dockerfile. What would you type in yourterminal ?

##### Question 4: Environment inheritance

Can you define a new environment lamp by inheriting from an existing environment container, such as ingi/inginious-c-php ?