1// +build !windows 2 3package appdefaults 4 5import ( 6 "os" 7 "path/filepath" 8 "strings" 9) 10 11const ( 12 Address = "unix:///run/buildkit/buildkitd.sock" 13 Root = "/var/lib/buildkit" 14 ConfigDir = "/etc/buildkit" 15) 16 17// UserAddress typically returns /run/user/$UID/buildkit/buildkitd.sock 18func UserAddress() string { 19 // pam_systemd sets XDG_RUNTIME_DIR but not other dirs. 20 xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR") 21 if xdgRuntimeDir != "" { 22 dirs := strings.Split(xdgRuntimeDir, ":") 23 return "unix://" + filepath.Join(dirs[0], "buildkit", "buildkitd.sock") 24 } 25 return Address 26} 27 28// EnsureUserAddressDir sets sticky bit on XDG_RUNTIME_DIR if XDG_RUNTIME_DIR is set. 29// See https://github.com/opencontainers/runc/issues/1694 30func EnsureUserAddressDir() error { 31 xdgRuntimeDir := os.Getenv("XDG_RUNTIME_DIR") 32 if xdgRuntimeDir != "" { 33 dirs := strings.Split(xdgRuntimeDir, ":") 34 dir := filepath.Join(dirs[0], "buildkit") 35 if err := os.MkdirAll(dir, 0700); err != nil { 36 return err 37 } 38 return os.Chmod(dir, 0700|os.ModeSticky) 39 } 40 return nil 41} 42 43// UserRoot typically returns /home/$USER/.local/share/buildkit 44func UserRoot() string { 45 // pam_systemd sets XDG_RUNTIME_DIR but not other dirs. 46 xdgDataHome := os.Getenv("XDG_DATA_HOME") 47 if xdgDataHome != "" { 48 dirs := strings.Split(xdgDataHome, ":") 49 return filepath.Join(dirs[0], "buildkit") 50 } 51 home := os.Getenv("HOME") 52 if home != "" { 53 return filepath.Join(home, ".local", "share", "buildkit") 54 } 55 return Root 56} 57 58// UserConfigDir returns dir for storing config. /home/$USER/.config/buildkit/ 59func UserConfigDir() string { 60 xdgConfigHome := os.Getenv("XDG_CONFIG_HOME") 61 if xdgConfigHome != "" { 62 return filepath.Join(xdgConfigHome, "buildkit") 63 } 64 home := os.Getenv("HOME") 65 if home != "" { 66 return filepath.Join(home, ".config", "buildkit") 67 } 68 return ConfigDir 69} 70