Skip to content

Commit

Permalink
Merge pull request #1215 from dfr/freebsd
Browse files Browse the repository at this point in the history
Add FreeBSD support in pkg/mount and pkg/reexec
  • Loading branch information
flouthoc committed Apr 22, 2022
2 parents 8996869 + 53d6492 commit 565d1f9
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 3 deletions.
1 change: 0 additions & 1 deletion drivers/driver_freebsd.go
@@ -1,7 +1,6 @@
package graphdriver

import (
"fmt"
"golang.org/x/sys/unix"

"github.com/containers/storage/pkg/mount"
Expand Down
47 changes: 47 additions & 0 deletions pkg/mount/flags_freebsd.go
@@ -0,0 +1,47 @@
package mount

import (
"golang.org/x/sys/unix"
)

const (
// RDONLY will mount the file system read-only.
RDONLY = unix.MNT_RDONLY

// NOSUID will not allow set-user-identifier or set-group-identifier bits to
// take effect.
NOSUID = unix.MNT_NOSUID

// NOEXEC will not allow execution of any binaries on the mounted file system.
NOEXEC = unix.MNT_NOEXEC

// SYNCHRONOUS will allow I/O to the file system to be done synchronously.
SYNCHRONOUS = unix.MNT_SYNCHRONOUS

// REMOUNT will attempt to remount an already-mounted file system. This is
// commonly used to change the mount flags for a file system, especially to
// make a readonly file system writeable. It does not change device or mount
// point.
REMOUNT = unix.MNT_UPDATE

// NOATIME will not update the file access time when reading from a file.
NOATIME = unix.MNT_NOATIME

NODIRATIME = 0
NODEV = 0
DIRSYNC = 0
MANDLOCK = 0
BIND = 0
RBIND = 0
UNBINDABLE = 0
RUNBINDABLE = 0
PRIVATE = 0
RPRIVATE = 0
SLAVE = 0
RSLAVE = 0
SHARED = 0
RSHARED = 0
RELATIME = 0
STRICTATIME = 0
mntDetach = 0
)
3 changes: 2 additions & 1 deletion pkg/mount/flags_unsupported.go
@@ -1,4 +1,5 @@
// +build !linux
//go:build !linux && !freebsd
// +build !linux,!freebsd

package mount

Expand Down
37 changes: 37 additions & 0 deletions pkg/reexec/command_freebsd.go
@@ -0,0 +1,37 @@
// +build freebsd

package reexec

import (
"context"
"os"
"os/exec"

"golang.org/x/sys/unix"
)

// Self returns the path to the current process's binary.
// Uses sysctl.
func Self() string {
path, err := unix.SysctlArgs("kern.proc.pathname", -1)
if err == nil {
return path
}
return os.Args[0]
}

// Command returns *exec.Cmd which has 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 {
cmd := exec.Command(Self())
cmd.Args = args
return cmd
}

// CommandContext returns *exec.Cmd which has Path as current binary.
func CommandContext(ctx context.Context, args ...string) *exec.Cmd {
cmd := exec.CommandContext(ctx, Self())
cmd.Args = args
return cmd
}
3 changes: 2 additions & 1 deletion pkg/reexec/command_unix.go
@@ -1,4 +1,5 @@
// +build freebsd solaris darwin
//go:build solaris || darwin
// +build solaris darwin

package reexec

Expand Down

0 comments on commit 565d1f9

Please sign in to comment.