Want to develop your code on CAEN Linux but don't want to deal with Duo and SSH? Big VS Code fan? This container lets VS Code automatically run your program, debugger, terminal, and all your tools in a CAEN environment.
Before using, you will need Docker Desktop installed (
macOS,
Windows,
Linux
).
Now copy the file devcontainer.json
into your repository as .devcontainer/devcontainer.json
.
You can do this automatically by moving into your repository and running the following:
/bin/bash -c 'mkdir .devcontainer && wget https://raw.githubusercontent.com/derickson2402/Dockerized-CAEN/main/devcontainer.json -O .devcontainer/devcontainer.json'
Great!
Now when you open your project in VS Code, it will ask if you want to open the project in the container.
This will reopen the window and say Dev Container: CAEN
in the bottom left corner.
Everything you do is now running in a CAEN environment!
If you don't see the prompt, you can also open the command palette and run Remote-Containers: Reopen in Container
.
Happy coding!
There are currently 3 compiler versions available. gcc-6.2.0
is a legacy version that EECS 281 used a few years ago, gcc-8.5.0
is the default on CAEN (and RHEL 8), and gcc-12.2.1
is a newer version for EECS 482.
If you want to use gcc-6.2.0
, you can use gcc-6
, gcc-6.2
, or gcc-6.2.0
(or g++-6
etc.) and they all work equivilently.
For gcc-12.2.1
, there is a bug (#46) so instead you should use the container dockerized-caen:gcc12
. Modify the .devcontainer/devcontainer.json
file and replace the latest
in the "image"
parameter with gcc12
and click Rebuild
when VSCode prompts you.
Great question! It uses a Docker Container, which is like a virtual environment running Linux. This environment is set up with CentOS (the free version of RHEL on CAEN) and all of the tools that you normally use on CAEN. That means that there is no difference running a program in the container versus on actual CAEN servers. It also means that the Autograder compiler works the same as in the container!
There's a simple solution to that!
The devcontainer.json
file contains instructions for installing more tools.
You can also log an issue here with the name of said program and any special tools that might go along with it.
I will add it as a default as soon as I can!
Programming on macOS and just want to use CAEN tools on the command line?
You can use the caen
script to use the devcontainer from a terminal (however you cannot use custom tools this way).
You can run commands like this and it will execute in CAEN:
caen [program] [args]
To use this script, you need to have Docker installed (see above). With Docker installed, simply run the following command to download the script:
sudo /bin/bash -c 'wget \
https://raw.githubusercontent.com/derickson2402/Dockerized-CAEN/main/caen \
-O /usr/local/bin/caen && chmod +x /usr/local/bin/caen'
You can run caen bash
to start a new bash shell in the container!
This can be handy if you have a lot of commands to run, or if you are having issues with redirecting stdin, stdout, or stderr, or you are trying to use piping.
There are a few environment variables that you can use to change the behavior of the container.
To permanently set an option, add it to a file in your home directory ~/.caen.conf
.
To set an option just for the current workspace, you can set them in the file $(pwd)/.caen.conf
.
You can also use export VARIABLE=value
to make the settings stick around just until you close your shell, or you can use VARIABLE=value caen ...
to just use it once.
The currently supported variables are given below:
Variable Name | Default Value | Description |
---|---|---|
CAEN_VERSION | latest | Container tag to use, either of the form v0.5 , or a branch name like dev or feature-example |
CAEN_ARGS | -- | Optional arguments to pass to the docker run command. Be careful with these, they will likely collide with existing options |
CAEN_USER | your-uid:your-gid | Defaults to your current UID:GID . You can specify just UID or both, just need to use the number |
CAEN_REPO_NAME | ghcr.io/derickson2402/dockerized-caen | Can be changed for locally testing new containers |
I started working on this project while taking EECS-281, in order to make debugging my programs easier. I am sharing this project online in hopes that others will find it useful, but note that I don't have much free time to develop this project.
With that said, if you have an idea that would make this project even better, feel free to log an issue or submit a Pull Request. I greatly appreciate any help on developing this project!