| name: "android-build-sandbox" |
| description: "Sandboxed Android Platform Build." |
| description: "No network access and a limited access to local host resources." |
| |
| # All configuration options are described in |
| # https://github.com/google/nsjail/blob/master/config.proto |
| |
| # Run once then exit |
| mode: ONCE |
| |
| # No time limit |
| time_limit: 0 |
| |
| # Limits memory usage |
| rlimit_as_type: SOFT |
| # Maximum size of core dump files |
| rlimit_core_type: SOFT |
| # Limits use of CPU time |
| rlimit_cpu_type: SOFT |
| # Maximum file size |
| rlimit_fsize_type: SOFT |
| # Maximum number of file descriptors opened |
| rlimit_nofile_type: SOFT |
| # Maximum stack size |
| rlimit_stack_type: SOFT |
| # Maximum number of threads |
| rlimit_nproc_type: SOFT |
| |
| # Allow terminal control |
| # This let's users cancel jobs with CTRL-C |
| # without exiting the jail |
| skip_setsid: true |
| |
| # Below are all the host paths that shall be mounted |
| # to the sandbox |
| |
| # Mount proc as read/write. |
| mount { |
| dst: "/proc" |
| fstype: "proc" |
| rw: true |
| } |
| |
| # The user must mount the source to /src using --bindmount |
| # It will be set as the initial working directory |
| cwd: "/src" |
| |
| # The sandbox User ID was chosen arbitrarily |
| uidmap { |
| inside_id: "999999" |
| outside_id: "" |
| count: 1 |
| } |
| |
| # The sandbox Group ID was chosen arbitrarily |
| gidmap { |
| inside_id: "65534" |
| outside_id: "" |
| count: 1 |
| } |
| |
| # By default nsjail does not propagate the environment into the jail. We need |
| # the path to be set up. There are a few ways to solve this problem, but to |
| # avoid an undocumented dependency we are explict about the path we inject. |
| envar: "PATH=/usr/bin:/usr/sbin:/bin:/sbin" |
| |
| # Some tools in the build toolchain expect a $HOME to be set |
| # Point $HOME to /tmp in case the toolchain needs to write something out there |
| envar: "HOME=/tmp" |
| mount { |
| dst: "/tmp" |
| fstype: "tmpfs" |
| rw: true |
| is_bind: false |
| } |
| |
| # Some tools need /dev/shm to created a named semaphore. Use a new tmpfs to |
| # limit access to the external environment. |
| mount { |
| dst: "/dev/shm" |
| fstype: "tmpfs" |
| rw: true |
| is_bind: false |
| } |
| |
| # Map the working User ID to a username |
| # Some tools like Java need a valid username |
| mount { |
| src_content: "nobody:x:999999:65534:nobody:/tmp:/bin/bash" |
| dst: "/etc/passwd" |
| mandatory: false |
| } |
| |
| # Define default group |
| mount { |
| src_content: "nogroup::65534:nogroup" |
| dst: "/etc/group" |
| mandatory: false |
| } |
| |
| # Empty mtab file needed for some build scripts that check for images being mounted |
| mount { |
| src_content: "\n" |
| dst: "/etc/mtab" |
| mandatory: false |
| } |
| |
| # Explicitly mount required device file nodes |
| # |
| # This will enable a chroot based NsJail sandbox. A chroot does not provide |
| # device file nodes. So just mount the required device file nodes directly |
| # from the host. |
| # |
| # Note that this has no effect in a docker container, since in that case |
| # NsJail will just mount the container device nodes. When we use NsJail |
| # in a docker container we mount the full file system root. So the container |
| # device nodes were already mounted in the NsJail. |
| |
| # Some tools (like llvm-link) look for file descriptors in /dev/fd |
| mount { |
| src: "/proc/self/fd" |
| dst: "/dev/fd" |
| is_symlink: true |
| mandatory: false |
| } |
| |
| # /dev/null is a very commonly used for silencing output |
| mount { |
| src: "/dev/null" |
| dst: "/dev/null" |
| rw: true |
| is_bind: true |
| } |
| |
| # /dev/urandom used during the creation of system.img |
| mount { |
| src: "/dev/urandom" |
| dst: "/dev/urandom" |
| rw: true |
| is_bind: true |
| } |
| |
| # /dev/random used by test scripts |
| mount { |
| src: "/dev/random" |
| dst: "/dev/random" |
| rw: true |
| is_bind: true |
| } |
| |
| # /dev/zero is required to make vendor-qemu.img |
| mount { |
| src: "/dev/zero" |
| dst: "/dev/zero" |
| is_bind: true |
| } |