2022-12-25 22:27:17 -05:00
|
|
|
Contents
|
|
|
|
========
|
|
|
|
* [Introduction](#introduction)
|
2023-01-16 19:03:25 -05:00
|
|
|
* [Provided Commands](#provided_commands)
|
2022-12-25 22:27:17 -05:00
|
|
|
* [Scope](#scope)
|
|
|
|
* [Installation](#installation)
|
|
|
|
|
|
|
|
## Introduction
|
|
|
|
*Shitbox* is inspired by the project [busybox](https://busybox.net/) but with a
|
|
|
|
much more limited scope. While Busybox aims to be "*The swiss army knife of
|
2023-01-10 18:32:27 -05:00
|
|
|
embedded linux*" you can think of shitbox as being more like "*The box store
|
2022-12-25 22:27:17 -05:00
|
|
|
multi tool of embedded linux*".
|
|
|
|
|
|
|
|
All joking aside the utilities which are present function mostly as expected and
|
|
|
|
the code aims to be robust. It's written in Rust, not C, for whatever that's
|
|
|
|
worth. Like Busybox it is a multi-call binary which is therefore able to share
|
|
|
|
code between applets, making for an overall smaller binary.
|
|
|
|
|
2023-01-16 19:03:25 -05:00
|
|
|
## Provided Commands
|
2023-02-07 10:34:09 -05:00
|
|
|
- b2sum
|
2023-01-16 19:03:25 -05:00
|
|
|
- base32
|
|
|
|
- base64
|
|
|
|
- basename
|
2023-01-21 19:34:02 -05:00
|
|
|
- chgrp
|
2023-01-20 12:08:04 -05:00
|
|
|
- chmod
|
|
|
|
- chown
|
2023-01-21 20:55:59 -05:00
|
|
|
- chroot
|
2023-01-16 19:03:25 -05:00
|
|
|
- clear
|
|
|
|
- cut
|
2023-02-17 19:01:30 -05:00
|
|
|
- df
|
2023-01-16 19:03:25 -05:00
|
|
|
- dirname
|
|
|
|
- echo
|
|
|
|
- false
|
|
|
|
- factor
|
|
|
|
- fold
|
|
|
|
- groups
|
|
|
|
- head
|
2023-01-23 10:17:17 -05:00
|
|
|
- hostid
|
2023-01-16 19:03:25 -05:00
|
|
|
- hostname
|
|
|
|
- link
|
2023-02-07 10:34:09 -05:00
|
|
|
- ln
|
2023-01-21 20:55:59 -05:00
|
|
|
- logname
|
2023-02-03 19:12:40 -05:00
|
|
|
- md5sum
|
2023-01-20 23:53:28 -05:00
|
|
|
- mkfifo
|
2023-01-21 19:34:02 -05:00
|
|
|
- mknod
|
2023-02-04 00:56:02 -05:00
|
|
|
- mktemp
|
2023-01-16 19:03:25 -05:00
|
|
|
- mountpoint
|
|
|
|
- nologin
|
|
|
|
- nproc
|
2023-01-21 19:34:02 -05:00
|
|
|
- printenv
|
|
|
|
- pwd
|
2023-01-22 00:26:26 -05:00
|
|
|
- readlink
|
2023-01-22 10:24:21 -05:00
|
|
|
- realpath
|
2023-01-16 19:03:25 -05:00
|
|
|
- rev
|
2023-01-17 17:46:05 -05:00
|
|
|
- rm
|
2023-01-16 23:44:21 -05:00
|
|
|
- rmdir
|
2023-02-04 01:06:54 -05:00
|
|
|
- sha1sum
|
|
|
|
- sha224sum
|
|
|
|
- sha256sum
|
|
|
|
- sha384sum
|
|
|
|
- sha512sum
|
|
|
|
- sleep
|
2023-02-07 10:34:09 -05:00
|
|
|
- swaplabel
|
2023-02-08 16:20:25 -05:00
|
|
|
- swapoff
|
2023-01-16 19:03:25 -05:00
|
|
|
- sync
|
2023-02-24 19:07:53 -05:00
|
|
|
- touch
|
2023-01-16 19:03:25 -05:00
|
|
|
- true
|
2023-04-17 23:01:43 -04:00
|
|
|
- truncate
|
2023-02-07 10:34:09 -05:00
|
|
|
- umount
|
2023-01-16 19:03:25 -05:00
|
|
|
- unlink
|
2023-01-23 00:43:54 -05:00
|
|
|
- wc
|
2023-01-16 19:03:25 -05:00
|
|
|
- which
|
2023-03-14 22:17:46 -04:00
|
|
|
- who
|
2023-01-16 19:03:25 -05:00
|
|
|
- whoami
|
|
|
|
- yes
|
|
|
|
|
2022-12-25 22:27:17 -05:00
|
|
|
## Scope
|
|
|
|
*Shitbox* does not aim to supply an entire system of utilities, but rather a
|
2023-01-08 11:40:08 -05:00
|
|
|
subset of the most common Unix shell utilities. Things which are out of scope
|
2022-12-25 22:27:17 -05:00
|
|
|
for the project include:
|
|
|
|
- Shells
|
|
|
|
- Network servers
|
|
|
|
- Kernel module handling utilities
|
2023-01-16 19:03:25 -05:00
|
|
|
- Anything requiring suid or sgid bits such as `su` or `sudo`
|
2023-02-07 10:34:09 -05:00
|
|
|
The code is not intended to be portable across different architectures, only
|
|
|
|
Linux is supported.
|
2022-12-25 22:27:17 -05:00
|
|
|
|
2023-02-08 16:20:25 -05:00
|
|
|
Full compatability with GNU coreutils is not intended. Compliance with POSIX is
|
|
|
|
the main goal, with extensions provided by GNU or BSD where they make sense, and
|
|
|
|
certain tweaks to improve consistency of behavior where they do not interfere
|
|
|
|
with POSIX compliance.
|
|
|
|
|
2022-12-25 22:27:17 -05:00
|
|
|
## Installation
|
|
|
|
Building is done using the official Rust toolchain. It is recommended that you
|
|
|
|
install your toolchain using Rustup rather than distro packages, as old compiler
|
|
|
|
versions are not supported.
|
|
|
|
```Sh
|
|
|
|
cargo build --release
|
|
|
|
```
|
2023-02-07 10:34:09 -05:00
|
|
|
This produces three binaries: corebox, hashbox and utilbox. Most of the commands
|
|
|
|
ordinarily provided by GNU coreutils are applets of `corebox`, with the exception
|
|
|
|
of cryptographic hash related commands which are split out into `hashbox`. Linux
|
|
|
|
swpecific commands ordinarily provided by the util-linux package are in `utilbox`.
|
|
|
|
|
2022-12-25 22:27:17 -05:00
|
|
|
The `bootstrap` applet provides facility for installing the binary, creating all
|
|
|
|
required symlinks and installing some nice to haves such as **Unix man pages**
|
|
|
|
and **shell completions** [see below].
|
|
|
|
```Sh
|
2023-02-07 10:34:09 -05:00
|
|
|
target/release/corebox help bootstrap
|
2022-12-25 22:27:17 -05:00
|
|
|
```
|
|
|
|
### Supported shells for completions
|
|
|
|
- Bash
|
|
|
|
- Fish
|
|
|
|
- NuShell
|
|
|
|
- PowerShell
|
|
|
|
- Zsh
|
|
|
|
|