runc/spec.go

126 lines
2.5 KiB
Go
Raw Normal View History

package main
import (
"encoding/json"
"fmt"
"runtime"
"github.com/codegangsta/cli"
)
const cpuQuotaMultiplyer = 100000
type Mount struct {
Type string `json:"type"`
Source string `json:"source"`
Destination string `json:"destination"`
Options string `json:"options"`
}
type Process struct {
TTY bool `json:"tty"`
User string `json:"user"`
Args []string `json:"args"`
Env []string `json:"env"`
Cwd string `json:"cwd"`
}
type Root struct {
Path string `json:"path"`
Readonly bool `json:"readonly"`
}
type Namespace struct {
Type string `json:"type"`
Path string `json:"path,omitempty"`
}
type Platform struct {
OS string `json:"os"`
Arch string `json:"arch"`
}
type PortableSpec struct {
Version string `json:"version"`
Platform Platform `json:"platform"`
Processes []*Process `json:"processes"`
Root Root `json:"root"`
Hostname string `json:"hostname"`
Mounts []Mount `json:"mounts"`
}
var specCommand = cli.Command{
Name: "spec",
Usage: "create a new specification file",
Action: func(context *cli.Context) {
spec := PortableSpec{
Version: version,
Platform: Platform{
OS: runtime.GOOS,
Arch: runtime.GOARCH,
},
Root: Root{
Path: "rootfs",
Readonly: true,
},
Processes: []*Process{
{
TTY: true,
User: "daemon",
Args: []string{
"sh",
},
Env: []string{
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"TERM=xterm",
},
},
},
Hostname: "shell",
Mounts: []Mount{
{
Type: "proc",
Source: "proc",
Destination: "/proc",
Options: "",
},
{
Type: "tmpfs",
Source: "tmpfs",
Destination: "/dev",
Options: "nosuid,strictatime,mode=755,size=65536k",
},
{
Type: "devpts",
Source: "devpts",
Destination: "/dev/pts",
Options: "nosuid,noexec,newinstance,ptmxmode=0666,mode=0620,gid=5",
},
{
Type: "tmpfs",
Source: "shm",
Destination: "/dev/shm",
Options: "nosuid,noexec,nodev,mode=1777,size=65536k",
},
{
Type: "mqueue",
Source: "mqueue",
Destination: "/dev/mqueue",
Options: "nosuid,noexec,nodev",
},
{
Type: "sysfs",
Source: "sysfs",
Destination: "/sys",
Options: "nosuid,noexec,nodev",
},
},
}
data, err := json.MarshalIndent(&spec, "", "\t")
if err != nil {
fatal(err)
}
fmt.Printf("%s", data)
},
}