Compare commits

...
Sign in to create a new pull request.

7 commits

Author SHA1 Message Date
Oliver Gutierrez
2c35772d29
Added iproute package 2021-07-09 10:07:34 +01:00
b8e9481913 Add bc and update README.md 2021-06-29 16:22:47 +02:00
Otto Urpelainen
e01529c7b4 Include the nano default editor
Since Fedora 33, `nano` is the default editor[0]. It needs to be
included in the fedora-toolbox image to have the standard Fedora
experience inside the container.

https://fedoraproject.org/wiki/Changes/UseNanoByDefault).
2021-03-10 11:56:26 +01:00
Ondřej Míchal
d27ac0dca0 Simplify image name
Currently the images are named as "f<version>/fedora-toolbox". This is
troublesome for new users of toolbox (even those with some background to
containers) because everywhere the image is advertised or talked about
as "fedora-toolbox". This is taken care of by Toolbox CLI but has no
effect on Podman itself (or any other tool capable of working with OCI
images).

Another pain point is in the Fedora registry[0] all "fedora-toolbox"
images get a different entry for every version of Fedora. There is no
single place for all "fedora-toolbox" images.

With this change I propose to only use "fedora-toolbox" as the name of
the container and make use of VERSION to distinguish between versions of
Fedora. Currently when you go to the Fedora registry and find an entry
for "fedora-toolbox" you'll see all previous images. I believe that with
this change that "feature" will be lost. But I personally find that
"feature" to be rather confusing because what usually a user wants the
latest version of a container (I partially base this statement on the
fact that most images are versioned this way; e.g. Ubuntu on Docker
Hub[1]).

[0] https://registry.fedoraproject.org/
[1] https://hub.docker.com/_/ubuntu
2021-02-12 16:56:56 +01:00
0285e9a1ee Give access to Avahi to resolve the .local mDNS domain
The nss-mdns plugin for the GNU Name Service Switch (or NSS)
functionality of the GNU C Library is necessary to resolve the .local
mDNS domain. The plugin talks to the Avahi daemon running on the host
to resolve the names.

https://github.com/containers/toolbox/issues/209
2020-11-15 23:22:30 +01:00
66aec2fc4e Make locate(1) work inside toolbox containers
This reverts commit bd035973c9.

https://github.com/containers/toolbox/issues/391
2020-11-15 23:20:49 +01:00
c0c0a99f1c extra-packages: Allow X11 clients to run as root
If an X11 client is started inside a 'su -' session, then xauth(1)
needs to be present so that pam_xauth.so can add a new XAUTHORITY
environment variable to the 'su -' session.

https://github.com/containers/toolbox/pull/572
2020-10-30 20:02:28 +01:00
3 changed files with 148 additions and 25 deletions

View file

@ -4,7 +4,7 @@ ENV NAME=fedora-toolbox VERSION=33
LABEL com.github.containers.toolbox="true" \ LABEL com.github.containers.toolbox="true" \
com.github.debarshiray.toolbox="true" \ com.github.debarshiray.toolbox="true" \
com.redhat.component="$NAME" \ com.redhat.component="$NAME" \
name="$FGC/$NAME" \ name="$NAME" \
version="$VERSION" \ version="$VERSION" \
usage="This image is meant to be used with the toolbox command" \ usage="This image is meant to be used with the toolbox command" \
summary="Base image for creating Fedora toolbox containers" \ summary="Base image for creating Fedora toolbox containers" \

165
README.md
View file

