17 Commits
Author SHA1 Message Date
Alexander CuevaandgVisor bot 1a8cde909e Add the profile command to runsc, with subcommands cpu and heap.
This change registers the profile command under the debug command group in the
runsc CLI.

This will be followed up with other profiling sub-command implementations.

PiperOrigin-RevId: 974750514
2026-09-01 15:51:43 -07:00
Etienne Perot 62eb61a0e6 Move sentry (runsc boot) to its own go_binary.
`runsc boot` still works, so single-file installations continue to work
for now.

No statistically significant change in startup latency, but unlocks the
ability to do per-platform PGO.
2026-07-31 13:02:53 -07:00
Etienne Perot 0db57431b2 Enforce release matching in sidecar binaries.
This ensures that sidecars must be installed from the same release.

See issue #13718.
2026-07-22 16:28:21 -07:00
gVisor bot 2041aea623 Merge pull request #13790 from EtiennePerot:runsc-install-download
PiperOrigin-RevId: 952319807
2026-07-22 14:07:49 -07:00
Etienne Perot 62d2274da0 runsc: add gvisorbinaries package to mediate embedded sidecar binaries
This change is a no-op that makes the transition to on-disk sidecar binaries
easier later. See rationale in gvisor.dev/issue/13718.
2026-07-15 19:20:20 -07:00
Xin ZhongandgVisor bot a379968976 Add a "runsc read" command to read files from a sandbox.
This change introduces a new "runsc read" command that allows users to read the
contents of a file within a running sandbox. The command takes a container ID,
a file path, and an optional size limit. The file content is streamed from the
sentry to runsc and printed to standard output. A new Fs.Read RPC is added to
the sentry control server to handle the file reading.

PiperOrigin-RevId: 944745364
2026-07-08 15:53:06 -07:00
Parth SarthiandgVisor bot 3c25051da9 Causeway: Added alias support and bwrap cli parsing.
- Added support for aliases.
- Added bwrap alias.
- Added basic flags for bwrap.

PiperOrigin-RevId: 925670886
2026-06-02 17:28:05 -07:00
Zach KoopmansandgVisor bot 5a0d2f6ece Internal change
PiperOrigin-RevId: 919856743
2026-05-22 14:19:40 -07:00
Rex RenandgVisor bot 73be0ab38d Add "runsc features" command.
This new command outputs a JSON object describing the features supported by
the runsc runtime.

The output confirms to the OCI spec:
https://github.com/opencontainers/runtime-spec/blob/main/features.md

Fixes #11648

PiperOrigin-RevId: 912218436
2026-05-07 16:36:34 -07:00
Lucas ManningandgVisor bot 252d886f8b Create the sandboxexec subcommand.
PiperOrigin-RevId: 908266872
2026-04-30 10:59:06 -07:00
Fabricio VoznikaandgVisor bot a2a657b7f5 Internal change
PiperOrigin-RevId: 904661693
2026-04-23 15:22:48 -07:00
Jamie LiuandgVisor bot 33513684bc Implement filesystem-only checkpointing.
- `runsc fscheckpoint` saves a filesystem checkpoint, analogous to `runsc
    checkpoint`. `-direct` and `-leave-running` flags are supported for
    compatibility with `runsc checkpoint`. `-save-restore-exec*` is currently
    not supported due to lack of a use case. `-compression` support is not
    planned (specific files in filesystem checkpoint images may use compression
    as appropriate, but this is an implementation detail).
    `-exclude-committed-zero-pages` is inapplicable.

  - `runsc create -fs-restore-image-path` restores a filesystem checkpoint. The
    `-fs-restore-direct` flag has the same effect as `runsc restore -direct`.
    The behavior of `runsc restore -background` is always in effect for
    filesystem checkpoints.

PiperOrigin-RevId: 885914969
2026-03-18 19:44:48 -07:00
Ayush RanjanandgVisor bot aa4ef9229a Fix runsc log and profile file handling.
There were several issues with how runsc log and profile files were generated:
- Variables like "%ID" in flag-specified file paths were substituted by the
  runsc shim in `pkg/shim/v1/runsccmd/utils.go:replaceID()`. Consequently, runsc
  commands that did *not* invoke the shim missed this logic. Notably, Docker
  invokes runsc via `runc shim`, so Docker use cases were missing this
  feature.
- Variable support across flags was inconsistent. For example, the --debug-log
  flag supported variables like ID, TIMESTAMP, COMMAND, and TEST, while
  --profile-cpu supported ID, TIMESTAMP, YYYY, MM, etc.
- "%ID%" was intended to be substituted with the sandbox ID, but the shim was
  incorrectly substituting it with the container ID.
- Variables specified via flag annotations were not substituted because the
  shim did not process flag annotations.
- `specutils.ReadSpec() => ReadSpecFromFile() => fixSpec()` had the side effect
  of modifying the `Config` object itself with annotation-based flags, rather
  than just fixing the spec.
- Flag annotations were applied to Config for only 6 runsc commands (via
  `fixSpec()`): boot, gofer, create, restore, run, and start. Other commands
  did not see flags set via annotations.
- When using flag annotations to generate debug logs, only boot and gofer logs
  were generated. This is because the debug file was created by the runsc CLI,
  but flag annotations were processed later by the sub-command implementation.
  Only `boot` and `gofer` had the correct configuration because `runsc create`
  had already fixed its config by the time it invoked them.
- The parent directories of the configured file paths is created via
  os.MkdirAll() only for a subset of the flags. This is inconsistent.

This change fixes all above-mentioned issues:
- Moves all variable substitution logic from the shim to the runsc CLI.
- Centralizes the logic for opening and formatting paths for log and profile
  files within `specutils`.
