mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 21:45:11 +00:00 
			
		
		
		
	Replace riddler with code that constructs config.json directly
Generated largely from the specified config; small parts taken from `docker image inspect`, such as the command line. Renamed some of the yaml keys to match the OCI spec rather than Docker Compose as we decided they are more readable, no more underscores. Add some extra functionality - tmpfs specification - fully general mount specification - no new privileges can be specified now For nostalgic reasons, using engine-api to talk to the docker cli as we only need an old API version, and it is nice and easy to vendor... Signed-off-by: Justin Cormack <justin.cormack@docker.com>
This commit is contained in:
		
							
								
								
									
										0
									
								
								vendor/github.com/docker/go-connections/sockets/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								vendor/github.com/docker/go-connections/sockets/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										81
									
								
								vendor/github.com/docker/go-connections/sockets/inmem_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								vendor/github.com/docker/go-connections/sockets/inmem_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"net" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| var errClosed = errors.New("use of closed network connection") | ||||
|  | ||||
| // InmemSocket implements net.Listener using in-memory only connections. | ||||
| type InmemSocket struct { | ||||
| 	chConn  chan net.Conn | ||||
| 	chClose chan struct{} | ||||
| 	addr    string | ||||
| 	mu      sync.Mutex | ||||
| } | ||||
|  | ||||
| // dummyAddr is used to satisfy net.Addr for the in-mem socket | ||||
| // it is just stored as a string and returns the string for all calls | ||||
| type dummyAddr string | ||||
|  | ||||
| // NewInmemSocket creates an in-memory only net.Listener | ||||
| // The addr argument can be any string, but is used to satisfy the `Addr()` part | ||||
| // of the net.Listener interface | ||||
| func NewInmemSocket(addr string, bufSize int) *InmemSocket { | ||||
| 	return &InmemSocket{ | ||||
| 		chConn:  make(chan net.Conn, bufSize), | ||||
| 		chClose: make(chan struct{}), | ||||
| 		addr:    addr, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Addr returns the socket's addr string to satisfy net.Listener | ||||
| func (s *InmemSocket) Addr() net.Addr { | ||||
| 	return dummyAddr(s.addr) | ||||
| } | ||||
|  | ||||
| // Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn. | ||||
| func (s *InmemSocket) Accept() (net.Conn, error) { | ||||
| 	select { | ||||
| 	case conn := <-s.chConn: | ||||
| 		return conn, nil | ||||
| 	case <-s.chClose: | ||||
| 		return nil, errClosed | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Close closes the listener. It will be unavailable for use once closed. | ||||
| func (s *InmemSocket) Close() error { | ||||
| 	s.mu.Lock() | ||||
| 	defer s.mu.Unlock() | ||||
| 	select { | ||||
| 	case <-s.chClose: | ||||
| 	default: | ||||
| 		close(s.chClose) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Dial is used to establish a connection with the in-mem server | ||||
| func (s *InmemSocket) Dial(network, addr string) (net.Conn, error) { | ||||
| 	srvConn, clientConn := net.Pipe() | ||||
| 	select { | ||||
| 	case s.chConn <- srvConn: | ||||
| 	case <-s.chClose: | ||||
| 		return nil, errClosed | ||||
| 	} | ||||
|  | ||||
| 	return clientConn, nil | ||||
| } | ||||
|  | ||||
| // Network returns the addr string, satisfies net.Addr | ||||
| func (a dummyAddr) Network() string { | ||||
| 	return string(a) | ||||
| } | ||||
|  | ||||
| // String returns the string form | ||||
| func (a dummyAddr) String() string { | ||||
| 	return string(a) | ||||
| } | ||||
							
								
								
									
										51
									
								
								vendor/github.com/docker/go-connections/sockets/proxy.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								vendor/github.com/docker/go-connections/sockets/proxy.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"net/url" | ||||
| 	"os" | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/net/proxy" | ||||
| ) | ||||
|  | ||||
| // GetProxyEnv allows access to the uppercase and the lowercase forms of | ||||
| // proxy-related variables.  See the Go specification for details on these | ||||
| // variables. https://golang.org/pkg/net/http/ | ||||
| func GetProxyEnv(key string) string { | ||||
| 	proxyValue := os.Getenv(strings.ToUpper(key)) | ||||
| 	if proxyValue == "" { | ||||
| 		return os.Getenv(strings.ToLower(key)) | ||||
| 	} | ||||
| 	return proxyValue | ||||
| } | ||||
|  | ||||
| // DialerFromEnvironment takes in a "direct" *net.Dialer and returns a | ||||
| // proxy.Dialer which will route the connections through the proxy using the | ||||
| // given dialer. | ||||
| func DialerFromEnvironment(direct *net.Dialer) (proxy.Dialer, error) { | ||||
| 	allProxy := GetProxyEnv("all_proxy") | ||||
| 	if len(allProxy) == 0 { | ||||
| 		return direct, nil | ||||
| 	} | ||||
|  | ||||
| 	proxyURL, err := url.Parse(allProxy) | ||||
| 	if err != nil { | ||||
| 		return direct, err | ||||
| 	} | ||||
|  | ||||
| 	proxyFromURL, err := proxy.FromURL(proxyURL, direct) | ||||
| 	if err != nil { | ||||
| 		return direct, err | ||||
| 	} | ||||
|  | ||||
| 	noProxy := GetProxyEnv("no_proxy") | ||||
| 	if len(noProxy) == 0 { | ||||
| 		return proxyFromURL, nil | ||||
| 	} | ||||
|  | ||||
| 	perHost := proxy.NewPerHost(proxyFromURL, direct) | ||||
| 	perHost.AddFromString(noProxy) | ||||
|  | ||||
| 	return perHost, nil | ||||
| } | ||||
							
								
								
									
										38
									
								
								vendor/github.com/docker/go-connections/sockets/sockets.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/docker/go-connections/sockets/sockets.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| // Package sockets provides helper functions to create and configure Unix or TCP sockets. | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // Why 32? See https://github.com/docker/docker/pull/8035. | ||||
| const defaultTimeout = 32 * time.Second | ||||
|  | ||||
| // ErrProtocolNotAvailable is returned when a given transport protocol is not provided by the operating system. | ||||
| var ErrProtocolNotAvailable = errors.New("protocol not available") | ||||
|  | ||||
| // ConfigureTransport configures the specified Transport according to the | ||||
| // specified proto and addr. | ||||
| // If the proto is unix (using a unix socket to communicate) or npipe the | ||||
| // compression is disabled. | ||||
| func ConfigureTransport(tr *http.Transport, proto, addr string) error { | ||||
| 	switch proto { | ||||
| 	case "unix": | ||||
| 		return configureUnixTransport(tr, proto, addr) | ||||
| 	case "npipe": | ||||
| 		return configureNpipeTransport(tr, proto, addr) | ||||
| 	default: | ||||
| 		tr.Proxy = http.ProxyFromEnvironment | ||||
| 		dialer, err := DialerFromEnvironment(&net.Dialer{ | ||||
| 			Timeout: defaultTimeout, | ||||
| 		}) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		tr.Dial = dialer.Dial | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										35
									
								
								vendor/github.com/docker/go-connections/sockets/sockets_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/docker/go-connections/sockets/sockets_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // +build !windows | ||||
|  | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| const maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path) | ||||
|  | ||||
| func configureUnixTransport(tr *http.Transport, proto, addr string) error { | ||||
| 	if len(addr) > maxUnixSocketPathSize { | ||||
| 		return fmt.Errorf("Unix socket path %q is too long", addr) | ||||
| 	} | ||||
| 	// No need for compression in local communications. | ||||
| 	tr.DisableCompression = true | ||||
| 	tr.Dial = func(_, _ string) (net.Conn, error) { | ||||
| 		return net.DialTimeout(proto, addr, defaultTimeout) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func configureNpipeTransport(tr *http.Transport, proto, addr string) error { | ||||
| 	return ErrProtocolNotAvailable | ||||
| } | ||||
|  | ||||
| // DialPipe connects to a Windows named pipe. | ||||
| // This is not supported on other OSes. | ||||
| func DialPipe(_ string, _ time.Duration) (net.Conn, error) { | ||||
| 	return nil, syscall.EAFNOSUPPORT | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/github.com/docker/go-connections/sockets/sockets_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/github.com/docker/go-connections/sockets/sockets_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/Microsoft/go-winio" | ||||
| ) | ||||
|  | ||||
| func configureUnixTransport(tr *http.Transport, proto, addr string) error { | ||||
| 	return ErrProtocolNotAvailable | ||||
| } | ||||
|  | ||||
| func configureNpipeTransport(tr *http.Transport, proto, addr string) error { | ||||
| 	// No need for compression in local communications. | ||||
| 	tr.DisableCompression = true | ||||
| 	tr.Dial = func(_, _ string) (net.Conn, error) { | ||||
| 		return DialPipe(addr, defaultTimeout) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // DialPipe connects to a Windows named pipe. | ||||
| func DialPipe(addr string, timeout time.Duration) (net.Conn, error) { | ||||
| 	return winio.DialPipe(addr, &timeout) | ||||
| } | ||||
							
								
								
									
										22
									
								
								vendor/github.com/docker/go-connections/sockets/tcp_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/docker/go-connections/sockets/tcp_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| // Package sockets provides helper functions to create and configure Unix or TCP sockets. | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| 	"net" | ||||
| ) | ||||
|  | ||||
| // NewTCPSocket creates a TCP socket listener with the specified address and | ||||
| // the specified tls configuration. If TLSConfig is set, will encapsulate the | ||||
| // TCP listener inside a TLS one. | ||||
| func NewTCPSocket(addr string, tlsConfig *tls.Config) (net.Listener, error) { | ||||
| 	l, err := net.Listen("tcp", addr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if tlsConfig != nil { | ||||
| 		tlsConfig.NextProtos = []string{"http/1.1"} | ||||
| 		l = tls.NewListener(l, tlsConfig) | ||||
| 	} | ||||
| 	return l, nil | ||||
| } | ||||
							
								
								
									
										32
									
								
								vendor/github.com/docker/go-connections/sockets/unix_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								vendor/github.com/docker/go-connections/sockets/unix_socket.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // +build !windows | ||||
|  | ||||
| package sockets | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| // NewUnixSocket creates a unix socket with the specified path and group. | ||||
| func NewUnixSocket(path string, gid int) (net.Listener, error) { | ||||
| 	if err := syscall.Unlink(path); err != nil && !os.IsNotExist(err) { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	mask := syscall.Umask(0777) | ||||
| 	defer syscall.Umask(mask) | ||||
|  | ||||
| 	l, err := net.Listen("unix", path) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if err := os.Chown(path, 0, gid); err != nil { | ||||
| 		l.Close() | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if err := os.Chmod(path, 0660); err != nil { | ||||
| 		l.Close() | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return l, nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user