Procházet zdrojové kódy

Merge pull request #13542 from kvasdopil/freebsd-work

Make docker build on FreeBSD
Jessie Frazelle před 10 roky
rodič
revize
75f8bdd970

+ 1 - 1
api/server/server_linux.go → api/server/server_unix.go

@@ -1,4 +1,4 @@
-// +build linux
+// +build freebsd linux
 
 package server
 

+ 1 - 1
builder/internals_linux.go → builder/internals_unix.go

@@ -1,4 +1,4 @@
-// +build linux
+// +build freebsd linux
 
 package builder
 

+ 2 - 0
daemon/config_linux.go → daemon/config_unix.go

@@ -1,3 +1,5 @@
+// +build linux freebsd
+
 package daemon
 
 import (

+ 1 - 1
daemon/container_unix.go

@@ -1,4 +1,4 @@
-// +build !windows
+// +build linux freebsd
 
 package daemon
 

+ 1 - 1
daemon/daemon_no_aufs.go

@@ -1,4 +1,4 @@
-// +build exclude_graphdriver_aufs,linux
+// +build exclude_graphdriver_aufs,linux freebsd
 
 package daemon
 

+ 1 - 1
daemon/daemon_zfs.go

@@ -1,4 +1,4 @@
-// +build !exclude_graphdriver_zfs,linux
+// +build !exclude_graphdriver_zfs,linux !exclude_graphdriver_zfs,freebsd
 
 package daemon
 

+ 9 - 0
daemon/exec_freebsd.go

@@ -0,0 +1,9 @@
+// +build freebsd
+
+package daemon
+
+// checkExecSupport returns an error if the exec driver does not support exec,
+// or nil if it is supported.
+func checkExecSupport(drivername string) error {
+	return nil
+}

+ 19 - 0
daemon/execdriver/execdrivers/execdrivers_freebsd.go

@@ -0,0 +1,19 @@
+// +build freebsd
+
+package execdrivers
+
+import (
+	"fmt"
+
+	"github.com/docker/docker/daemon/execdriver"
+	"github.com/docker/docker/pkg/sysinfo"
+)
+
+// NewDriver returns a new execdriver.Driver from the given name configured with the provided options.
+func NewDriver(name string, options []string, root, libPath, initPath string, sysInfo *sysinfo.SysInfo) (execdriver.Driver, error) {
+	switch name {
+	case "jail":
+		return nil, fmt.Errorf("jail driver not yet supported on FreeBSD")
+	}
+	return nil, fmt.Errorf("unknown exec driver %s", name)
+}

+ 8 - 0
daemon/graphdriver/driver_freebsd.go

@@ -0,0 +1,8 @@
+package graphdriver
+
+var (
+	// Slice of drivers that should be used in an order
+	priority = []string{
+		"zfs",
+	}
+)

+ 1 - 1
daemon/graphdriver/driver_unsupported.go

@@ -1,4 +1,4 @@
-// +build !linux,!windows
+// +build !linux,!windows,!freebsd
 
 package graphdriver
 

+ 1 - 1
daemon/graphdriver/zfs/zfs.go

@@ -1,4 +1,4 @@
-// +build linux
+// +build linux freebsd
 
 package zfs
 

+ 14 - 0
daemon/stats_freebsd.go

@@ -0,0 +1,14 @@
+package daemon
+
+import (
+	"github.com/docker/docker/api/types"
+	"github.com/opencontainers/runc/libcontainer"
+)
+
+// convertStatsToAPITypes converts the libcontainer.Stats to the api specific
+// structs.  This is done to preserve API compatibility and versioning.
+func convertStatsToAPITypes(ls *libcontainer.Stats) *types.Stats {
+	// TODO FreeBSD. Refactor accordingly to fill in stats.
+	s := &types.Stats{}
+	return s
+}

+ 9 - 0
daemon/utils_freebsd.go

@@ -0,0 +1,9 @@
+package daemon
+
+import (
+	"github.com/docker/docker/runconfig"
+)
+
+func mergeLxcConfIntoOptions(hostConfig *runconfig.HostConfig) ([]string, error) {
+	return nil, nil
+}

+ 0 - 0
daemon/utils_unix.go → daemon/utils_linux.go


+ 0 - 0
daemon/volumes_linux.go → daemon/volumes_unix.go


+ 7 - 0
docker/daemon_linux.go

@@ -0,0 +1,7 @@
+// +build daemon
+
+package main
+
+import (
+	_ "github.com/docker/docker/daemon/execdriver/lxc"
+)

+ 0 - 1
docker/daemon_unix.go

@@ -11,7 +11,6 @@ import (
 	"github.com/docker/docker/daemon"
 	"github.com/docker/docker/pkg/system"
 
-	_ "github.com/docker/docker/daemon/execdriver/lxc"
 	_ "github.com/docker/docker/daemon/execdriver/native"
 )
 

+ 1 - 1
pkg/directory/directory_linux.go → pkg/directory/directory_unix.go

@@ -1,4 +1,4 @@
-// +build linux
+// +build linux freebsd
 
 package directory
 

+ 18 - 0
pkg/parsers/operatingsystem/operatingsystem_freebsd.go

@@ -0,0 +1,18 @@
+package operatingsystem
+
+import (
+	"errors"
+)
+
+// GetOperatingSystem gets the name of the current operating system.
+func GetOperatingSystem() (string, error) {
+	// TODO: Implement OS detection
+	return "", errors.New("Cannot detect OS version")
+}
+
+// IsContainerized returns true if we are running inside a container.
+// No-op on FreeBSD, always returns false.
+func IsContainerized() (bool, error) {
+	// TODO: Implement jail detection
+	return false, errors.New("Cannot detect if we are in container")
+}

+ 23 - 0
pkg/reexec/command_freebsd.go

@@ -0,0 +1,23 @@
+// +build freebsd
+
+package reexec
+
+import (
+	"os/exec"
+)
+
+// Self returns the path to the current process's binary.
+// Uses os.Args[0].
+func Self() string {
+	return naiveSelf()
+}
+
+// Command returns *exec.Cmd which have Path as current binary.
+// For example if current binary is "docker" at "/usr/bin/", then cmd.Path will
+// be set to "/usr/bin/docker".
+func Command(args ...string) *exec.Cmd {
+	return &exec.Cmd{
+		Path: Self(),
+		Args: args,
+	}
+}

+ 1 - 1
pkg/reexec/command_unsupported.go

@@ -1,4 +1,4 @@
-// +build !linux,!windows
+// +build !linux,!windows,!freebsd
 
 package reexec
 

+ 1 - 1
pkg/sockets/unix_socket.go

@@ -1,4 +1,4 @@
-// +build linux
+// +build linux freebsd
 
 package sockets
 

+ 7 - 0
pkg/sysinfo/sysinfo_freebsd.go

@@ -0,0 +1,7 @@
+package sysinfo
+
+// TODO FreeBSD
+func New(quiet bool) *SysInfo {
+	sysInfo := &SysInfo{}
+	return sysInfo
+}

+ 27 - 0
pkg/system/stat_freebsd.go

@@ -0,0 +1,27 @@
+package system
+
+import (
+	"syscall"
+)
+
+// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
+func fromStatT(s *syscall.Stat_t) (*Stat_t, error) {
+	return &Stat_t{size: s.Size,
+		mode: uint32(s.Mode),
+		uid:  s.Uid,
+		gid:  s.Gid,
+		rdev: uint64(s.Rdev),
+		mtim: s.Mtimespec}, nil
+}
+
+// Stat takes a path to a file and returns
+// a system.Stat_t type pertaining to that file.
+//
+// Throws an error if the file does not exist
+func Stat(path string) (*Stat_t, error) {
+	s := &syscall.Stat_t{}
+	if err := syscall.Stat(path, s); err != nil {
+		return nil, err
+	}
+	return fromStatT(s)
+}

+ 1 - 1
pkg/system/stat_unsupported.go

@@ -1,4 +1,4 @@
-// +build !linux,!windows
+// +build !linux,!windows,!freebsd
 
 package system