Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add FreeBSD support in pkg/mount and pkg/reexec #1215

Merged
merged 4 commits into from Apr 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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