clone-shim/README.md

48 lines
1.8 KiB
Markdown
Raw Normal View History

2022-02-11 15:03:15 +00:00
# clone-shim
2022-02-28 20:42:44 +00:00
## Running the examples
2022-05-20 17:48:51 +01:00
### examples/fib
The fib example performs fibonacci trivially on a fixed number. It is the most basic example of a process that requires no privilege, excluding `Stdout` to print the result.
To run this example:
cargo build
cargo build --example fib
target/debug/clone-shim -s examples/fib/spec.json target/debug/examples/fib
2022-02-28 20:42:44 +00:00
### examples/basic
The basic example instructs the shim to spawn two processes, each of which writes "hello from main{1,2}!" to stdout.
To run this example:
2022-04-07 21:57:11 +01:00
cargo build
2022-02-28 20:42:44 +00:00
cargo build --example basic
2022-04-28 16:04:31 +01:00
target/debug/clone-shim -s examples/basic/spec.json target/debug/examples/basic
2022-03-01 11:29:13 +00:00
### examples/pipes
The pipes example shows some of the power of the shim by using pipes. The process "pipe_sender" sends two messages down a pipe that it's given by the shim. These two messages each spawn a completely isolated process, "pipe_receiver", that receives that message.
To run this example:
2022-04-07 21:57:11 +01:00
cargo build
2022-03-01 11:29:13 +00:00
cargo build --example pipes
2022-04-28 16:04:31 +01:00
target/debug/clone-shim -s examples/pipes/spec.json target/debug/examples/pipes
2022-04-27 13:06:26 +01:00
## Debugging the shim
The shim can be debugged as with most processes, but it is exceptionally forky. Breaking before a clone in `rust-gdb` then running `set follow-fork-mode child` is often necessary. The best approach is to go in with a plan of attack.
## Debugging the child
Debugging the child processes is vastly more difficult than in other more Linux-like containerisation solutions.
The `--debug` flag on the shim attempts to stop application spawned processes as soon as they are voided. This gives you a chance to attach with a debugger.
The debugger must be run from the ambient namespace and not within the void, as none of the prerequisites will exist within the void.
Good luck!