redox/docker
Andre Richter 114de48b20
docker: Add interactive sessions
Provide a nice interface when using the container interactively.
2017-09-02 22:17:17 +02:00
..
.bash_aliases docker: Add interactive sessions 2017-09-02 22:17:17 +02:00
Dockerfile docker: Add interactive sessions 2017-09-02 22:17:17 +02:00
entrypoint.sh docker: Switch to official Rust image as base and rework 2017-09-02 21:51:46 +02:00
interactive_demo.gif docker: Add interactive sessions 2017-09-02 22:17:17 +02:00
README.md docker: Add interactive sessions 2017-09-02 22:17:17 +02:00

Building Redox using a Docker image with the pre-built toolchain

All you need is git, make, qemu, fuse and docker. The method requires a non-privileged user able to run the docker command, which is usually achieved by adding the user to the docker group.

It's a four-steps process with variations depending on the platform.

Get the sources

git clone https://github.com/redox-os/redox.git ; cd redox

Build the container

This will prepare a docker image with the required dependencies and the pre-built toolchain. As long as you rely on this particular dependencies and toolchain versions, you don't need to rebuild the container.

docker build -t redox docker/

Upate the source tree

Note: if you use the container on a different host or with a different user, get the sources first.

git pull --rebase --recurse-submodules && git submodule sync \
    && git submodule update --recursive --init

Run the container to build Redox

docker run --cap-add MKNOD --cap-add SYS_ADMIN --device /dev/fuse \
    -e LOCAL_UID="$(id -u)" -e LOCAL_GID="$(id -g)" \
    -v redox-"$(id -u)-$(id -g)"-cargo:/usr/local/cargo \
    -v redox-"$(id -u)-$(id -g)"-rustup:/usr/local/rustup \
    -v "$(pwd):$(pwd)" -w "$(pwd)" --rm redox make fetch all

Linux with security modules

Add the following options depending on the security modules activated on your system:

--security-opt label=disable         // disable SELinux
--security-opt seccomp=unconfined    // disable seccomp
--security-opt apparmor=unconfined   // disable AppArmor

Ex.: for a SELinux only system such as Fedora or CentOS

docker run --cap-add MKNOD --cap-add SYS_ADMIN --device /dev/fuse \
    -e LOCAL_UID="$(id -u)" -e LOCAL_GID="$(id -g)" \
    --security-opt label=disable \
    -v redox-"$(id -u)-$(id -g)"-cargo:/usr/local/cargo \
    -v redox-"$(id -u)-$(id -g)"-rustup:/usr/local/rustup \
    -v "$(pwd):$(pwd)" -w "$(pwd)" --rm redox make fetch all

Run the container interactively

docker run --cap-add MKNOD --cap-add SYS_ADMIN --device /dev/fuse \
    -e LOCAL_UID="$(id -u)" -e LOCAL_GID="$(id -g)" \
    -v redox-"$(id -u)-$(id -g)"-cargo:/usr/local/cargo \
    -v redox-"$(id -u)-$(id -g)"-rustup:/usr/local/rustup \
    -v "$(pwd):$(pwd)" -w "$(pwd)" --rm -it redox

Demo

Image of Usage

Clear the named volume containing the cargo cache

docker volume rm redox-"$(id -u)-$(id -g)"-cargo \
    redox-"$(id -u)-$(id -g)"-rustup