| // +build !windows |
| |
| package appdefaults |
| |
| import ( |
| "os" |
| "path/filepath" |
| "strings" |
| ) |
| |
| const ( |
| Address = "unix:///run/buildkit/buildkitd.sock" |
| Root = "/var/lib/buildkit" |
| ConfigDir = "/etc/buildkit" |
| ) |
| |
| // UserAddress typically returns /run/user/$UID/buildkit/buildkitd.sock |
| func UserAddress() string { |
| // pam_systemd sets XDG_RUNTIME_DIR but not other dirs. |
| xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR") |
| if xdgRuntimeDir != "" { |
| dirs := strings.Split(xdgRuntimeDir, ":") |
| return "unix://" + filepath.Join(dirs[0], "buildkit", "buildkitd.sock") |
| } |
| return Address |
| } |
| |
| // EnsureUserAddressDir sets sticky bit on XDG_RUNTIME_DIR if XDG_RUNTIME_DIR is set. |
| // See https://github.com/opencontainers/runc/issues/1694 |
| func EnsureUserAddressDir() error { |
| xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR") |
| if xdgRuntimeDir != "" { |
| dirs := strings.Split(xdgRuntimeDir, ":") |
| dir := filepath.Join(dirs[0], "buildkit") |
| if err := os.MkdirAll(dir, 0700); err != nil { |
| return err |
| } |
| return os.Chmod(dir, 0700|os.ModeSticky) |
| } |
| return nil |
| } |
| |
| // UserRoot typically returns /home/$USER/.local/share/buildkit |
| func UserRoot() string { |
| // pam_systemd sets XDG_RUNTIME_DIR but not other dirs. |
| xdgDataHome := os.Getenv("XDG_DATA_HOME") |
| if xdgDataHome != "" { |
| dirs := strings.Split(xdgDataHome, ":") |
| return filepath.Join(dirs[0], "buildkit") |
| } |
| home := os.Getenv("HOME") |
| if home != "" { |
| return filepath.Join(home, ".local", "share", "buildkit") |
| } |
| return Root |
| } |
| |
| // UserConfigDir returns dir for storing config. /home/$USER/.config/buildkit/ |
| func UserConfigDir() string { |
| xdgConfigHome := os.Getenv("XDG_CONFIG_HOME") |
| if xdgConfigHome != "" { |
| return filepath.Join(xdgConfigHome, "buildkit") |
| } |
| home := os.Getenv("HOME") |
| if home != "" { |
| return filepath.Join(home, ".config", "buildkit") |
| } |
| return ConfigDir |
| } |