- Introduces `specutils.LogFileOpts` to standardize variable substitution in
  log and profile paths.
- Refactors profile file handling to use `DonateProfileFDs`, leveraging
  `LogFileOpts` and `DonateLogFile` for consistent path substitution.
- Extracts `specutils.FixConfig()` from `specutils.fixSpec()` to only call it
  when necessary. This prevents side effects; `fixSpec()` now only fixes the OCI
  spec, and `FixConfig()` only fixes `config.Config`. The config is now fixed
  uniformly for all commands via the runsc CLI.
- Standarizes the variables supported across all file path flags:
  - `%TIMESTAMP%`: Replaced with the start-up time of the command with format
    `<yyyymmdd-hhmmss.uuuuuu>`.
  - `%COMMAND%`: Replaced with the command name.
  - `%TEST%`: Replaced with the value of the environment variable named
    `-TESTONLY-test-name-env`. The value is fetched from container spec.
  - `%ID%`: Replaced with the sandbox ID.
  - `%CID%`: Replaced with the container ID.
- Open all log files consistently with mode 0644 and create intermediate
  directories with mode 0755.

To facilitate these improvements, the `subcommands.Command` interface has been
extended via `util.SubCommand` to include `FetchSpec(conf, flatSet)`.
- All runsc sub-commands must implement this interface.
- `FetchSpec` extracts the container ID from the command line arguments and
  ensures the OCI spec is loaded (either from the bundle or container) for
  configuration processing.
- Caching is added to all sub-commands to reuse the work done by `FetchSpec`
  during `Execute()`.

Note: `runsc tar` and `runsc trace` implement `FetchSpec` as a no-op. These
commands have nested sub-commands that make spec pre-fetching complex. Variable
substitution is currently not supported for their file path flags.
PiperOrigin-RevId: 877758843
2026-03-02 22:59:55 -08:00
Ayush RanjanandgVisor bot b15583d417 runsc: Refactor cli.Run to accept commands map
Refactors cli.Run to accept a map of commands and a list of help topics
instead of using a callback function which itself used a callback function.
This simplifies the signature and makes it more readable.

PiperOrigin-RevId: 867124676
2026-02-08 01:21:51 -08:00
Kevin Mingtarja 645953d947 runsc: add update command
This change enables updating resource constraints of running containers. It is the runsc equivalent of runc update.
2026-01-23 23:01:08 -08:00
Jamie LiuandgVisor bot e3d698f392 runsc: implement -h and -help flags
This is consistent with runc; see containers/podman#27528.

Before this change:

```
$ ./runsc --help
Usage of ./runsc:
$ echo $?
2
$ ./runsc ps --help
<container-id> [ps options]  -format="table": output format. Select one of: table or json (default: table)
$ echo $?
2
```

After this change:

```
$ ./runsc --help
Usage: runsc <flags> <subcommand> <subcommand args>

runsc is the gVisor container runtime.

Functionality is provided by subcommands. For help with a specific subcommand,
use "runsc help <subcommand>".

Subcommands:
        checkpoint       checkpoint current state of container (experimental)
        create           create a secure container
        delete           delete resources held by a container
        do               Simplistic way to execute a command inside the sandbox. It's to be used for testing only.
        events           display container events such as OOM notifications, cpu, memory, and IO usage statistics
        exec             execute new process inside the container
        flags            describe all known top-level flags
        help             Print help documentation.
        kill             sends a signal to the container
        list             list containers started by runsc with the given root
        pause            pause suspends all processes in a container
        port-forward     port forward to a secure container
        ps               ps displays the processes running inside a container
        restore          restore a saved state of container (experimental)
        resume           Resume unpauses a paused container
        run              create and run a secure container
        spec             create a new OCI bundle specification file
        start            start a secure container
        state            get the state of a container
        tar              creates tar archives from container filesystems
        wait             wait on a process inside a container

Subcommands for debug:
        debug            shows a variety of debug information
        read-control     read a cgroups control value inside the container
        statefile        shows information about a statefile
        symbolize        Convert synthetic instruction pointers from kcov into positions in the runsc source code. Only used when Go coverage is enabled.
        usage            Usage shows application memory usage across various categories in bytes.
        write-control    write a cgroups control value inside the container

Subcommands for helpers:
        cpu-features     list CPU features supported on current machine
        install          adds a runtime to docker daemon configuration
        mitigate         mitigate mitigates the underlying system against side channel attacks
        nvproxy          shows information about nvproxy support
        trace            manages trace sessions for a given sandbox
        uninstall        removes a runtime from docker daemon configuration

Subcommands for internal use only:
        boot             launch a sandbox process
        gofer            launch a gofer process that proxies access to container files
        umount           umount the specified directory lazily when one byte is read from sync-fd

Subcommands for metrics:
        export-metrics   export metric data for the sandbox
        metric-metadata  export metric metadata of metrics registered in this build, in text proto format
        metric-server    implements Prometheus metrics HTTP endpoint

Additional help topics (Use "runsc help <topic>" to see help on the topic):
        platforms        Print a list of available platforms.
        syscalls         Print compatibility information for syscalls.

Use "runsc flags" for a list of top-level flags
$ echo $?
0
$ ./runsc ps --help
<container-id> [ps options]  -format="table": output format. Select one of: table or json (default: table)
  -h=false: equivalent to the 'help' flag
  -help=false: show this message and exit
$ echo $?
0
```

PiperOrigin-RevId: 837251082
2025-11-26 14:08:18 -08:00
Jamie LiuandgVisor bot a98d603b51 Split off runsc/cli/maincli from runsc/cli.
PiperOrigin-RevId: 814336311
2025-10-02 12:22:37 -07:00