Add a new generic container registry client via a new `container` package. Use this to create a command line utility as well as a new upload target for container registries. The code uses the github.com/containers/* project and packages to interact with container registires that is also used by skopeo, podman et al. One if the dependencies is `proglottis/gpgme` that is using cgo to bind libgpgme, so we have to add the corresponding devel package to the BuildRequires as well as installing it on CI. Checks will follow later via an integration test.
67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
package mountinfo
|
|
|
|
import (
|
|
"os"
|
|
)
|
|
|
|
// GetMounts retrieves a list of mounts for the current running process,
|
|
// with an optional filter applied (use nil for no filter).
|
|
func GetMounts(f FilterFunc) ([]*Info, error) {
|
|
return parseMountTable(f)
|
|
}
|
|
|
|
// Mounted determines if a specified path is a mount point. In case of any
|
|
// error, false (and an error) is returned.
|
|
//
|
|
// If a non-existent path is specified, an appropriate error is returned.
|
|
// In case the caller is not interested in this particular error, it should
|
|
// be handled separately using e.g. errors.Is(err, os.ErrNotExist).
|
|
func Mounted(path string) (bool, error) {
|
|
// root is always mounted
|
|
if path == string(os.PathSeparator) {
|
|
return true, nil
|
|
}
|
|
return mounted(path)
|
|
}
|
|
|
|
// Info reveals information about a particular mounted filesystem. This
|
|
// struct is populated from the content in the /proc/<pid>/mountinfo file.
|
|
type Info struct {
|
|
// ID is a unique identifier of the mount (may be reused after umount).
|
|
ID int
|
|
|
|
// Parent is the ID of the parent mount (or of self for the root
|
|
// of this mount namespace's mount tree).
|
|
Parent int
|
|
|
|
// Major and Minor are the major and the minor components of the Dev
|
|
// field of unix.Stat_t structure returned by unix.*Stat calls for
|
|
// files on this filesystem.
|
|
Major, Minor int
|
|
|
|
// Root is the pathname of the directory in the filesystem which forms
|
|
// the root of this mount.
|
|
Root string
|
|
|
|
// Mountpoint is the pathname of the mount point relative to the
|
|
// process's root directory.
|
|
Mountpoint string
|
|
|
|
// Options is a comma-separated list of mount options.
|
|
Options string
|
|
|
|
// Optional are zero or more fields of the form "tag[:value]",
|
|
// separated by a space. Currently, the possible optional fields are
|
|
// "shared", "master", "propagate_from", and "unbindable". For more
|
|
// information, see mount_namespaces(7) Linux man page.
|
|
Optional string
|
|
|
|
// FSType is the filesystem type in the form "type[.subtype]".
|
|
FSType string
|
|
|
|
// Source is filesystem-specific information, or "none".
|
|
Source string
|
|
|
|
// VFSOptions is a comma-separated list of superblock options.
|
|
VFSOptions string
|
|
}
|