Update containerd to 8a7e17ef96
				
					
				
			Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
		
							
								
								
									
										13
									
								
								vendor/github.com/opencontainers/runc/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/opencontainers/runc/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -41,8 +41,18 @@ make
 | 
			
		||||
sudo make install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can also use `go get` to install to your `GOPATH`, assuming that you have a `github.com` parent folder already created under `src`:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
go get github.com/opencontainers/runc
 | 
			
		||||
cd $GOPATH/src/github.com/opencontainers/runc
 | 
			
		||||
make
 | 
			
		||||
sudo make install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
`runc` will be installed to `/usr/local/sbin/runc` on your system.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Build Tags
 | 
			
		||||
 | 
			
		||||
`runc` supports optional build tags for compiling support of various features.
 | 
			
		||||
@@ -204,8 +214,7 @@ runc list
 | 
			
		||||
runc delete mycontainerid
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This adds more complexity but allows higher level systems to manage runc and provides points in the containers creation to setup various settings after the container has created and/or before it is deleted.
 | 
			
		||||
This is commonly used to setup the container's network stack after `create` but before `start` where the user's defined process will be running.
 | 
			
		||||
This allows higher level systems to augment the containers creation logic with setup of various settings after the container is created and/or before it is deleted. For example, the container's network stack is commonly set up after `create` but before `start`.
 | 
			
		||||
 | 
			
		||||
#### Rootless containers
 | 
			
		||||
