|
||
---|---|---|
.. | ||
.bash_aliases | ||
Dockerfile | ||
entrypoint.sh | ||
interactive_demo.gif | ||
README.md |
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
Clear the named volume containing the cargo cache
docker volume rm redox-"$(id -u)-$(id -g)"-cargo \
redox-"$(id -u)-$(id -g)"-rustup