Add HelperBinariesDir field to engine config
This field contains a list of directories which should be used to store some helper binaries, e.g. gvproxy. Also add a FindHelperBinary method to the config struct to get the full path to a helper binary. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
parent
c92d6656cc
commit
25622da26e
|
|
@ -378,6 +378,29 @@ if you want to set environment variables for the container.
|
||||||
Default method to use when logging events.
|
Default method to use when logging events.
|
||||||
Valid values: `file`, `journald`, and `none`.
|
Valid values: `file`, `journald`, and `none`.
|
||||||
|
|
||||||
|
**helper_binaries_dir**=["/usr/libexec/podman", ...]
|
||||||
|
|
||||||
|
A is a list of directories which are used to search for helper binaries.
|
||||||
|
|
||||||
|
The default paths on Linux are:
|
||||||
|
- `/usr/local/libexec/podman`
|
||||||
|
- `/usr/local/lib/podman`
|
||||||
|
- `/usr/libexec/podman`
|
||||||
|
- `/usr/lib/podman`
|
||||||
|
|
||||||
|
The default paths on macOS are:
|
||||||
|
- `/usr/local/opt/podman/libexec`
|
||||||
|
- `/opt/homebrew/bin`
|
||||||
|
- `/opt/homebrew/opt/podman/libexec`
|
||||||
|
- `/usr/local/bin`
|
||||||
|
- `/usr/local/libexec/podman`
|
||||||
|
- `/usr/local/lib/podman`
|
||||||
|
- `/usr/libexec/podman`
|
||||||
|
- `/usr/lib/podman`
|
||||||
|
|
||||||
|
The default path on Windows is:
|
||||||
|
- `C:\Program Files\RedHat\Podman`
|
||||||
|
|
||||||
**hooks_dir**=["/etc/containers/oci/hooks.d", ...]
|
**hooks_dir**=["/etc/containers/oci/hooks.d", ...]
|
||||||
|
|
||||||
Path to the OCI hooks directories for automatically executed hooks.
|
Path to the OCI hooks directories for automatically executed hooks.
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,10 @@ type EngineConfig struct {
|
||||||
// EventsLogger determines where events should be logged.
|
// EventsLogger determines where events should be logged.
|
||||||
EventsLogger string `toml:"events_logger,omitempty"`
|
EventsLogger string `toml:"events_logger,omitempty"`
|
||||||
|
|
||||||
|
// HelperBinariesDir is a list of directories which are used to search for
|
||||||
|
// helper binaries.
|
||||||
|
HelperBinariesDir []string `toml:"helper_binaries_dir"`
|
||||||
|
|
||||||
// configuration files. When the same filename is present in in
|
// configuration files. When the same filename is present in in
|
||||||
// multiple directories, the file in the directory listed last in
|
// multiple directories, the file in the directory listed last in
|
||||||
// this slice takes precedence.
|
// this slice takes precedence.
|
||||||
|
|
@ -1126,3 +1130,21 @@ func (c *Config) ActiveDestination() (uri, identity string, err error) {
|
||||||
}
|
}
|
||||||
return "", "", errors.New("no service destination configured")
|
return "", "", errors.New("no service destination configured")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FindHelperBinary will search the given binary name in the configured directories.
|
||||||
|
// If searchPATH is set to true it will also search in $PATH.
|
||||||
|
func (c *Config) FindHelperBinary(name string, searchPATH bool) (string, error) {
|
||||||
|
for _, path := range c.Engine.HelperBinariesDir {
|
||||||
|
fullpath := filepath.Join(path, name)
|
||||||
|
if fi, err := os.Stat(fullpath); err == nil && fi.Mode().IsRegular() {
|
||||||
|
return fullpath, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if searchPATH {
|
||||||
|
return exec.LookPath(name)
|
||||||
|
}
|
||||||
|
if len(c.Engine.HelperBinariesDir) == 0 {
|
||||||
|
return "", errors.Errorf("could not find %q because there are no helper binary directories configured", name)
|
||||||
|
}
|
||||||
|
return "", errors.Errorf("could not find %q in one of %v", name, c.Engine.HelperBinariesDir)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,3 +15,16 @@ func customConfigFile() (string, error) {
|
||||||
func ifRootlessConfigPath() (string, error) {
|
func ifRootlessConfigPath() (string, error) {
|
||||||
return rootlessConfigPath()
|
return rootlessConfigPath()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var defaultHelperBinariesDir = []string{
|
||||||
|
// Homebrew install paths
|
||||||
|
"/usr/local/opt/podman/libexec",
|
||||||
|
"/opt/homebrew/bin",
|
||||||
|
"/opt/homebrew/opt/podman/libexec",
|
||||||
|
"/usr/local/bin",
|
||||||
|
// default paths
|
||||||
|
"/usr/local/libexec/podman",
|
||||||
|
"/usr/local/lib/podman",
|
||||||
|
"/usr/libexec/podman",
|
||||||
|
"/usr/lib/podman",
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,3 +35,10 @@ func ifRootlessConfigPath() (string, error) {
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var defaultHelperBinariesDir = []string{
|
||||||
|
"/usr/local/libexec/podman",
|
||||||
|
"/usr/local/lib/podman",
|
||||||
|
"/usr/libexec/podman",
|
||||||
|
"/usr/lib/podman",
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,10 @@ var _ = Describe("Config", func() {
|
||||||
"TERM=xterm",
|
"TERM=xterm",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
helperDirs := []string{
|
||||||
|
"/somepath",
|
||||||
|
}
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
gomega.Expect(err).To(gomega.BeNil())
|
gomega.Expect(err).To(gomega.BeNil())
|
||||||
gomega.Expect(defaultConfig.Engine.CgroupManager).To(gomega.Equal("systemd"))
|
gomega.Expect(defaultConfig.Engine.CgroupManager).To(gomega.Equal("systemd"))
|
||||||
|
|
@ -172,6 +176,7 @@ var _ = Describe("Config", func() {
|
||||||
gomega.Expect(defaultConfig.Engine.NumLocks).To(gomega.BeEquivalentTo(2048))
|
gomega.Expect(defaultConfig.Engine.NumLocks).To(gomega.BeEquivalentTo(2048))
|
||||||
gomega.Expect(defaultConfig.Engine.OCIRuntimes).To(gomega.Equal(OCIRuntimeMap))
|
gomega.Expect(defaultConfig.Engine.OCIRuntimes).To(gomega.Equal(OCIRuntimeMap))
|
||||||
gomega.Expect(defaultConfig.Containers.HTTPProxy).To(gomega.Equal(false))
|
gomega.Expect(defaultConfig.Containers.HTTPProxy).To(gomega.Equal(false))
|
||||||
|
gomega.Expect(defaultConfig.Engine.HelperBinariesDir).To(gomega.Equal(helperDirs))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("test GetDefaultEnvEx", func() {
|
It("test GetDefaultEnvEx", func() {
|
||||||
|
|
|
||||||
|
|
@ -13,3 +13,7 @@ func customConfigFile() (string, error) {
|
||||||
func ifRootlessConfigPath() (string, error) {
|
func ifRootlessConfigPath() (string, error) {
|
||||||
return os.Getenv("APPDATA") + "\\containers\\containers.conf", nil
|
return os.Getenv("APPDATA") + "\\containers\\containers.conf", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var defaultHelperBinariesDir = []string{
|
||||||
|
"C:\\Program Files\\RedHat\\Podman",
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -341,6 +341,15 @@ default_sysctls = [
|
||||||
#
|
#
|
||||||
#events_logger = "journald"
|
#events_logger = "journald"
|
||||||
|
|
||||||
|
# A is a list of directories which are used to search for helper binaries.
|
||||||
|
#
|
||||||
|
#helper_binaries_dir = [
|
||||||
|
# "/usr/local/libexec/podman",
|
||||||
|
# "/usr/local/lib/podman",
|
||||||
|
# "/usr/libexec/podman",
|
||||||
|
# "/usr/lib/podman",
|
||||||
|
#]
|
||||||
|
|
||||||
# Path to OCI hooks directories for automatically executed hooks.
|
# Path to OCI hooks directories for automatically executed hooks.
|
||||||
#
|
#
|
||||||
#hooks_dir = [
|
#hooks_dir = [
|
||||||
|
|
|
||||||
|
|
@ -247,6 +247,7 @@ func defaultConfigFromMemory() (*EngineConfig, error) {
|
||||||
c.StaticDir = filepath.Join(storeOpts.GraphRoot, "libpod")
|
c.StaticDir = filepath.Join(storeOpts.GraphRoot, "libpod")
|
||||||
c.VolumePath = filepath.Join(storeOpts.GraphRoot, "volumes")
|
c.VolumePath = filepath.Join(storeOpts.GraphRoot, "volumes")
|
||||||
|
|
||||||
|
c.HelperBinariesDir = defaultHelperBinariesDir
|
||||||
c.HooksDir = DefaultHooksDirs
|
c.HooksDir = DefaultHooksDirs
|
||||||
c.ImageDefaultTransport = _defaultTransport
|
c.ImageDefaultTransport = _defaultTransport
|
||||||
c.StateType = BoltDBStateStore
|
c.StateType = BoltDBStateStore
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,13 @@ no_pivot_root = false
|
||||||
# namespace is set, all containers and pods are visible.
|
# namespace is set, all containers and pods are visible.
|
||||||
#namespace = ""
|
#namespace = ""
|
||||||
|
|
||||||
|
# A is a list of directories which are used to search for helper binaries.
|
||||||
|
#
|
||||||
|
helper_binaries_dir = [
|
||||||
|
"/somepath",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
# Path to OCI hooks directories for automatically executed hooks.
|
# Path to OCI hooks directories for automatically executed hooks.
|
||||||
hooks_dir = [
|
hooks_dir = [
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue