Skip to content

Commit 890d40e

Browse files
committed
Cleanup XDGRuntime logic
Signed-off-by: apostasie <[email protected]>
1 parent 300a705 commit 890d40e

File tree

9 files changed

+39
-35
lines changed

9 files changed

+39
-35
lines changed

pkg/buildkitutil/buildkitutil_freebsd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package buildkitutil
1818

19-
func getRuntimeVariableDataDir() string {
19+
func getRuntimeVariableDataDir() (string, error) {
2020
// Per hier(7) dated July 6, 2023.
21-
return "/var/run"
21+
return "/var/run", nil
2222
}

pkg/buildkitutil/buildkitutil_linux.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,24 @@ package buildkitutil
1818

1919
import (
2020
"fmt"
21-
22-
"github.com/containerd/log"
21+
"os"
2322

2423
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
2524
)
2625

27-
func getRuntimeVariableDataDir() string {
26+
func getRuntimeVariableDataDir() (string, error) {
2827
// Per Linux Foundation "Filesystem Hierarchy Standard" version 3.0 section 3.15.
2928
// Under version 2.3, this was "/var/run".
3029
run := "/run"
3130
if rootlessutil.IsRootless() {
3231
var err error
3332
run, err = rootlessutil.XDGRuntimeDir()
3433
if err != nil {
35-
log.L.Warn(err)
36-
run = fmt.Sprintf("/run/user/%d", rootlessutil.ParentEUID())
34+
if rootlessutil.IsRootlessChild() {
35+
return "", err
36+
}
37+
run = fmt.Sprintf("/run/user/%d", os.Geteuid())
3738
}
3839
}
39-
return run
40+
return run, nil
4041
}

pkg/buildkitutil/buildkitutil_unix.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ func getBuildkitHostCandidates(namespace string) ([]string, error) {
2828
return []string{}, fmt.Errorf("namespace must be specified")
2929
}
3030
// Try candidate locations of the current containerd namespace.
31-
run := getRuntimeVariableDataDir()
31+
run, err := getRuntimeVariableDataDir()
32+
if err != nil {
33+
return []string{}, err
34+
}
3235
var candidates []string
3336
if namespace != "default" {
3437
candidates = append(candidates, "unix://"+filepath.Join(run, fmt.Sprintf("buildkit-%s/buildkitd.sock", namespace)))

pkg/bypass4netnsutil/bypass4netnsutil.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package bypass4netnsutil
1818

1919
import (
2020
"context"
21-
"fmt"
2221
"os"
2322
"path/filepath"
2423
"strconv"
@@ -30,6 +29,7 @@ import (
3029
"github.com/containerd/containerd/v2/pkg/oci"
3130

3231
"github.com/containerd/nerdctl/v2/pkg/annotations"
32+
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
3333
)
3434

3535
func generateSecurityOpt(listenerPath string) (oci.SpecOpts, error) {
@@ -83,15 +83,8 @@ func GenerateBypass4netnsOpts(securityOptsMaps map[string]string, annotationsMap
8383
return opts, nil
8484
}
8585

86-
func getXDGRuntimeDir() (string, error) {
87-
if xrd := os.Getenv("XDG_RUNTIME_DIR"); xrd != "" {
88-
return xrd, nil
89-
}
90-
return "", fmt.Errorf("environment variable XDG_RUNTIME_DIR is not set")
91-
}
92-
9386
func CreateSocketDir() error {
94-
xdgRuntimeDir, err := getXDGRuntimeDir()
87+
xdgRuntimeDir, err := rootlessutil.XDGRuntimeDir()
9588
if err != nil {
9689
return err
9790
}
@@ -107,7 +100,7 @@ func CreateSocketDir() error {
107100
}
108101

109102
func GetBypass4NetnsdDefaultSocketPath() (string, error) {
110-
xdgRuntimeDir, err := getXDGRuntimeDir()
103+
xdgRuntimeDir, err := rootlessutil.XDGRuntimeDir()
111104
if err != nil {
112105
return "", err
113106
}
@@ -116,7 +109,7 @@ func GetBypass4NetnsdDefaultSocketPath() (string, error) {
116109
}
117110

118111
func GetSocketPathByID(id string) (string, error) {
119-
xdgRuntimeDir, err := getXDGRuntimeDir()
112+
xdgRuntimeDir, err := rootlessutil.XDGRuntimeDir()
120113
if err != nil {
121114
return "", err
122115
}
@@ -126,7 +119,7 @@ func GetSocketPathByID(id string) (string, error) {
126119
}
127120

128121
func GetPidFilePathByID(id string) (string, error) {
129-
xdgRuntimeDir, err := getXDGRuntimeDir()
122+
xdgRuntimeDir, err := rootlessutil.XDGRuntimeDir()
130123
if err != nil {
131124
return "", err
132125
}

pkg/defaults/defaults_freebsd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func CNINetConfPath() string {
3939
return cni.DefaultNetDir
4040
}
4141

42-
func CNIRuntimeDir() string {
43-
return "/run/cni"
42+
func CNIRuntimeDir() (string, error) {
43+
return "/run/cni", nil
4444
}
4545

4646
func CgroupManager() string {

pkg/defaults/defaults_linux.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
"github.com/containerd/containerd/v2/plugins"
2626
"github.com/containerd/go-cni"
27-
"github.com/containerd/log"
2827

2928
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
3029
)
@@ -88,16 +87,18 @@ func CNINetConfPath() string {
8887
return filepath.Join(xch, "cni/net.d")
8988
}
9089

91-
func CNIRuntimeDir() string {
90+
func CNIRuntimeDir() (string, error) {
9291
if !rootlessutil.IsRootless() {
93-
return "/run/cni"
92+
return "/run/cni", nil
9493
}
9594
xdr, err := rootlessutil.XDGRuntimeDir()
9695
if err != nil {
97-
log.L.Warn(err)
98-
xdr = fmt.Sprintf("/run/user/%d", rootlessutil.ParentEUID())
96+
if rootlessutil.IsRootlessChild() {
97+
return "", err
98+
}
99+
xdr = fmt.Sprintf("/run/user/%d", os.Geteuid())
99100
}
100-
return fmt.Sprintf("%s/cni", xdr)
101+
return filepath.Join(xdr, "cni"), nil
101102
}
102103

103104
func NerdctlTOML() string {

pkg/defaults/defaults_windows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func CNINetConfPath() string {
3939
return filepath.Join(os.Getenv("ProgramFiles"), "containerd", "cni", "conf")
4040
}
4141

42-
func CNIRuntimeDir() string {
43-
return ""
42+
func CNIRuntimeDir() (string, error) {
43+
return "", nil
4444
}
4545

4646
func IsSystemdAvailable() bool {

pkg/netutil/netutil_unix.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,11 @@ func (e *CNIEnv) generateIPAM(driver string, subnets []string, gatewayStr, ipRan
206206
ipamConfig = ipamConf
207207
case "dhcp":
208208
ipamConf := newDHCPIPAMConfig()
209-
ipamConf.DaemonSocketPath = filepath.Join(defaults.CNIRuntimeDir(), "dhcp.sock")
209+
crd, err := defaults.CNIRuntimeDir()
210+
if err != nil {
211+
return nil, err
212+
}
213+
ipamConf.DaemonSocketPath = filepath.Join(crd, "dhcp.sock")
210214
if err := systemutil.IsSocketAccessible(ipamConf.DaemonSocketPath); err != nil {
211215
log.L.Warnf("cannot access dhcp socket %q (hint: try running with `dhcp daemon --socketpath=%s &` in CNI_PATH to launch the dhcp daemon)", ipamConf.DaemonSocketPath, ipamConf.DaemonSocketPath)
212216
}

pkg/rootlessutil/xdg_linux.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"errors"
2121
"os"
2222
"path/filepath"
23+
"strconv"
2324
)
2425

2526
func XDGRuntimeDir() (string, error) {
@@ -28,10 +29,11 @@ func XDGRuntimeDir() (string, error) {
2829
}
2930
// Fall back to "/run/user/<euid>".
3031
// Note that We cannot rely on os.Geteuid() because we might be inside UserNS.
31-
if euid := os.Getenv("ROOTLESSKIT_PARENT_EUID"); euid != "" {
32-
return "/run/user/" + euid, nil
32+
euid, err := strconv.Atoi(os.Getenv("ROOTLESSKIT_PARENT_EUID"))
33+
if err != nil {
34+
return "", errors.New("environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/")
3335
}
34-
return "", errors.New("environment variable XDG_RUNTIME_DIR is not set, see https://rootlesscontaine.rs/getting-started/common/login/")
36+
return "/run/user/" + strconv.Itoa(euid), nil
3537
}
3638

3739
func XDGConfigHome() (string, error) {

0 commit comments

Comments
 (0)