CCDC Environment setup
This will be the guide(s) on how to set up your environment for CCDC playing, and development of related scripts + testing them.
Windows
This requires Windows 11. With Windows 10, there is no nested virtaulization in Windows Subsystem for Linux (WSL), preventing the use of the relevant vagrant machines.
Although there are workarounds, allowing you to use virtualbox in WSL or the like, they are not worth the effort it requires to support them.
Chocolatey
Using chocolatey, install several packages we need for play/development. If you already have an app installed, you don’t need to install it with chocolatey.
In an administrative powershell or cmd session, run:
choco install -y firefox wezterm vscode
Wezterm
Install wezterm from either chocolatey or the official website (using the setup.)
On a vm, I get an error about the opengl version being incompatible when I attempt to launch wezterm. I have to launch it with `wezterm –config “prefer_egl=true”.
To launch the ubuntu session, you can right click on the new tab, and then a menu will appear, from which you can select Ubuntu.
Ubuntu/WSL in Windows
You need to have Windows 11 installed, in order for nested virtualization within WSL to work. If you are not on Windows 10, then you need to either upgrade, or work within a linux distribution.
As long as you Windows 10 May 2020 Update (version 2004), you can install wsl with a single command. Otherwise, you have to follow some painful steps
In an elevated powershell window:
wsl --install
Reboot the system.
Then, launch wsl with wsl
from powershell or cmd.
It’s going to ask you for some prompts. Because this is a development environment, focusing on speed rather than security, I recommend an easy to type username and password.
Edit the sudoers file:
To edit the sudo file, you can use sudo visudo
to edit it safely. This command while check the sudoers file for errors, rather than instantly breaking sudo upon a misconfiguration.
/etc/sudoers
# Change the portion of the file referring to env_reset to look like this:
# Put an "!" in front of env_reset, and comment out the part referring to secure path
Defaults !env_reset
Defaults mail_badpass
#Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Change the portion of the file that refers to the sudo group to look like this:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Either reboot, or restart the wsl virtual machine.
To restart the WSL vm, from powershell or cmd:
Install docker and docker-compose (and curl and git, other tools we will need later):
sudo apt update && sudo apt upgrade
sudo apt install docker.io docker-compose curl git openssh-client wget virt-manager
You might have to reboot here, before the next step will work. Maybe.
sudo usermod -aG docker $USER # Run docker without sudo
sudo usermod -aG libvirt $USER # Run libvirt vms without sudo
Rebooting the wsl instance will log you in and out, enabling you to use docker, without sudo, and after you launch virt-manager once, you can access it from the windows gui.
Linux
Linux has many distributions, so I will include vague steps that will work everywhere, rather than precise steps that only work on one distro, like the above Windows/WSL steps, which are designed to work on Ubuntu. If you have an Ubuntu or Debian based distro for your linux, then those steps likely work.
Edit the sudoers file:
To edit the sudo file, you can use sudo visudo
to edit it safely. This command while check the sudoers file for errors, rather than instantly breaking sudo upon a misconfiguration.
/etc/sudoers
# Change the portion of the file referring to env_reset to look like this:
# Put an "!" in front of env_reset, and comment out the part referring to secure path
Defaults !env_reset
Defaults mail_badpass #Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
You can also set sudo to not require a password, if you so wish. However, this varies based on distributions.
Install:
- Equivalent of base development packages for your distro. Usually a metapackage containing git, compilers like gcc, and build tools like make.
- ssh and related packages. (If sshfs and scp are packaged, get them as well)
- curl and wget
- Libvirt and virt-manager (add your user to the libvirtd group so that you don’t need sudo to manage virtual machines)
- Docker (add your user to the docker group so you don’t need sudo to manage docker containers)
- Firefox
Wezterm:
Wezterm has official installation instructions. I don’t recommend flatpak, because sandboxing may cause weird behaviors.
Vscode:
Microsoft has an official guide about installing vscode. I recommend you add the microsoft repo for your distro if available, and get from there, so that your package manager can update vscode alongside everything else.
Macos
Install homebrew from the official website
Steps needed:
- Install vscode in a way that it’s in your $PATH.
- Does brew do this?
- Microsoft’s documentation
- Nix (see below)
- Libvirt
- Official docs recommend brew - but does this method integrate properly
- Spice not supported - is this outdated?
- Virtualbox
- Official site
- No arm version?
- Vmware fusion — No. Paid software, and is a different vagrant provider.
- Wezterm:
- Brew cask
- Official website (also recommends brew)
All Operating Systems
Nix
In macos terminal, in linux, or in WSL, install nix (tool used to manage our development environments):
Do not run these commands with sudo.
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
Restart your shell. Simply close and reopen the terminal.
Also, ensure the nix service is enabled by the
Update the nix channels:
nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgs
nix-channel --update
Install the zellij terminal multiplexer:
nix profile install nixpkgs#zellij
Vscode
Install these vscode extensions, and their dependencies (should be pulled automatically):
Personal preference, but I like to disable acceptance of the autocomplete suggestion on enter. This can be particularly annoying in languages like ansible or python, where you have to hit enter to go to the next line.
Playing and Developing
Playing
git clone https://github.com/CSUN-CCDC/CCDC-2023
When in the root of this git repo, you can run nix-shell
to get a full development environment. It includes tools like ansible, ansible checking, vagrant, and more.