Tool for interactive command line environments on Linux
Find a file
Tomas Popela 668f7dcfa5 Fix the saving and restoring of the array of positional parameters
Otherwise https://www.shellcheck.net/ would complain:
  Line 21:
  arguments="$@"
            ^-- SC2124: Assigning an array to a string! Assign as
              array, or use * instead of @ to concatenate.

See: https://github.com/koalaman/shellcheck/wiki/SC2124

POSIX doesn't support arrays other than the one for positional
parameters (ie. "$@"); and "$@" is generally recommended for
forwarding the positional parameters, not $@ or "$*" or $* [1,2].

Therefore, the original contents of "$@" are saved in a scalar variable
after quoting them in a way that's resilient against spaces and
wildcards in the elements, and are later restored using 'set -- ...'
based on Rich's sh (POSIX shell) tricks:
http://www.etalabs.net/sh_tricks.html

Since the forward_to_host to function isn't passed any positional
parameters but still references "$@", because it uses 'set -- ...' to
restore the script's array of positional parameters, SC2119 [3] and
SC2120 [4] need to be silenced. Otherwise https://www.shellcheck.net/
would complain:
  Line 976:
  forward_to_host()
  ^-- SC2120: forward_to_host references arguments, but none are ever
    passed.

The --verbose debug output was restructured to silence SC2145 [5].
Otherwise https://www.shellcheck.net/ would complain:
  Line 986:
  echo "... to host: $0 $@" >&3
                        ^-- SC2145: Argument mixes string and array.
                          Use * or separate argument.

As a nice side-effect the new output highlights the importance of using
"$@" to forward the positional parameters instead of the other
alternatives.

Fallout from 5b3d234c9e

[1] https://unix.stackexchange.com/questions/41571/what-is-the-difference-between-and/94200
[2] https://unix.stackexchange.com/questions/129072/whats-the-difference-between-and
[3] https://github.com/koalaman/shellcheck/wiki/SC2119
[4] https://github.com/koalaman/shellcheck/wiki/SC2120
[5] https://github.com/koalaman/shellcheck/wiki/SC2145

https://github.com/debarshiray/toolbox/pull/83
2019-03-22 17:21:14 +01:00
data Give access to removable devices and other temporary mounts 2019-03-13 15:48:03 +01:00
doc doc/toolbox-rmi: Fix typo 2019-03-14 14:06:57 +01:00
images/fedora images: Reduce their sizes by removing temporary files created by DNF 2019-03-21 17:39:39 +01:00
COPYING Rename LICENSE as COPYING 2018-10-19 18:24:23 +02:00
gen-docs-list images: Restore documentation removed from the base Fedora images 2019-03-05 18:01:27 +01:00
meson.build Prepare 0.0.7 2019-03-14 14:06:57 +01:00
NEWS Prepare 0.0.7 2019-03-14 14:06:57 +01:00
README.md README.md: Add missing comma 2019-03-01 10:26:58 +01:00
toolbox Fix the saving and restoring of the array of positional parameters 2019-03-22 17:21:14 +01:00
toolbox-sudo Drop the "fedora" prefix and rename the project as just "toolbox" 2019-02-15 16:36:30 +01:00

Toolbox — Unprivileged development environment

Toolbox is a tool that offers a familiar RPM based environment for developing and debugging software that runs fully unprivileged using Podman.

The toolbox container is a fully mutable container; when you see yum install ansible for example, that's something you can do inside your toolbox container, without affecting the base operating system.

This is particularly useful on OSTree based Fedora systems like Silverblue. The intention of these systems is to discourage installation of software on the host, and instead install software as (or in) containers.

However, this tool doesn't require using an OSTree based system — it works equally well if you're running e.g. existing Fedora Workstation or Server, and that's a useful way to incrementally adopt containerization.

The toolbox environment is based on an OCI image. On Fedora this is the fedora-toolbox image. This image is then customized for the current user to create a toolbox container that seamlessly integrates with the rest of the operating system.

Usage

Create your toolbox container:

[user@hostname ~]$ toolbox create
[user@hostname ~]$

This will create a container, and an image, called fedora-toolbox-<your-username>:<version-id> that's specifically customised for your host user.

Enter the toolbox:

[user@hostname ~]$ toolbox enter
🔹[user@toolbox ~]$