- Rust 96%
- Nix 2.3%
- Dockerfile 1.7%
|
|
||
|---|---|---|
| .woodpecker | ci: rizz up the CI | |
| src | style: cargo-sort and clippy lints | |
| .dockerignore | feat: add Dockerfile | |
| .gitignore | misc: ignore direnv | |
| .rusty-hook.toml | test: add pre-commit hook | |
| Cargo.lock | feat: sort command | |
| Cargo.toml | style: cargo-sort and clippy lints | |
| CHANGELOG.md | chore: update changelog | |
| cliff.toml | ci: rizz up the CI | |
| Dockerfile | fix: installing to /bin is very destructive | |
| flake.lock | chore: update flake | |
| flake.nix | chore: update flake | |
| LICENSE | init | |
| README.md | docs: add rizzybox-debug example usage video | |
8888888b. d8b 888888b.
888 Y88b Y8P 888 "88b
888 888 888 .88P
888 d88P 888 88888888 88888888 888 888 8888888K. .d88b. 888 888
8888888P" 888 d88P d88P 888 888 888 "Y88b d88""88b `Y8bd8P'
888 T88b 888 d88P d88P 888 888 888 888 888 888 X88K
888 T88b 888 d88P d88P Y88b 888 888 d88P Y88..88P .d8""8b.
888 T88b 888 88888888 88888888 "Y88888 8888888P" "Y88P" 888 888
888
Y8b d88P
"Y88P"
A multicall coreutil binary written in Rust.
Usage
As a multicall binary
Rizzybox consists of a handful of coreutil implementations, as well as a few
original coreutils (see the stem command for an
example). Each one can be executed with rizzybox <util-name>. For a list of
supported commands, you can run rizzybox --help or rizzybox --list.
As rudimentary coreutils
Rizzybox can be symlinked or "installed" in such a way that allows you to
execute the various supported coreutils without needing to invoke them as
rizzybox <util-name>. This allows you to simply run cat to invoke
rizzybox cat. To do so, simply run
rizzybox --install-self <path-to-desired-installation-dir>. The installation
dir must be in $PATH to be used this way, and you will need write permissions
to that directory or invoke it with sudo or doas.
Debug scratch or distroless container images
Since Rizzybox is a set of coreutils with a very rudimentary, interactive-only shell, we can use it for debugging container images that are built from empty filesystems. Doing so requires using a build of Rizzybox that has been built with a statically-linked libc. If your docker host is not running Linux, you will need a Linux build of rizzybox to do this because we need to mount rizzybox inside of the container image at runtime to enable this functionality.
Configure rizzybox to work as a docker plugin
- Locate your Docker plugins directory. This is usually in
~/.docker/cli-pluginsor/usr/lib/docker/cli-plugins. If you are unsure, you can inspect the output ofdocker infoor use the following one-liner:
dirname $(docker info | grep -iA3 Plugins | grep Path | awk '{ print 2ドル }' | head -n1)
- Symlink Rizzybox to
"$docker_plugins_dir/docker-debug"(or"$docker_plugins_dir/docker-rebug", if you're already usingdocker-debug)
sudo ln -sf $(which rizzybox) "$docker_plugins_dir/docker-debug"
- Use the Rizzybox shell to get an interactive session into a minimal container image:
docker debug tangowithfoxtrot/scratch
# or, if you symlinked it as docker-rebug:
docker rebug tangowithfoxtrot/scratch
Goals
- Do something fun in Rust.
- Learn more about
coreutils. - Provide fancier alternatives to GNU coreutils with things like syntax-highlighting and robust completions. For now, perfect GNU compatibility is not a goal. In the future, this may change, but if you would like a Rust coreutil project that does strive for GNU compatibility, please check out uutils.
- Create original coreutils.
Acknowledgements
- bubble-shell; for demonstrating basic shell logic
- Bat; enables niceties like
syntax-highlighting in
cat,echo, and others