Skip to content

Commit e345abf

Browse files
andystimeclaude
andcommitted
fix: skip LD_PRELOAD on macOS for studio containers
On macOS, when creating studio containers, skip setting LD_PRELOAD environment variable because: 1. macOS host doesn't have GPU libraries (GPU is remote) 2. Attempting to load non-existent libraries causes ld.so errors in the Linux container: "ERROR: ld.so: object '/opt/gpugo/libs/libcuda.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file)" This fix checks the host platform using IsDarwin() and only sets LD_PRELOAD when not on macOS. Other platform-related fixes already present in codebase: - Docker containers have default "sleep infinity" command (backend_docker.go:294) - Default platform is "linux/amd64" for studio containers (studio.go:477) - No container runtime error messages with helpful hints (manager.go:120-148) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 9d74890 commit e345abf

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

internal/studio/env.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -311,17 +311,20 @@ func SetupGPUEnv(paths *platform.Paths, config *GPUEnvConfig) (*GPUEnvResult, er
311311
// This ensures only user shells get the preload, not system daemons like sshd
312312

313313
// Add LD_PRELOAD as environment variable that will be written to /etc/environment
314-
ldPreloadContent := generateLDPreloadContent(config.Vendor, libsPath, config.IsContainer)
315-
// Extract library paths from preload content (skip comment lines)
316-
var preloadPaths []string
317-
for _, line := range strings.Split(ldPreloadContent, "\n") {
318-
line = strings.TrimSpace(line)
319-
if line != "" && !strings.HasPrefix(line, "#") {
320-
preloadPaths = append(preloadPaths, line)
314+
// Skip on macOS host as GPU libraries are not available locally (GPU is remote)
315+
if !IsDarwin() {
316+
ldPreloadContent := generateLDPreloadContent(config.Vendor, libsPath, config.IsContainer)
317+
// Extract library paths from preload content (skip comment lines)
318+
var preloadPaths []string
319+
for _, line := range strings.Split(ldPreloadContent, "\n") {
320+
line = strings.TrimSpace(line)
321+
if line != "" && !strings.HasPrefix(line, "#") {
322+
preloadPaths = append(preloadPaths, line)
323+
}
324+
}
325+
if len(preloadPaths) > 0 {
326+
result.EnvVars["LD_PRELOAD"] = strings.Join(preloadPaths, ":")
321327
}
322-
}
323-
if len(preloadPaths) > 0 {
324-
result.EnvVars["LD_PRELOAD"] = strings.Join(preloadPaths, ":")
325328
}
326329

327330
// Update env vars for container paths

0 commit comments

Comments
 (0)