@ -1,41 +1,158 @@
# Toolbox — Unprivileged development environment [Toolbox](https://github.com/containers/toolbox) is a tool for Linux operating
systems, which allows the use of containerized command line environments. It is
[Toolbox](https://github.com/debarshiray/toolbox) is a tool that offers a built on top of [Podman](https://podman.io/) and other standard container
familiar RPM based environment for developing and debugging software that runs technologies from [OCI](https://opencontainers.org/).
fully unprivileged using [Podman](https://podman.io/).
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 This is particularly useful on
[OSTree](https://ostree.readthedocs.io/en/latest/) based Fedora systems like [OSTree](https://ostree.readthedocs.io/en/latest/) based operating systems like
[Silverblue](https://silverblue.fedoraproject.org/). The intention of these [Fedora CoreOS](https://coreos.fedoraproject.org/) and
[Silverblue](https://silverblue.fedoraproject.org/). The intention of these
systems is to discourage installation of software on the host, and instead systems is to discourage installation of software on the host, and instead
install software as (or in) containers. install software as (or in) containers — they mostly don't even have package
managers like DNF or YUM. This makes it difficult to set up a development
environment or install tools for debugging in the usual way.
However, this tool doesn't *require* using an OSTree based system — it Toolbox solves this problem by providing a fully mutable container within
works equally well if you're running e.g. existing Fedora Workstation or which one can install their favourite development and debugging tools, editors
Server, and that's a useful way to incrementally adopt containerization. and SDKs. For example, it's possible to do `yum install ansible` without
affecting the base operating system.
However, this tool doesn't *require* using an OSTree based system. It works
equally well on Fedora Workstation and Server, and that's a useful way to
incrementally adopt containerization.
The toolbox environment is based on an [OCI](https://www.opencontainers.org/) The toolbox environment is based on an [OCI](https://www.opencontainers.org/)
image. On Fedora this is the `fedora-toolbox` image. This image is then image. On Fedora this is the `fedora-toolbox` image. This image is used to
customized for the current user to create a toolbox container that seamlessly create a toolbox container that seamlessly integrates with the rest of the
integrates with the rest of the operating system. operating system by providing access to the user's home directory, the Wayland
and X11 sockets, networking (including Avahi), removable devices (like USB
sticks), systemd journal, SSH agent, D-Bus, ulimits, /dev and the udev
database, etc..
## Installation
Toolbox is installed by default on Fedora Silverblue. On other operating
systems it's just a matter of installing the `toolbox` package.
## Usage ## Usage
### Create your toolbox container: ### Create your toolbox container:
``` ```console
[user@hostname ~]$ toolbox create [user@hostname ~]$ toolbox create
Created container: fedora-toolbox-33
Enter with: toolbox enter
[user@hostname ~]$ [user@hostname ~]$
``` ```
This will create a container, and an image, called This will create a container called `fedora-toolbox-<version-id>`.
`fedora-toolbox-<your-username>:<version-id>` that's specifically customised
for your host user.
### Enter the toolbox: ### Enter the toolbox:
``` ```console
[user@hostname ~]$ toolbox enter [user@hostname ~]$ toolbox enter
🔹[user@toolbox ~]$ ⬢[user@toolbox ~]$
```
### Remove a toolbox container:
```console
[user@hostname ~]$ toolbox rm fedora-toolbox-33
[user@hostname ~]$
```
## Dependencies and Building
Toolbox requires at least Podman 1.4.0 to work, and uses the Meson build
system.
The following dependencies are required to build it:
- meson
- go-md2man
- systemd
- go
- ninja
The following dependencies enable various optional features:
- bash-completion
It can be built and installed as any other typical Meson-based project:
```console
[user@hostname toolbox]$ meson -Dprofile_dir=/etc/profile.d builddir
[user@hostname toolbox]$ ninja -C builddir
[user@hostname toolbox]$ sudo ninja -C builddir install
```
Toolbox is written in Go. Consult the
[src/go.mod](https://github.com/containers/toolbox/blob/main/src/go.mod) file
for a full list of all the Go dependencies.
By default, Toolbox uses Go modules and all the required Go packages are
automatically downloaded as part of the build. There's no need to worry about
the Go dependencies, unless the build environment doesn't have network access
or any such peculiarities.
## Distro support
By default, Toolbox creates the container using an
[OCI](https://www.opencontainers.org/) image called
`<ID>-toolbox:<VERSION-ID>`, where `<ID>` and `<VERSION-ID>` are taken from the
host's `/usr/lib/os-release`. For example, the default image on a Fedora 33
host would be `fedora-toolbox:33`.
This default can be overridden by the `--image` option in `toolbox create`,
but operating system distributors should provide an adequately configured
default image to ensure a smooth user experience.
## Image requirements
Toolbox customizes newly created containers in a certain way. This requires
certain tools and paths to be present and have certain characteristics inside
the OCI image.
Tools:
* `getent(1)`
* `id(1)`
* `ln(1)`
* `mkdir(1)`: for hosts where `/home` is a symbolic link to `/var/home`
* `passwd(1)`
* `readlink(1)`
* `rm(1)`
* `rmdir(1)`: for hosts where `/home` is a symbolic link to `/var/home`
* `sleep(1)`
* `test(1)`
* `touch(1)`
* `unlink(1)`
* `useradd(8)`
* `usermod(8)`
Paths:
* `/etc/host.conf`: optional, if present not a bind mount
* `/etc/hosts`: optional, if present not a bind mount
* `/etc/krb5.conf.d`: directory, not a bind mount
* `/etc/localtime`: optional, if present not a bind mount
* `/etc/machine-id`: optional, not a bind mount
* `/etc/resolv.conf`: optional, if present not a bind mount
* `/etc/timezone`: optional, if present not a bind mount
Toolbox enables `sudo(8)` access inside containers. The following is necessary
for that to work:
* The image should have `sudo(8)` enabled for users belonging to either the
`sudo` or `wheel` groups, and the group itself should exist. File an
[issue](https://github.com/containers/toolbox/issues/new) if you really need
support for a different group. However, it's preferable to keep this list as
short as possible.
* The image should allow empty passwords for `sudo(8)`. This can be achieved
by either adding the `nullok` option to the `PAM(8)` configuration, or by
add the `NOPASSWD` tag to the `sudoers(5)` configuration.
Since Toolbox only works with OCI images that fulfill certain requirements,
it will refuse images that aren't tagged with
`com.github.containers.toolbox="true"` and
`com.github.debarshiray.toolbox="true"` labels. These labels are meant to be
used by the maintainer of the image to indicate that they have read this
document and tested that the image works with Toolbox. You can use the
following snippet in a Dockerfile for this:
```Dockerfile
LABEL com.github.containers.toolbox="true" \
com.github.debarshiray.toolbox="true"
``` ```

View file

@ -1,4 +1,5 @@
bash-completion bash-completion
bc
bzip2 bzip2
diffutils diffutils
dnf-plugins-core dnf-plugins-core
@ -10,6 +11,7 @@ gnupg
gnupg2-smime gnupg2-smime
gvfs-client gvfs-client
hostname hostname
iproute
iputils iputils
jwhois jwhois
keyutils keyutils
@ -18,7 +20,10 @@ less
lsof lsof
man-db man-db
man-pages man-pages
mlocate
mtr mtr
nano-default-editor
nss-mdns
openssh-clients openssh-clients
passwd passwd
pigz pigz
@ -35,5 +40,6 @@ vte-profile
wget wget
which which
words words
xorg-x11-xauth
xz xz
zip zip