| # Copyright 2022 The Go Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style | |
| # license that can be found in the LICENSE file. | |
| # | |
| # This file is JSON with comments. | |
| # A comment is any line whose first non-whitespace character is #. | |
| # A sed script in the Makefile and in deploy/worker.yaml removes | |
| # the comments to produce valid JSON. | |
| # | |
| # This is a bundle config file for runsc, as specified by the | |
| # Open Container Initiative: see | |
| # https://github.com/opencontainers/runtime-spec/blob/main/config.md. | |
| # Most of this file is generated by "runsc spec"; see | |
| # https://gvisor.dev/docs/user_guide/quick_start/oci. | |
| # The few important tweaks are commented. | |
| { | |
| "ociVersion": "1.0.0", | |
| "process": { | |
| "user": { | |
| "uid": 0, | |
| "gid": 0 | |
| }, | |
| "args": [ | |
| # This is the command that "runsc run" will execute in the sandbox. | |
| # See the internal/sandbox package. | |
| # runsc will pipe the stdout and stderr to its caller, | |
| # and will exit with the same return code. | |
| "/runner" | |
| ], | |
| "env": [ | |
| "PATH=/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", | |
| "TERM=xterm" | |
| ], | |
| "cwd": "/", | |
| "capabilities": { | |
| "bounding": [ | |
| "CAP_AUDIT_WRITE", | |
| "CAP_KILL", | |
| "CAP_NET_BIND_SERVICE" | |
| ], | |
| "effective": [ | |
| "CAP_AUDIT_WRITE", | |
| "CAP_KILL", | |
| "CAP_NET_BIND_SERVICE" | |
| ], | |
| "inheritable": [ | |
| "CAP_AUDIT_WRITE", | |
| "CAP_KILL", | |
| "CAP_NET_BIND_SERVICE" | |
| ], | |
| "permitted": [ | |
| "CAP_AUDIT_WRITE", | |
| "CAP_KILL", | |
| "CAP_NET_BIND_SERVICE" | |
| ] | |
| }, | |
| "rlimits": [ | |
| { | |
| "type": "RLIMIT_NOFILE", | |
| "hard": 1048576, | |
| "soft": 1048576 | |
| } | |
| ] | |
| }, | |
| "root": { | |
| "path": "rootfs", | |
| # The filesystem must be writeable so | |
| # the go command can write to its caches. | |
| "readonly": false | |
| }, | |
| "hostname": "runsc", | |
| "mounts": [ | |
| { | |
| "destination": "/proc", | |
| "type": "proc", | |
| "source": "proc" | |
| }, | |
| { | |
| "destination": "/dev", | |
| "type": "tmpfs", | |
| "source": "tmpfs" | |
| }, | |
| { | |
| "destination": "/sys", | |
| "type": "sysfs", | |
| "source": "sysfs", | |
| "options": [ | |
| "nosuid", | |
| "noexec", | |
| "nodev", | |
| "ro" | |
| ] | |
| }, | |
| # Bind mounts. These let us map directories inside the sandbox | |
| # (the destination) to directories outside (the source). | |
| # If the source doesn't exist, you'll get the (obscure) error | |
| # "cannot read client sync file". | |
| # If the destination already exists, that's not an error, but the | |
| # files in that directory will be hidden to code running inside the | |
| # sandbox. | |
| { | |
| # Mount /app/binaries inside the sandbox to | |
| # the same directory outside. | |
| "destination": "/app/binaries", | |
| "type": "none", | |
| "source": "/app/binaries", | |
| "options": ["bind"] | |
| }, | |
| { | |
| # Mount /app/go-vulndb inside the sandbox to | |
| # the same directory outside. | |
| "destination": "/app/go-vulndb", | |
| "type": "none", | |
| "source": "/app/go-vulndb", | |
| "options": ["bind"] | |
| }, | |
| { | |
| # Mount /tmp/modules inside the sandbox to | |
| # the same directory outside. | |
| "destination": "/tmp/modules", | |
| "type": "none", | |
| "source": "/tmp/modules", | |
| "options": ["bind"] | |
| } | |
| ], | |
| "linux": { | |
| "namespaces": [ | |
| { | |
| "type": "pid" | |
| }, | |
| { | |
| "type": "network" | |
| }, | |
| { | |
| "type": "ipc" | |
| }, | |
| { | |
| "type": "uts" | |
| }, | |
| { | |
| "type": "mount" | |
| } | |
| ] | |
| } | |
| } |