123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package runc
- import (
- "fmt"
- "os"
- "strings"
- "github.com/Sirupsen/logrus"
- "github.com/codegangsta/cli"
- "github.com/opencontainers/runtime-spec/specs-go"
- )
- // gitCommit will be the hash that the binary was built from
- // and will be populated by the Makefile
- var gitCommit = ""
- const (
- version = "0.1.1"
- specConfig = "config.json"
- usage = `Open Container Initiative runtime
-
- runc is a command line client for running applications packaged according to
- the Open Container Format (OCF) and is a compliant implementation of the
- Open Container Initiative specification.
- runc integrates well with existing process supervisors to provide a production
- container runtime environment for applications. It can be used with your
- existing process monitoring tools and the container will be spawned as a
- direct child of the process supervisor.
- Containers are configured using bundles. A bundle for a container is a directory
- that includes a specification file named "` + specConfig + `" and a root filesystem.
- The root filesystem contains the contents of the container.
- To start a new instance of a container:
- # runc start [ -b bundle ] <container-id>
- Where "<container-id>" is your name for the instance of the container that you
- are starting. The name you provide for the container instance must be unique on
- your host. Providing the bundle directory using "-b" is optional. The default
- value for "bundle" is the current directory.`
- )
- func Main() {
- app := cli.NewApp()
- app.Name = "runc"
- app.Usage = usage
- v := []string{
- version,
- }
- if gitCommit != "" {
- v = append(v, fmt.Sprintf("commit: %s", gitCommit))
- }
- v = append(v, fmt.Sprintf("spec: %s", specs.Version))
- app.Version = strings.Join(v, "\n")
- app.Flags = []cli.Flag{
- cli.BoolFlag{
- Name: "debug",
- Usage: "enable debug output for logging",
- },
- cli.StringFlag{
- Name: "log",
- Value: "/dev/null",
- Usage: "set the log file path where internal debug information is written",
- },
- cli.StringFlag{
- Name: "log-format",
- Value: "text",
- Usage: "set the format used by logs ('text' (default), or 'json')",
- },
- cli.StringFlag{
- Name: "root",
- Value: "/run/runc",
- Usage: "root directory for storage of container state (this should be located in tmpfs)",
- },
- cli.StringFlag{
- Name: "criu",
- Value: "criu",
- Usage: "path to the criu binary used for checkpoint and restore",
- },
- cli.BoolFlag{
- Name: "systemd-cgroup",
- Usage: "enable systemd cgroup support, expects cgroupsPath to be of form \"slice:prefix:name\" for e.g. \"system.slice:runc:434234\"",
- },
- }
- app.Commands = []cli.Command{
- checkpointCommand,
- deleteCommand,
- eventsCommand,
- execCommand,
- initCommand,
- killCommand,
- listCommand,
- pauseCommand,
- restoreCommand,
- resumeCommand,
- specCommand,
- startCommand,
- stateCommand,
- }
- app.Before = func(context *cli.Context) error {
- if context.GlobalBool("debug") {
- logrus.SetLevel(logrus.DebugLevel)
- }
- if path := context.GlobalString("log"); path != "" {
- f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND|os.O_SYNC, 0666)
- if err != nil {
- return err
- }
- logrus.SetOutput(f)
- }
- switch context.GlobalString("log-format") {
- case "text":
- // retain logrus's default.
- case "json":
- logrus.SetFormatter(new(logrus.JSONFormatter))
- default:
- logrus.Fatalf("unknown log-format %q", context.GlobalString("log-format"))
- }
- return nil
- }
- if err := app.Run(os.Args); err != nil {
- fatal(err)
- }
- }
|