Skip to main content

Quick start

Generate the included HelloWorld scenario, inspect its deployment files, and optionally run it on a prepared CRADLE host.

Choose your path

GoalCompleteResult
Generate and inspect CRADLE filesPart 1Intermediary YAML and provider files; no VMs are started.
Run the complete environmentParts 1 and 2VMs, scenario events, runtime evidence, and cleanup.

Part 2 requires an authorized environment and external dependencies that are not validated during compilation. If your host is not ready, complete Prepare a deployment host first.

Part 1 — Generate Hello World

1. Prepare Python

From the CRADLE project root, create and activate a virtual environment:

$ python3 --version
$ python3 -m venv venv
$ source venv/bin/activate
$ python -m pip install --upgrade pip
$ python -m pip install -r requirements.txt

Use the environment supplied by the administrator when CRADLE is centrally managed.

2. Inspect the scenario

Read the scenario before generating or running it:

$ sed -n '1,220p' files/input/HelloWorld.cradle

It describes two instances, one network, an external object, and events across the pre, main, and post phases.

3. Generate deployment files

Generate files for the default libvirt provider:

$ ./cradle.sh HelloWorld libvirt

Pass the scenario filename without .cradle.

4. Check generated files

The compiler writes:

files/output/HelloWorld.yml

The assembler writes the libvirt deployment under:

assembler/bin/output/HelloWorld/
└── Deployment_For_local/
└── HelloWorld-experiment/
└── localhost/

Deployment_For_local is the historical name retained for libvirt compatibility.

List both outputs:

$ ls files/output/HelloWorld.yml
$ ls assembler/bin/output/HelloWorld/Deployment_For_local/HelloWorld-experiment/localhost

If both commands display their contents and cradle.sh reported no failure, generation succeeded. No virtual machines have been started.

Part 2 — Deploy Hello World

5. Confirm deployment dependencies

Continue only when:

  • the Ubuntu 24.04 x86-64 host is prepared for libvirt;
  • hardware virtualization and sufficient host capacity are available;
  • every generated Vagrant box identifier resolves to a valid Vagrant Cloud box that supports libvirt;
  • required binaries, scripts, roles, and configuration files are available;
  • proprietary software is separately licensed and supplied;
  • scenario artifact locations are authorized and reachable; and
  • the forensic files required for extraction are installed.

Compilation and generation do not prove that these dependencies are available.

Deployment creates VMs, configures networks, and executes scenario objects. It
also attempts to destroy a previous `HelloWorld` environment and replaces its
generated deployment files.

6. Deploy and execute

Log in as the configured runtime user. With the default managed-host setup:

$ sudo --login --user cdl
$ cd /home/cdl/cradle-main
$ source venv/bin/activate
$ ./odyssey.sh HelloWorld libvirt

The workflow regenerates the environment, provisions its VMs, executes the events, extracts evidence, and records timing information.

Watch for:

Provision succeeded
Extraction succeeded

Provisioning failure stops the workflow. Extraction failure is reported, but the workflow continues to timing handling, so verify the dataset explicitly.

7. Verify the environment and dataset

Check the VM state:

$ cd assembler/bin/output/HelloWorld/Deployment_For_local/HelloWorld-experiment/localhost
$ vagrant status

List the runtime directories:

$ find /mnt/hdd/cradle/dataset/HelloWorld -mindepth 2 -maxdepth 2 -type d | sort

A completed run can contain system or audit logs, packet captures, and timing YAML. Exact contents depend on the scenario configuration. Use Understand the output for the verification checklist.

8. Clean up

The current workflow leaves the new environment running. From its generated directory:

$ vagrant destroy -f

This destroys the Vagrant-managed VMs but does not remove the extracted dataset. See Clean up an environment for details.

Generate for another provider

After completing the primary libvirt path, generate VirtualBox files with:

$ ./cradle.sh HelloWorld virtualbox

CRADLE accepts:

ArgumentResult
omitted, libvirt, or localGenerate libvirt files under Deployment_For_local.
virtualbox or vboxGenerate VirtualBox files.
sphereGenerate SPHERE artifacts; the public odyssey.sh workflow does not operate them.

See Supported platforms before changing the deployment target.

If a step fails

Use Troubleshooting to identify whether the failure occurred during Python setup, compilation, generation, provider setup, provisioning, artifact retrieval, extraction, or cleanup.

Next step

Read the Hello World example, then create your own environment with Write a scenario.