`runc` has the ability to run containers without root privileges. This is called `rootless`. You need to pass some parameters to `runc` in order to run rootless containers. See below and compare with the previous version. Run the following commands as an ordinary user:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,84 +12,30 @@ var (
 | 
			
		||||
	ErrNoGroupEntries  = errors.New("no matching entries in group file")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func lookupUser(filter func(u User) bool) (User, error) {
 | 
			
		||||
	// Get operating system-specific passwd reader-closer.
 | 
			
		||||
	passwd, err := GetPasswd()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
	defer passwd.Close()
 | 
			
		||||
 | 
			
		||||
	// Get the users.
 | 
			
		||||
	users, err := ParsePasswdFilter(passwd, filter)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No user entries found.
 | 
			
		||||
	if len(users) == 0 {
 | 
			
		||||
		return User{}, ErrNoPasswdEntries
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Assume the first entry is the "correct" one.
 | 
			
		||||
	return users[0], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupUser looks up a user by their username in /etc/passwd. If the user
 | 
			
		||||
// cannot be found (or there is no /etc/passwd file on the filesystem), then
 | 
			
		||||
// LookupUser returns an error.
 | 
			
		||||
func LookupUser(username string) (User, error) {
 | 
			
		||||
	return lookupUser(func(u User) bool {
 | 
			
		||||
		return u.Name == username
 | 
			
		||||
	})
 | 
			
		||||
	return lookupUser(username)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupUid looks up a user by their user id in /etc/passwd. If the user cannot
 | 
			
		||||
// be found (or there is no /etc/passwd file on the filesystem), then LookupId
 | 
			
		||||
// returns an error.
 | 
			
		||||
func LookupUid(uid int) (User, error) {
 | 
			
		||||
	return lookupUser(func(u User) bool {
 | 
			
		||||
		return u.Uid == uid
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGroup(filter func(g Group) bool) (Group, error) {
 | 
			
		||||
	// Get operating system-specific group reader-closer.
 | 
			
		||||
	group, err := GetGroup()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
	defer group.Close()
 | 
			
		||||
 | 
			
		||||
	// Get the users.
 | 
			
		||||
	groups, err := ParseGroupFilter(group, filter)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No user entries found.
 | 
			
		||||
	if len(groups) == 0 {
 | 
			
		||||
		return Group{}, ErrNoGroupEntries
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Assume the first entry is the "correct" one.
 | 
			
		||||
	return groups[0], nil
 | 
			
		||||
	return lookupUid(uid)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupGroup looks up a group by its name in /etc/group. If the group cannot
 | 
			
		||||
// be found (or there is no /etc/group file on the filesystem), then LookupGroup
 | 
			
		||||
// returns an error.
 | 
			
		||||
func LookupGroup(groupname string) (Group, error) {
 | 
			
		||||
	return lookupGroup(func(g Group) bool {
 | 
			
		||||
		return g.Name == groupname
 | 
			
		||||
	})
 | 
			
		||||
	return lookupGroup(groupname)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupGid looks up a group by its group id in /etc/group. If the group cannot
 | 
			
		||||
// be found (or there is no /etc/group file on the filesystem), then LookupGid
 | 
			
		||||
// returns an error.
 | 
			
		||||
func LookupGid(gid int) (Group, error) {
 | 
			
		||||
	return lookupGroup(func(g Group) bool {
 | 
			
		||||
		return g.Gid == gid
 | 
			
		||||
	})
 | 
			
		||||
	return lookupGid(gid)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										70
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,6 +15,76 @@ const (
 | 
			
		||||
	unixGroupPath  = "/etc/group"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func lookupUser(username string) (User, error) {
 | 
			
		||||
	return lookupUserFunc(func(u User) bool {
 | 
			
		||||
		return u.Name == username
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupUid(uid int) (User, error) {
 | 
			
		||||
	return lookupUserFunc(func(u User) bool {
 | 
			
		||||
		return u.Uid == uid
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupUserFunc(filter func(u User) bool) (User, error) {
 | 
			
		||||
	// Get operating system-specific passwd reader-closer.
 | 
			
		||||
	passwd, err := GetPasswd()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
	defer passwd.Close()
 | 
			
		||||
 | 
			
		||||
	// Get the users.
 | 
			
		||||
	users, err := ParsePasswdFilter(passwd, filter)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No user entries found.
 | 
			
		||||
	if len(users) == 0 {
 | 
			
		||||
		return User{}, ErrNoPasswdEntries
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Assume the first entry is the "correct" one.
 | 
			
		||||
	return users[0], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGroup(groupname string) (Group, error) {
 | 
			
		||||
	return lookupGroupFunc(func(g Group) bool {
 | 
			
		||||
		return g.Name == groupname
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGid(gid int) (Group, error) {
 | 
			
		||||
	return lookupGroupFunc(func(g Group) bool {
 | 
			
		||||
		return g.Gid == gid
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGroupFunc(filter func(g Group) bool) (Group, error) {
 | 
			
		||||
	// Get operating system-specific group reader-closer.
 | 
			
		||||
	group, err := GetGroup()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
	defer group.Close()
 | 
			
		||||
 | 
			
		||||
	// Get the users.
 | 
			
		||||
	groups, err := ParseGroupFilter(group, filter)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No user entries found.
 | 
			
		||||
	if len(groups) == 0 {
 | 
			
		||||
		return Group{}, ErrNoGroupEntries
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Assume the first entry is the "correct" one.
 | 
			
		||||
	return groups[0], nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetPasswdPath() (string, error) {
 | 
			
		||||
	return unixPasswdPath, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/lookup_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
// +build windows
 | 
			
		||||
 | 
			
		||||
package user
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os/user"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func lookupUser(username string) (User, error) {
 | 
			
		||||
	u, err := user.Lookup(username)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return userFromOS(u)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupUid(uid int) (User, error) {
 | 
			
		||||
	u, err := user.LookupId(fmt.Sprintf("%d", uid))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return User{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return userFromOS(u)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGroup(groupname string) (Group, error) {
 | 
			
		||||
	g, err := user.LookupGroup(groupname)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return groupFromOS(g)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func lookupGid(gid int) (Group, error) {
 | 
			
		||||
	g, err := user.LookupGroupId(fmt.Sprintf("%d", gid))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Group{}, err
 | 
			
		||||
	}
 | 
			
		||||
	return groupFromOS(g)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										40
									
								
								vendor/github.com/opencontainers/runc/libcontainer/user/user.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -5,6 +5,7 @@ import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/user"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
@@ -28,6 +29,28 @@ type User struct {
 | 
			
		||||
	Shell string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// userFromOS converts an os/user.(*User) to local User
 | 
			
		||||
//
 | 
			
		||||
// (This does not include Pass, Shell or Gecos)
 | 
			
		||||
func userFromOS(u *user.User) (User, error) {
 | 
			
		||||
	newUser := User{
 | 
			
		||||
		Name: u.Username,
 | 
			
		||||
		Home: u.HomeDir,
 | 
			
		||||
	}
 | 
			
		||||
	id, err := strconv.Atoi(u.Uid)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return newUser, err
 | 
			
		||||
	}
 | 
			
		||||
	newUser.Uid = id
 | 
			
		||||
 | 
			
		||||
	id, err = strconv.Atoi(u.Gid)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return newUser, err
 | 
			
		||||
	}
 | 
			
		||||
	newUser.Gid = id
 | 
			
		||||
	return newUser, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Group struct {
 | 
			
		||||
	Name string
 | 
			
		||||
	Pass string
 | 
			
		||||
@@ -35,6 +58,23 @@ type Group struct {
 | 
			
		||||
	List []string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// groupFromOS converts an os/user.(*Group) to local Group
 | 
			
		||||
//
 | 
			
		||||
// (This does not include Pass, Shell or Gecos)
 | 
			
		||||
func groupFromOS(g *user.Group) (Group, error) {
 | 
			
		||||
	newGroup := Group{
 | 
			
		||||
		Name: g.Name,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	id, err := strconv.Atoi(g.Gid)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return newGroup, err
 | 
			
		||||
	}
 | 
			
		||||
	newGroup.Gid = id
 | 
			
		||||
 | 
			
		||||
	return newGroup, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func parseLine(line string, v ...interface{}) {
 | 
			
		||||
	if line == "" {
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/opencontainers/runc/vendor.conf
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/opencontainers/runc/vendor.conf
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,5 +21,5 @@ github.com/urfave/cli d53eb991652b1d438abdd34ce4bfa3ef1539108e
 | 
			
		||||
golang.org/x/sys 7ddbeae9ae08c6a06a59597f0c9edbc5ff2444ce https://github.com/golang/sys
 | 
			
		||||
 | 
			
		||||
# console dependencies
 | 
			
		||||
github.com/containerd/console 84eeaae905fa414d03e07bcd6c8d3f19e7cf180e
 | 
			
		||||
github.com/containerd/console 2748ece16665b45a47f884001d5831ec79703880
 | 
			
		||||
github.com/pkg/errors v0.8.0
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user