diff --git a/api/server/server_linux.go b/api/server/server_unix.go similarity index 99% rename from api/server/server_linux.go rename to api/server/server_unix.go index 09c3c1322c..84df45bcd1 100644 --- a/api/server/server_linux.go +++ b/api/server/server_unix.go @@ -1,4 +1,4 @@ -// +build linux +// +build freebsd linux package server diff --git a/builder/internals_linux.go b/builder/internals_unix.go similarity index 98% rename from builder/internals_linux.go rename to builder/internals_unix.go index 76308c6895..3d8ad54e90 100644 --- a/builder/internals_linux.go +++ b/builder/internals_unix.go @@ -1,4 +1,4 @@ -// +build linux +// +build freebsd linux package builder diff --git a/daemon/config_linux.go b/daemon/config_unix.go similarity index 99% rename from daemon/config_linux.go rename to daemon/config_unix.go index eb1c125d8c..5fd4934b58 100644 --- a/daemon/config_linux.go +++ b/daemon/config_unix.go @@ -1,3 +1,5 @@ +// +build linux freebsd + package daemon import ( diff --git a/daemon/container_unix.go b/daemon/container_unix.go index 4bc0c71279..9126ceae5a 100644 --- a/daemon/container_unix.go +++ b/daemon/container_unix.go @@ -1,4 +1,4 @@ -// +build !windows +// +build linux freebsd package daemon diff --git a/daemon/daemon_no_aufs.go b/daemon/daemon_no_aufs.go index 921b395825..a74f775336 100644 --- a/daemon/daemon_no_aufs.go +++ b/daemon/daemon_no_aufs.go @@ -1,4 +1,4 @@ -// +build exclude_graphdriver_aufs,linux +// +build exclude_graphdriver_aufs,linux freebsd package daemon diff --git a/daemon/daemon_zfs.go b/daemon/daemon_zfs.go index 2fc1d8707e..d27eff7270 100644 --- a/daemon/daemon_zfs.go +++ b/daemon/daemon_zfs.go @@ -1,4 +1,4 @@ -// +build !exclude_graphdriver_zfs,linux +// +build !exclude_graphdriver_zfs,linux !exclude_graphdriver_zfs,freebsd package daemon diff --git a/daemon/exec_freebsd.go b/daemon/exec_freebsd.go new file mode 100644 index 0000000000..6f1e5e3c1d --- /dev/null +++ b/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 +} diff --git a/daemon/execdriver/execdrivers/execdrivers_freebsd.go b/daemon/execdriver/execdrivers/execdrivers_freebsd.go new file mode 100644 index 0000000000..ffb463cefd --- /dev/null +++ b/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) +} diff --git a/daemon/graphdriver/driver_freebsd.go b/daemon/graphdriver/driver_freebsd.go new file mode 100644 index 0000000000..be4eb52653 --- /dev/null +++ b/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", + } +) diff --git a/daemon/graphdriver/driver_unsupported.go b/daemon/graphdriver/driver_unsupported.go index 3f36864878..bb3b5ef743 100644 --- a/daemon/graphdriver/driver_unsupported.go +++ b/daemon/graphdriver/driver_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!freebsd package graphdriver diff --git a/daemon/graphdriver/zfs/zfs.go b/daemon/graphdriver/zfs/zfs.go index 664baf1648..605e14b7cd 100644 --- a/daemon/graphdriver/zfs/zfs.go +++ b/daemon/graphdriver/zfs/zfs.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux freebsd package zfs diff --git a/daemon/stats_freebsd.go b/daemon/stats_freebsd.go new file mode 100644 index 0000000000..4ec7c657ce --- /dev/null +++ b/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 +} diff --git a/daemon/utils_freebsd.go b/daemon/utils_freebsd.go new file mode 100644 index 0000000000..1e1ed1b358 --- /dev/null +++ b/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 +} diff --git a/daemon/utils_unix.go b/daemon/utils_linux.go similarity index 100% rename from daemon/utils_unix.go rename to daemon/utils_linux.go diff --git a/daemon/volumes_linux.go b/daemon/volumes_unix.go similarity index 100% rename from daemon/volumes_linux.go rename to daemon/volumes_unix.go diff --git a/docker/daemon_linux.go b/docker/daemon_linux.go new file mode 100644 index 0000000000..fd41fe74f8 --- /dev/null +++ b/docker/daemon_linux.go @@ -0,0 +1,7 @@ +// +build daemon + +package main + +import ( + _ "github.com/docker/docker/daemon/execdriver/lxc" +) diff --git a/docker/daemon_unix.go b/docker/daemon_unix.go index a2c1a63a62..beaffc4506 100644 --- a/docker/daemon_unix.go +++ b/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" ) diff --git a/pkg/directory/directory_linux.go b/pkg/directory/directory_unix.go similarity index 97% rename from pkg/directory/directory_linux.go rename to pkg/directory/directory_unix.go index 80fb9a8332..dbebdd3c2c 100644 --- a/pkg/directory/directory_linux.go +++ b/pkg/directory/directory_unix.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux freebsd package directory diff --git a/pkg/parsers/operatingsystem/operatingsystem_freebsd.go b/pkg/parsers/operatingsystem/operatingsystem_freebsd.go new file mode 100644 index 0000000000..0589cf2ae3 --- /dev/null +++ b/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") +} diff --git a/pkg/reexec/command_freebsd.go b/pkg/reexec/command_freebsd.go new file mode 100644 index 0000000000..c7f797a5fa --- /dev/null +++ b/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, + } +} diff --git a/pkg/reexec/command_unsupported.go b/pkg/reexec/command_unsupported.go index 630eecbd96..ad4ea38ebb 100644 --- a/pkg/reexec/command_unsupported.go +++ b/pkg/reexec/command_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!freebsd package reexec diff --git a/pkg/sockets/unix_socket.go b/pkg/sockets/unix_socket.go index 42e558eee1..a69c28b041 100644 --- a/pkg/sockets/unix_socket.go +++ b/pkg/sockets/unix_socket.go @@ -1,4 +1,4 @@ -// +build linux +// +build linux freebsd package sockets diff --git a/pkg/sysinfo/sysinfo_freebsd.go b/pkg/sysinfo/sysinfo_freebsd.go new file mode 100644 index 0000000000..25896f9935 --- /dev/null +++ b/pkg/sysinfo/sysinfo_freebsd.go @@ -0,0 +1,7 @@ +package sysinfo + +// TODO FreeBSD +func New(quiet bool) *SysInfo { + sysInfo := &SysInfo{} + return sysInfo +} diff --git a/pkg/system/stat_freebsd.go b/pkg/system/stat_freebsd.go new file mode 100644 index 0000000000..4b2198b3aa --- /dev/null +++ b/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) +} diff --git a/pkg/system/stat_unsupported.go b/pkg/system/stat_unsupported.go index 7e0d0348fa..5251ae2129 100644 --- a/pkg/system/stat_unsupported.go +++ b/pkg/system/stat_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux,!windows +// +build !linux,!windows,!freebsd package system