Skip to content

Setting up a development environment#

Quick start#

Make sure you have the necessary prerequisites installed (see below for detailed instructions).

  • Docker / Docker Compose
  • WSL2 (Windows Subsystem for Linux 2) - only required for Windows

Then run the following command to download the setup script and install QCrBox.

$ bash <(curl -fsSL https://raw.githubusercontent.com/QCrBox/QCrBox/dev/scripts/qcrbox_setup.sh)

If you prefer to inspect the script before running it, you can download it first and then run it manually:

$ curl -fsSL https://raw.githubusercontent.com/QCrBox/QCrBox/dev/scripts/qcrbox_setup.sh > qcrbox_setup.sh
$ bash qcrbox_setup.sh

Info

If you are using Windows, make sure to run the above command in a WSL2 terminal, not in PowerShell or the Windows command prompt.

The setup script will give you the option to automatically install Devbox and Nix (if they are not already installed). Then it will clone the QCrBox repository and create an isolated development environment inside it. This development environment includes a virtual environment for the pyqcrbox Python package and all other dependencies needed to run and develop QCrBox. Once installation is complete, you can activate the development shell by running devbox shell.

QCrBox relies on Devbox to provide a consistent development environment. Internally, Devbox uses the Nix package manager to install packages into isolated environments.

The QCrBox setup script will give you the option to automatically install Devbox and Nix if they are not already installed.

Verify the installation#

Verify that we can now run the qcb command line tool, which is the main CLI interface for interacting with QCrBx from the command line.

$ qcb

 Usage: qcb [OPTIONS] COMMAND [ARGS]...                                         

 Command line interface for the Quantum Crystallography Toolbox.                

╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --verbose  -v    Enables verbose mode (will print debugging messages about   │
│                  actions performed). [default: False]                        │
│ --help     -h    Show this message and exit.                                 │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────╮
│ build       Build QCrBox components.                                         │
│ up          Start up QCrBox components.                                      │
│ down        Shut down QCrBox components.                                     │
│ list        List registered resources (applications, commands, etc.)         │
│ init        Create boilerplate template for a new application.               │
│ invoke      Invoke command with given arguments.                             │
│ status      Retrieve the status of a QCrBox calculation                      │
│ docs        Build/serve the documentation.                                   │
│ dev         Development-related commands.                                    │
│ validate    Check application spec yaml file for errors.                     │
│ version     Print the qcrbox version.                                        │
╰──────────────────────────────────────────────────────────────────────────────╯
$ qcb version
0.1.dev1+g5d52560
$ qcb list components
qcrbox-nats
qcrbox-registry
qcrbox-nextflow
cod_check
crysalis-pro
crystal-explorer
dummy_cli
eval1x
mopro
olex2
qcrbox_quality
qcrboxtools
shelx
xharpy-gpaw
qcrbox-syslog
qcrbox-reverse-proxy
$ qcb list components --all
base-ancestor
base-application
base-novnc
base-wine
qcrbox-nats
qcrbox-registry
qcrbox-nextflow
cod_check
crysalis-pro
crystal-explorer
dummy_cli
eval1x
mopro
olex2
qcrbox_quality
qcrboxtools
shelx
xharpy-gpaw
qcrbox-syslog
qcrbox-reverse-proxy

You can also test that the components build and run correctly by running a Devbox script,

$ devbox run test-api

Build a container to test the installation#

Try building a component by typing:

$ qcb build qcrboxtools
Building the following components (including dependencies): qcrboxtools

2025-07-30 15:26:13.260 | DEBUG    | pyqcrbox.cli.subcommands.build:task_build_docker_image:153 - No local build context found for service 'qcrbox-reverse-proxy', nothing to do.
2025-07-30 15:26:13.260 | DEBUG    | pyqcrbox.cli.subcommands.build:task_build_docker_image:153 - No local build context found for service 'qcrbox-syslog', nothing to do.
2025-07-30 15:26:13.288 | INFO     | pyqcrbox.cli.subcommands.build:<lambda>:83 - Building Python package: pyqcrbox
Building wheel...
/home/runner/.cache/uv/builds-v0/.tmpjkrUUZ/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
Successfully built /home/runner/work/QCrBox/QCrBox/services/base_images/base_ancestor/pyqcrbox_dist/pyqcrbox-0.1.dev1+g5d52560-py3-none-any.whl
2025-07-30 15:26:13.812 | INFO     | pyqcrbox.cli.subcommands.build:<lambda>:72 - Pulling/cloning QCrBoxTools repo in /home/runner/work/QCrBox/QCrBox/.build/QCrBoxTools ...
fatal: cannot change to '/home/runner/work/QCrBox/QCrBox/.build/QCrBoxTools': No such file or directory
Cloning into '/home/runner/work/QCrBox/QCrBox/.build/QCrBoxTools'...
2025-07-30 15:26:14.205 | INFO     | pyqcrbox.cli.subcommands.build:<lambda>:108 - Building Python package: qcrboxtools
Building wheel...
Successfully built /home/runner/work/QCrBox/QCrBox/services/base_images/base_ancestor/pyqcrbox_dist/qcrboxtools-0.0.5-py3-none-any.whl
2025-07-30 15:26:14.464 | INFO     | pyqcrbox.cli.helpers.docker_project:build_single_docker_image:41 - Building docker image: base-ancestor
2025-07-30 15:26:14.465 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:64 - Running docker compose command: '/usr/bin/docker compose --project-name=qcrbox --env-file=/home/runner/work/QCrBox/QCrBox/.env.dev --file=/home/runner/work/QCrBox/QCrBox/docker-compose.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.build.yml --file=/home/runner/work/QCrBox/QCrBox/docker-compose.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.run.yml build base-ancestor'
/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
2025-07-30 15:26:14.504 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:68 - Current pyqcrbox version: 0.1.dev1+g5d52560
2025-07-30 15:27:47.375 | INFO     | pyqcrbox.cli.helpers.docker_project:build_single_docker_image:41 - Building docker image: base-application
2025-07-30 15:27:47.376 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:64 - Running docker compose command: '/usr/bin/docker compose --project-name=qcrbox --env-file=/home/runner/work/QCrBox/QCrBox/.env.dev --file=/home/runner/work/QCrBox/QCrBox/docker-compose.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.build.yml --file=/home/runner/work/QCrBox/QCrBox/docker-compose.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.run.yml build base-application'
/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
2025-07-30 15:27:47.410 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:68 - Current pyqcrbox version: 0.1.dev1+g5d52560
2025-07-30 15:27:50.644 | INFO     | pyqcrbox.cli.helpers.docker_project:build_single_docker_image:41 - Building docker image: qcrbox-nats
2025-07-30 15:27:50.644 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:64 - Running docker compose command: '/usr/bin/docker compose --project-name=qcrbox --env-file=/home/runner/work/QCrBox/QCrBox/.env.dev --file=/home/runner/work/QCrBox/QCrBox/docker-compose.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.build.yml --file=/home/runner/work/QCrBox/QCrBox/docker-compose.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.run.yml build qcrbox-nats'
/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
2025-07-30 15:27:50.678 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:68 - Current pyqcrbox version: 0.1.dev1+g5d52560
2025-07-30 15:27:53.031 | INFO     | pyqcrbox.cli.helpers.docker_project:build_single_docker_image:41 - Building docker image: qcrbox-registry
2025-07-30 15:27:53.031 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:64 - Running docker compose command: '/usr/bin/docker compose --project-name=qcrbox --env-file=/home/runner/work/QCrBox/QCrBox/.env.dev --file=/home/runner/work/QCrBox/QCrBox/docker-compose.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.build.yml --file=/home/runner/work/QCrBox/QCrBox/docker-compose.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.run.yml build qcrbox-registry'
/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
2025-07-30 15:27:53.066 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:68 - Current pyqcrbox version: 0.1.dev1+g5d52560
2025-07-30 15:27:56.944 | INFO     | pyqcrbox.cli.helpers.docker_project:build_single_docker_image:41 - Building docker image: qcrboxtools
2025-07-30 15:27:56.944 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:64 - Running docker compose command: '/usr/bin/docker compose --project-name=qcrbox --env-file=/home/runner/work/QCrBox/QCrBox/.env.dev --file=/home/runner/work/QCrBox/QCrBox/docker-compose.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.build.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.build.yml --file=/home/runner/work/QCrBox/QCrBox/docker-compose.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/cod_check/docker-compose.cod_check.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crysalis-pro/docker-compose.crysalis-pro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/crystal_explorer/docker-compose.crystal-explorer.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/dummy_cli/docker-compose.dummy_cli.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/eval1x/docker-compose.eval1x.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/mopro/docker-compose.mopro.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/olex2_linux/docker-compose.olex2_linux.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrbox_quality/docker-compose.qcrbox_quality.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/qcrboxtools/docker-compose.qcrboxtools.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/shelx/docker-compose.shelx.run.yml --file=/home/runner/work/QCrBox/QCrBox/services/applications/xharpy_gpaw/docker-compose.xharpy-gpaw.run.yml build qcrboxtools'
/opt/hostedtoolcache/Python/3.11.13/x64/lib/python3.11/site-packages/setuptools_scm/git.py:167: UserWarning: "/home/runner/work/QCrBox/QCrBox" is shallow and may cause errors
  warnings.warn(f'"{wd.path}" is shallow and may cause errors')
2025-07-30 15:27:56.979 | DEBUG    | pyqcrbox.cli.helpers.docker_project:run_docker_compose_command:68 - Current pyqcrbox version: 0.1.dev1+g5d52560

Restart QCrBox#

In the event of disaster, it is possible to destroy the containers and restart QCrBox by using a Devbox script,

$ devbox run restart-qcrbox

Improving File Access Speed on Windows#

When using Docker on Windows with WSL2 (Windows Subsystem for Linux 2), file access in shared folders can be slow, which can cause problems for processes like data reduction. By default, the shared files are stored in <project_folder>/shared_files/ on your Windows drive. You should move the shared files to your WSL2 partition for faster access.

Steps#

  1. Open WSL2:
  2. Open a Windows command prompt
  3. Type wsl and press Enter

  4. Create a new folder in your WSL2 home directory using the mkdir command:

  5. Important: Use lowercase letters only for the folder name!
  6. Example: mkdir qcrbox_shared_files

  7. Locate your Linux username:

  8. Look at the command prompt; your username is before the @ symbol
  9. Example: If you see john@DESKTOP-123:~$, your username is "john"

  10. Update your QCrBox's .env.dev file in the QCrBox base directory:

  11. Find the line starting with QCRBOX_SHARED_FILES_DIR_HOST_PATH
  12. Replace it with one of these options:

    • For Windows 10:
    QCRBOX_SHARED_FILES_DIR_HOST_PATH='\\wsl$\Ubuntu\home\<your_linux_username>\<folder_name>'
    
    • For Windows 11:
    QCRBOX_SHARED_FILES_DIR_HOST_PATH='\\wsl.localhost\Ubuntu\home\<your_linux_username>\<folder_name>'
    
  13. Example:

    QCRBOX_SHARED_FILES_DIR_HOST_PATH='\\wsl$\Ubuntu\home\john\qcrbox_shared_files'
    
  14. Make sure to use single quotes around the path

Prerequisites#

The following dependencies need to be installed manually.

Docker and Docker Compose

The easiest way to install Docker is to use the Docker Desktop (scroll down to find the box titled "Install Docker Desktop" and click on the link for your operating system).

If you don't care about a graphical user interface (for example, if you are working on a remote server), you can also manually install Docker Engine and Docker Compose.

Info

QCrBox has been tested with the version of Docker listed below, but other recent versions should also work. Please create an issue on GitHub if you experience any problems.

Note that QCrBox requires Docker Engine version 25.0 or later due to the use of --start-interval in container health checks.

$ docker version
Client:
 Version:           24.0.9
 API version:       1.43
 Go version:        go1.22.5
 Git commit:        v24.0.9
 Built:             Thu Jan  1 00:00:00 1970
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.1.1
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.12
  Git commit:       cc13f95
  Built:            Tue Jul 23 19:57:01 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.19
  GitCommit:        2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc:
  Version:          1.7.19
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

$ docker compose version
Docker Compose version v2.21.0